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វិធី CheckStart PeriodInterval
rtcloud-appHTTP GET /health៩០ វិនាទី៣០ វិនាទី
rtcloud-mysqlmysqladmin ping៣០ វិនាទី១០ វិនាទី
rtcloud-keycloakHTTP GET :9000/health/live១២០ វិនាទី៣០ វិនាទី
តើទំព័រនេះមានប្រយោជន៍ទេ?