10. 🚀 Байршуулалт болон үйл ажиллагаа
10.1 Байршуулалт ажлын урсгал
HONGIKINGAN CMS-ийн хөгжүүлэлтээс үйл ажиллагаа хүртэлх ажлын урсгалыг ойлгох нь үр дүнтэй төсөл удирдлагад чухал. Ерөнхий ажлын урсгал нь дараах байдалтай.
10.1.1 Хөгжүүлэлтийн сервер байршуулалт
📝 Эх код хадгалах
Хөгжүүлэлт дууссан код SVN/Git хадгалах сан руу хадгалах
🔨 Бүтээх болон багцлах
- Maven ашиглан төсөл бүтээх
- WAR файл үүсгэх
🚀 Хөгжүүлэлтийн сервер байршуулалт
- Хөгжүүлэлтийн сервер дээр WAR файл байршуулах
- Тохиргооны файл орчинд тохируулан засварлах
🧪 Хөгжүүлэлтийн сервер тест
- Функц тест
- Интеграци тест
- Гүйцэтгэл тест
10.1.2 Тест сервер байршуулалт
🚀 Тест сервер байршуулалт
- Тест сервер дээр WAR файл байршуулах
- Тохиргооны файл орчинд тохируулан засварлах
🔍 QA тест
- Функц тест
- Регресс тест
- Гүйцэтгэл тест
- Аюулгүй байдал тест
🔧 Асуудал засвар
- Илэрсэн асуудал засварлах
- Засварласан зүйл дахин байршуулах болон тестлэх
10.1.3 Үйл ажиллагааны сервер байршуулалт
📋 Байршуулалт төлөвлөгөө гаргах
- Байршуулалт хуваарь болон дараалал гаргах
- Буцаах төлөвлөгөө гаргах
🚀 Үйл ажиллагааны сервер байршуулалт
- Үйл ажиллагааны сервер дээр WAR файл байршуулах
- Тохиргооны файл орчинд тохируулан засварлах
- Өгөгдлийн сан схем өөрчлөлт хэрэгжүүлэх
✅ Байршуулалт баталгаажуулах
- Гол функцийн ажиллагаа шалгах
- Хяналтын систем шалгах
10.1.4 Үйл ажиллагаа болон засвар үйлчилгээ
📊 Хяналт
- Системийн төлөв хянах
- Лог хянах
- Гүйцэтгэл хянах
🚨 Асуудал хариулах
- Үйл ажиллагааны үед гарах асуудалд хариулах
- Яаралтай засвар хэрэглэх
🔧 Тогтмол засвар үйлчилгээ
- Тогтмол засвар хэрэглэх
- Гүйцэтгэл оновчлох
- Аюулгүй байдал шинэчлэх
10.2 Байршуулалт стратеги
HONGIKINGAN CMS-ийг үр дүнтэй байршуулахад зориулсан стратегийг судлах болно.
10.2.1 Гараар байршуулах
Хамгийн үндсэн байршуулалтын арга бөгөөд гараар WAR файлыг сервер дээр байршуулна.
[Санал болгох код] HONGIKINGAN CMS байршуулалтын скрипт жишээ
#!/bin/bash
# [Санал болгох код] HONGIKINGAN CMS байршуулалтын скрипт жишээ
# Хувьсагч тохиргоо
TOMCAT_HOME="/opt/tomcat"
APP_NAME="humanframe"
WAR_FILE="${APP_NAME}.war"
BACKUP_DIR="${TOMCAT_HOME}/backup"
TIMESTAMP=$(date +%Y%m%d%H%M%S)
# Лог функц
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Эхлэх лог
log "Байршуулалт эхлэх"
# Tomcat төлөв шалгах
if pgrep -f tomcat > /dev/null; then
log "Tomcat зогсоож байна..."
${TOMCAT_HOME}/bin/shutdown.sh
# Tomcat дуусах хүлээх
count=0
while pgrep -f tomcat > /dev/null; do
sleep 1
count=$((count+1))
if [ $count -gt 60 ]; then
log "Tomcat дуусах хугацаа хэтэрсэн. Албадан дуусгах оролдлого..."
pkill -9 -f tomcat
break
fi
done
log "Tomcat зогсоох дууссан"
else
log "Tomcat аль хэдийн зогссон байна."
fi
# Нөөцлөх хавтас үүсгэх
if [ ! -d "${BACKUP_DIR}" ]; then
log "Нөөцлөх хавтас үүсгэх: ${BACKUP_DIR}"
mkdir -p "${BACKUP_DIR}"
fi
# Одоо байгаа аппликейшн нөөцлөх
if [ -d "${TOMCAT_HOME}/webapps/ROOT" ]; then
log "Одоо байгаа аппликейшн нөөцлөж байна..."
tar -czf "${BACKUP_DIR}/ROOT_${TIMESTAMP}.tar.gz" -C "${TOMCAT_HOME}/webapps" ROOT
log "Нөөцлөлт дууссан: ${BACKUP_DIR}/ROOT_${TIMESTAMP}.tar.gz"
fi
# Одоо байгаа аппликейшн устгах
log "Одоо байгаа аппликейшн устгаж байна..."
rm -rf "${TOMCAT_HOME}/webapps/ROOT"
rm -f "${TOMCAT_HOME}/webapps/ROOT.war"
# Шинэ аппликейшн байршуулах
log "Шинэ аппликейшн байршуулж байна..."
cp "${WAR_FILE}" "${TOMCAT_HOME}/webapps/ROOT.war"
# Tomcat эхлүүлэх
log "Tomcat эхлүүлж байна..."
${TOMCAT_HOME}/bin/startup.sh
# Байршуулалт дууссан шалгах
log "Байршуулалт дууссан. Лог шалгаж байна..."
tail -f "${TOMCAT_HOME}/logs/catalina.out"
10.2.2 Автоматжуулсан байршуулалт
Jenkins, Ansible зэрэг хэрэгслийг ашиглан байршуулалтын процессыг автоматжуулах боломжтой.
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout scm
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy to Dev') {
when {
branch 'develop'
}
steps {
sh 'ansible-playbook deploy-dev.yml'
}
}
stage('Deploy to Test') {
when {
branch 'release/*'
}
steps {
sh 'ansible-playbook deploy-test.yml'
}
}
stage('Deploy to Production') {
when {
branch 'master'
}
steps {
input 'Deploy to production?'
sh 'ansible-playbook deploy-prod.yml'
}
}
}
post {
always {
junit '**/target/surefire-reports/*.xml'
}
success {
echo 'Deployment successful!'
}
failure {
echo 'Deployment failed!'
mail to: 'team@example.com',
subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
body: "Something is wrong with ${env.BUILD_URL}"
}
}
}
10.2.3 Тасралтгүй байршуулалт
Үйлчилгээ тасрахгүйгээр аппликейшн байршуулах арга.
Цэнхэр-ногоон байршуулалт
🔵 Хоёр орчин бэлтгэх
- Цэнхэр орчин: Одоо ажиллаж буй орчин
- Ногоон орчин: Шинэ хувилбар байршуулах орчин
🟢 Ногоон орчинд байршуулах
- Шинэ хувилбарыг ногоон орчинд байршуулах
- Ногоон орчинд тест хийх
🔄 Трафик шилжүүлэх
Ачааллын тэнцвэржүүлэгчийн тохиргоог өөрчилж трафикийг ногоон орчин руу шилжүүлэх
🔵 Цэнхэр орчин шинэчлэх
- Цэнхэр орчныг шинэ хувилбар болгон шинэчлэх
- Дараагийн байршуулалтад зориулсан хүлээлгийн орчин болгон хадгалах
Канари байршуулалт
🐤 Шинэ хувилбар хэсэгчлэн байршуулах
Шинэ хувилбарыг зөвхөн зарим сервер дээр байршуулах
📊 Трафикийн хэсгийг шилжүүлэх
Трафикийн хэсгийг (жишээ: 5%) шинэ хувилбар руу шилжүүлэх
🔍 Хяналт болон баталгаажуулалт
- Шинэ хувилбарын гүйцэтгэл болон тогтвортой байдлыг хянах
- Асуудал байхгүй бол трафикийн хувийг аажмаар нэмэгдүүлэх
✅ Бүрэн шилжүүлэх
Бүх трафикийг шинэ хувилбар руу шилжүүлэх
10.3 Байршуулах үед шалгах тохиргооны зүйлс
HONGIKINGAN CMS-ийг байршуулахад заавал шалгах ёстой тохиргооны зүйлс байдаг. Эдгээр тохиргоог зөв хийхгүй бол систем зөв ажиллахгүй байж болно.
10.3.1 context-properties.xml тохиргоо
Хэрэглэх серверийн зориулалтад тохирсон профайл (хөгжүүлэлт-dev, үйл ажиллагаа-prd) доторх тохиргооны зүйл бүрийг бодит сервер дээр тохируулан засварлах хэрэгтэй.
Заавал тохируулах (өөрчлөх) зүйлс
GLOBAL_SITE_DOMAIN: Сайтын домэйнWEB_DIR: Веб аппликейшны хавтасын замTHEME_PATH: Сэдвийн хавтасын зам
Сонголтын тохиргооны зүйлс
DAUM_API_KEY: Daum газрын зураг, хаягийн API сонголт ашиглах үедNAVER_API_KEY: Naver газрын зургийн API сонголт ашиглах үедGOOGLE_API_KEY: Google газрын зургийн API сонголт ашиглах үед
<beans profile="dev">
<bean id="propertiesService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl">
<property name="properties">
<props>
<prop key="GLOBAL_SITE_DOMAIN">http://dev.example.com</prop>
<prop key="WEB_DIR">/home/dev/humanframe</prop>
<prop key="THEME_PATH">/home/dev/humanframe/theme</prop>
</props>
</property>
</bean>
</beans>
<beans profile="prd">
<bean id="propertiesService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl">
<property name="properties">
<props>
<prop key="GLOBAL_SITE_DOMAIN">http://www.example.com</prop>
<prop key="WEB_DIR">/home/prod/humanframe</prop>
<prop key="THEME_PATH">/home/prod/humanframe/theme</prop>
</props>
</property>
</bean>
</beans>
10.3.2 DBMS JNDI тохиргоо
CMS дотор ашиглаж буй үндсэн JNDI нэр нь "cmsdb" байна. Холбогдох тохиргоог context-datasource.xml дээр шалгаж өөрчлөх боломжтой.
<Resource name="jdbc/cmsdb"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="cmsuser"
password="cmspassword"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/cmsdb?serverTimezone=UTC"/>
Бусад WAS серверийн тохиргоо
Сервер бүрийн бүтээгдэхүүний JNDI тохиргооны аргын дагуу тохиргоо нэмэх хэрэгтэй.
10.3.3 Spring Profile тохиргоо
WAS сервер ажиллуулах үед Spring Profile хэрэглэн ажиллуулах хэрэгтэй.
VM arguments тохиргоо
-Dspring.profiles.active=prd (үйл ажиллагаа) эсвэл -Dspring.profiles.active=dev (хөгжүүлэлт)
Tomcat ашиглах үеийн тохиргооны жишээ
# CMS PROFILE
JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=prd"
10.3.4 Веб засварлагч тохиргоо
Засварлагч-webeditorplus ашиглах тохиолдолд ImagePath.jsp файлын замын тохиргоог шалгах хэрэгтэй.
<%
String imagePhysicalPath = "";
String activeProfiles = System.getProperty("spring.profiles.active");
if("local".equalsIgnoreCase(activeProfiles)) {
imagePhysicalPath = "D:\\H-CMS-2.2\\workspace\\humanframe";
} else if("dev".equalsIgnoreCase(activeProfiles)) {
imagePhysicalPath = "/home/dev/humanframe";
} else {
imagePhysicalPath = "/home/prod/humanframe";
}
%>
Чухал зүйлс
imagePhysicalPath хувьсагч нь бодит серверийн үнэмлэхүй замтай тохирч байгаа эсэхийг шалгаж, шаардлагатай бол засварлах хэрэгтэй.
10.4 Орчин бүрийн тохиргоо удирдлага
HONGIKINGAN CMS нь Spring профайл ашиглан орчин бүрт өөр өөр тохиргоо хэрэглэх боломжтой.
10.4.1 Профайл тохиргоо
<beans profile="local">
<!-- Дотоод орчны тохиргоо -->
</beans>
<beans profile="dev">
<!-- Хөгжүүлэлтийн орчны тохиргоо -->
</beans>
<beans profile="test">
<!-- Тестийн орчны тохиргоо -->
</beans>
<beans profile="prd">
<!-- Үйл ажиллагааны орчны тохиргоо -->
</beans>
Профайл идэвхжүүлэх арга
☕ JVM сонголтоор идэвхжүүлэх
-Dspring.profiles.active=dev
🌐 web.xml-д идэвхжүүлэх
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
🔧 Орчны хувьсагчаар идэвхжүүлэх
export SPRING_PROFILES_ACTIVE=dev
10.4.2 Орчин бүрийн тохиргооны файл
Өгөгдлийн эх тохиргоо
<beans profile="local">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/localdb" />
</beans>
<beans profile="dev">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/devdb" />
</beans>
<beans profile="test">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/testdb" />
</beans>
<beans profile="prd">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/proddb" />
</beans>
Шинж чанарын тохиргоо
<beans profile="local">
<bean id="propertiesService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl">
<property name="properties">
<props>
<prop key="WEB_DIR">C:/dev/workspace/humanframe</prop>
<prop key="FILE_UPLOAD_DIR">/data</prop>
<prop key="LOG_PATH">/logs</prop>
</props>
</property>
</bean>
</beans>
<beans profile="prd">
<bean id="propertiesService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl">
<property name="properties">
<props>
<prop key="WEB_DIR">/home/prod/humanframe</prop>
<prop key="FILE_UPLOAD_DIR">/data</prop>
<prop key="LOG_PATH">/logs</prop>
</props>
</property>
</bean>
</beans>
10.5 Нөөцлөх болон сэргээх
Системийн эвдрэл гарах үед хурдан сэргээх боломжтой байхын тулд нөөцлөх болон сэргээх стратеги гаргах хэрэгтэй.
10.5.1 Өгөгдлийн сангийн нөөцлөлт
MySQL нөөцлөлт
# Бүх өгөгдлийн сангийн нөөцлөлт
mysqldump -u username -p --all-databases > backup_$(date +%Y%m%d).sql
# Тодорхой өгөгдлийн сангийн нөөцлөлт
mysqldump -u username -p humanframe > humanframe_$(date +%Y%m%d).sql
# Шахалттай нөөцлөлт
mysqldump -u username -p humanframe | gzip > humanframe_$(date +%Y%m%d).sql.gz
Oracle нөөцлөлт
# exp хэрэгсэл ашиглах
exp username/password@sid file=backup_$(date +%Y%m%d).dmp full=y
# expdp хэрэгсэл ашиглах
expdp username/password@sid directory=DATA_PUMP_DIR dumpfile=backup_$(date +%Y%m%d).dmp full=y
10.5.2 Файлын системийн нөөцлөлт
rsync ашиглан нөөцлөх
# Бүх аппликейшны хавтас нөөцлөх
rsync -avz --delete /home/humanframe/app/ /backup/humanframe/app/
# Зөвхөн хуулах файл нөөцлөх
rsync -avz --delete /home/humanframe/data/ /backup/humanframe/data/
tar ашиглан нөөцлөх
# Бүх аппликейшны хавтас нөөцлөх
tar -czf /backup/humanframe_$(date +%Y%m%d).tar.gz /home/humanframe/
# Нэмэлт нөөцлөлт
tar -czf /backup/humanframe_$(date +%Y%m%d).tar.gz -g /backup/humanframe.snar /home/humanframe/
10.5.3 Автоматжуулсан нөөцлөлт
cron ашиглан автомат нөөцлөлт
0 2 * * * root /home/humanframe/scripts/backup.sh
#!/bin/bash
# Хувьсагч тохиргоо
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup/humanframe
DB_USER=username
DB_PASS=password
DB_NAME=humanframe
APP_DIR=/home/humanframe
# Хавтас үүсгэх
mkdir -p $BACKUP_DIR/$DATE
# Өгөгдлийн сангийн нөөцлөлт
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/$DATE/db_$DATE.sql.gz
# Файлын системийн нөөцлөлт
tar -czf $BACKUP_DIR/$DATE/app_$DATE.tar.gz $APP_DIR/app
tar -czf $BACKUP_DIR/$DATE/data_$DATE.tar.gz $APP_DIR/data
# Хуучин нөөцлөлт устгах (30 хоногоос дээш)
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
# Лог бичих
echo "Backup completed at $(date)" >> $BACKUP_DIR/backup.log
10.5.4 Сэргээх журам
Өгөгдлийн сан сэргээх
# MySQL сэргээх
mysql -u username -p humanframe < backup_20240101.sql
# Шахалттай файлаас сэргээх
gunzip -c backup_20240101.sql.gz | mysql -u username -p humanframe
Файлын систем сэргээх
# tar файлаас сэргээх
tar -xzf /backup/humanframe_20240101.tar.gz -C /
# rsync ашиглан сэргээх
rsync -avz /backup/humanframe/app/ /home/humanframe/app/
10.6 Хяналт болон засвар үйлчилгээ
Системийн тогтвортой үйл ажиллагааны тулд хяналт болон засвар үйлчилгээний арга хэмжээ гаргах хэрэгтэй.
10.6.1 Системийн хяналт
Хяналтын зорилтот
🖥️ Серверийн нөөц
- CPU ашиглалт
- Санах ой ашиглалт
- Дискний ашиглалт
- Сүлжээний трафик
🌐 Аппликейшн
- Хариу өгөх хугацаа
- Алдаа гарах тоо
- Зэрэг холбогдогчдын тоо
- Гүйлгээ боловсруулах хэмжээ
🗄️ Өгөгдлийн сан
- Асуулга гүйцэтгэх хугацаа
- Холболтын тоо
- Хүснэгтийн хэмжээ
- Индексийн ашиглалтын байдал
Хяналтын хэрэгсэл
Санал болгох хяналтын хэрэгсэл
- Prometheus + Grafana: Метрик цуглуулах болон харуулах, сэрэмжлүүлэг тохируулах
- ELK стек: Лог цуглуулах болон шинжлэх, хэвийн бус шинж тэмдэг илрүүлэх
- Pinpoint/Scouter: Аппликейшны гүйцэтгэл хянах, гүйлгээ мөрдөх
10.6.2 Лог удирдлага
Лог цуглуулах болон шинжлэх
📥 Лог цуглуулах
- Filebeat, Fluentd зэрэг ашиглан лог цуглуулах
- Төвлөрсөн лог сервер рүү илгээх
💾 Лог хадгалах
- Elasticsearch-д лог хадгалах
- Лог хадгалах хугацаа тохируулах
📊 Лог шинжлэх
- Kibana ашиглан лог харуулах болон шинжлэх
- Лог загварын шинжилгээгээр хэвийн бус шинж тэмдэг илрүүлэх
Лог эргүүлэх
/home/humanframe/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 tomcat tomcat
sharedscripts
postrotate
/bin/kill -USR1 $(cat /home/humanframe/tomcat/logs/catalina.pid 2>/dev/null) 2>/dev/null || true
endscript
}
10.6.3 Тогтмол засвар үйлчилгээ
Засвар үйлчилгээний зүйлс
🔄 Засвар болон шинэчлэл
- Аюулгүй байдлын засвар хэрэглэх
- Номын сангийн шинэчлэл
- Функц сайжруулах
⚡ Гүйцэтгэл оновчлол
- Өгөгдлийн сангийн индекс оновчлох
- Асуулга тохируулах
- Кэш тохиргоо тохируулах
🧹 Өгөгдөл цэвэрлэх
- Хэрэггүй өгөгдөл устгах
- Лог файл цэвэрлэх
- Түр файл цэвэрлэх
🔒 Аюулгүй байдал шалгах
- Эмзэг байдал скан хийх
- Хандах эрх шалгах
- Аюулгүй байдлын тохиргоо шалгах
Засвар үйлчилгээний хуваарь
| Давтамж | Шалгах зүйлс |
|---|---|
| Өдөр тутмын шалгалт | Системийн төлөв шалгах, алдааны лог шалгах, нөөцлөлт дууссан эсэх шалгах |
| Долоо хоног тутмын шалгалт | Гүйцэтгэлийн үзүүлэлт шинжлэх, дискний зай шалгах, аюулгүй байдлын лог шалгах |
| Сар тутмын шалгалт | Өгөгдлийн сан оновчлох, хэрэггүй өгөгдөл цэвэрлэх, аюулгүй байдлын засвар хэрэглэх |
| Улирал тутмын шалгалт | Бүх системийн шалгалт, гүйцэтгэлийн тест, гамшгаас сэргээх тест |
Байршуулалт болон үйл ажиллагааны гол цэгүүд
- Системтэй байршуулалтын процесс: Хөгжүүлэлт → Тест → Үйл ажиллагаа шат бүрийн баталгаажуулалт
- Орчин бүрийн тохиргоо удирдлага: Spring Profile ашиглан орчин бүрийн тохиргоо тусгаарлах
- Автоматжуулсан нөөцлөлт: Тогтмол өгөгдлийн сан болон файлын системийн нөөцлөлт
- Тасралтгүй хяналт: Системийн төлөв болон гүйцэтгэлийн үзүүлэлт хянах
- Тогтмол засвар үйлчилгээ: Аюулгүй байдлын засвар, гүйцэтгэл оновчлол, өгөгдөл цэвэрлэх