ការថែទាំ
ការថែទាំ ប្រចាំ ថ្ងៃ សម្រាប់ rtCloud instance ដែល host ខ្លួនឯង: ការ upgrade, backup, restore, និង ការ ដោះស្រាយ បញ្ហា ទូទៅ។
Commands ទូទៅ
ប្រើ commands ទាំងនេះ ជា ប្រចាំ ដើម្បី គ្រប់គ្រង rtCloud containers របស់អ្នក។ Run ពួកវា ពី directory ដែល មាន docker-compose.production.yml។
# ពិនិត្យ status និង health នៃ containers ទាំងអស់
docker compose -f docker-compose.production.yml ps
# ស្វែងមើល logs ជាក់ស្ដែង (services ទាំងអស់)
docker compose -f docker-compose.production.yml logs -f
# ស្វែងមើល logs សម្រាប់ app តែប៉ុណ្ណោះ
docker compose -f docker-compose.production.yml logs -f rtcloud
# Restart container ម្ដង
docker compose -f docker-compose.production.yml restart rtcloud
# Stop services ទាំងអស់
docker compose -f docker-compose.production.yml down
# Start services ទាំងអស់
docker compose -f docker-compose.production.yml up -d
# បើក shell ក្នុង app container
docker compose -f docker-compose.production.yml exec rtcloud bash
ការ Upgrade
rtCloud updates ត្រូវបាន distribute ជា Docker image tags ថ្មី។ ការ Upgrade pull image ចុងក្រោយ ហើយ recreate app container។ Database migrations run ដោយ ស្វ័យប្រវត្តិ នៅ startup។
១. Pull image ចុងក្រោយ:
docker compose -f docker-compose.production.yml pull
២. Recreate app container:
docker compose -f docker-compose.production.yml up -d
Pinning Version
ដើម្បី upgrade ទៅ version ជាក់លាក់ ជំនួស latest, update RTCLOUD_IMAGE ក្នុង .env:
RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
ការ Downgrade
ការ Downgrade ជាទូទៅ មិន ត្រូវ ណែនាំ ទេ ព្រោះ database migrations មិន អាច ត្រឡប់ទៅ ។ ប្រសិនបើ ការ downgrade ចាំបាច់, restore ពី database backup ដែលថ ដែលបាន យក មុន ការ upgrade។
Backup និង Restore
Backup Database
docker compose -f docker-compose.production.yml exec mysql \
mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
> backup-$(date +%Y%m%d-%H%M%S).sql
Restore Database
docker compose -f docker-compose.production.yml exec -T mysql \
mysql -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
< backup-20240101-120000.sql
Backup ឯកសារ ដែល Upload
# Backup uploads
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .
# Backup audio recordings
docker run --rm \
-v rtcloud_audios:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
Restore ឯកសារ ដែល Upload
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
Backup ប្រចាំ ថ្ងៃ ស្វ័យប្រវត្តិ
បន្ថែម cron job នៅ host ដើម្បី run backups ដោយ ស្វ័យប្រវត្តិ។ កែ root crontab ជាមួយ crontab -e:
# Daily database backup នៅ 2:00 AM, រក្សា 30 ថ្ងៃ
0 2 * * * cd /opt/rtcloud && docker compose -f docker-compose.production.yml exec -T mysql \
mysqldump -u root -p"$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2)" smartsurvey \
> /backups/db-$(date +\%Y\%m\%d).sql && \
find /backups -name "db-*.sql" -mtime +30 -delete
ការ ដោះស្រាយ បញ្ហា
App container មិន ចាប់ ផ្ដើម
docker compose -f docker-compose.production.yml logs rtcloud
មូលហេតុ ទូទៅ:
- Environment variables ដែល ខ្វះ ឬ invalid ក្នុង
.env - MySQL មិន ទាន់ ready (រង់ចាំ ៦០ វិនាទី ហើយ ពិនិត្យ ម្ដង ទៀត)
- Port conflict — process ផ្សេង ដំណើរការ ស្រាប់ ជាមួយ
APP_PORT
MySQL មិន healthy
docker compose -f docker-compose.production.yml logs mysql
MySQL អាចចំណាយ ៣០–៦០ វិនាទី ដើម្បី initialize នៅ boot ដំបូង ។ រង់ចាំ ហើយ ពិនិត្យ ម្ដង ទៀត មុន ចាត់ ទុក ថា failure។
400 CSRF Token Could Not Be Verified
Error នេះ លេចឡើង ក្នុង local ឬ reverse-proxy environments ។ Disable CSRF validation សម្រាប់ local development ប៉ុណ្ណោះ:
CSRF_VALIDATION_ENABLED=false
ហើយ restart app:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
ភ្លេច Admin Password
ជំហានទី ១ — Generate hash ពាក្យ សម្ងាត់ ថ្មី:
docker compose -f docker-compose.production.yml exec rtcloud php -r "
\$salt = trim(shell_exec(\"mysql -h mysql -u root -p\\\"\${MYSQL_ROOT_PASSWORD}\\\" \${MYSQL_DATABASE} -se \\\"SELECT salt FROM ss_user WHERE username='admin';\\\"\"));
echo md5(\$salt . 'newpassword') . PHP_EOL;
"
ជំហានទី ២ — Update hash ក្នុង database:
docker compose -f docker-compose.production.yml exec mysql \
mysql -u root -p"${MYSQL_ROOT_PASSWORD}" smartsurvey \
-e "UPDATE ss_user SET password='<hash_from_step_1>' WHERE username='admin';"
Health Checks
| Container | វិធី Check | Start Period | Interval |
|---|---|---|---|
rtcloud-app | HTTP GET /health | ៩០ វិនាទី | ៣០ វិនាទី |
rtcloud-mysql | mysqladmin ping | ៣០ វិនាទី | ១០ វិនាទី |
rtcloud-keycloak | HTTP GET :9000/health/live | ១២០ វិនាទី | ៣០ វិនាទី |