Biežākās komandas

Regulāri izmantojiet šīs komandas savu rtCloud konteineru pārvaldībai. Palaidiet tās direktorijā, kas satur docker-compose.production.yml.

  # Pārbaudiet visu konteineru statusu un veselību
docker compose -f docker-compose.production.yml ps

# Skatiet dzīvus žurnālus (visi pakalpojumi)
docker compose -f docker-compose.production.yml logs -f

# Skatiet tikai lietotnes žurnālus
docker compose -f docker-compose.production.yml logs -f rtcloud

# Restartējiet vienu konteineru
docker compose -f docker-compose.production.yml restart rtcloud

# Apturiet visus pakalpojumus
docker compose -f docker-compose.production.yml down

# Palaidiet visus pakalpojumus
docker compose -f docker-compose.production.yml up -d

# Atveriet apvalku lietotnes konteinerā
docker compose -f docker-compose.production.yml exec rtcloud bash
  

Jaunināšana

rtCloud atjauninājumi tiek izplatīti kā jauni Docker attēlu tagi. Jaunināšana iegūst jaunāko attēlu un atveido lietotnes konteineru. Datu bāzes migrācijas darbojas automātiski startēšanas laikā.

1. Iegūstiet jaunāko attēlu:

  docker compose -f docker-compose.production.yml pull
  

2. Atjauniniet lietotnes konteineru:

  docker compose -f docker-compose.production.yml up -d
  

Docker aizstāj tikai tos konteinerus, kuru attēls ir mainījies. MySQL konteiners un visi nosauktie sējumi netiek ietekmēti.

Versijas fiksēšana

Lai jauninātu uz konkrētu versiju, nevis latest, atjauniniet RTCLOUD_IMAGE failā .env:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

Pēc tam palaidiet docker compose pull un up -d kā iepriekš.

Pazemināšana

Pazemināšana parasti nav ieteicama, jo datu bāzes migrācijas nevar tikt atceltas. Ja pazemināšana ir nepieciešama, atjaunojiet no datu bāzes dublējuma, kas ņemts pirms jaunināšanas.


Dublēšana un atjaunošana

Datu bāzes dublēšana

Palaidiet šo komandu, lai eksportētu lietojumprogrammas datu bāzi SQL failā:

  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
  

Dublējuma fails tiek ierakstīts jūsu pašreizējā direktorijā saimniekdatorā.

Datu bāzes atjaunošana

  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
  

Augšupielādēto failu dublēšana

Aptaujas iesniegumi bieži ietver augšupielādētus failus (fotogrāfijas, audio, dokumenti), kas tiek glabāti nosauktos Docker sējumos. Dublējiet tos atsevišķi no datu bāzes:

  # Dublējiet augšupielādes
docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .

# Dublējiet audio ierakstus
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

Aizstājiet rtcloud_uploads un rtcloud_audios ar jūsu faktiskajiem sējumu nosaukumiem (prefiksēti ar COMPOSE_PROJECT_NAME), ja mainījāt noklusējumu.

Augšupielādēto failu atjaunošana

  docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
  

Automatizētas ikdienas dublēšanas

Pievienojiet cron uzdevumu saimniekdatoram, lai automātiski palaistu dublēšanu. Rediģējiet saknes crontab ar crontab -e:

  # Ikdienas datu bāzes dublēšana pulksten 2:00, saglabājiet 30 dienu vēsturi
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
  

Problēmu novēršana

Lietotnes konteiners nesākas

Pārbaudiet konteinera žurnālus kļūdu ziņojumiem:

  docker compose -f docker-compose.production.yml logs rtcloud
  

Biežākie cēloņi:

  • Trūkstoši vai nederīgi vides mainīgie failā .env
  • MySQL vēl nav gatavs (pagaidiet 60 sekundes un pārbaudiet vēlreiz)
  • Porta konflikts — cits process jau izmanto APP_PORT

MySQL nav veselīgs

  docker compose -f docker-compose.production.yml logs mysql
  

Biežākie cēloņi:

  • MYSQL_ROOT_PASSWORD nav iestatīts failā .env
  • Bojāts datu sējums (rets — pārbaudiet diska vietu ar df -h)

MySQL pirmajā palaišanā inicializācijai var aizņemt 30–60 sekundes. Pagaidiet un pārbaudiet vēlreiz, pirms pieņemt, ka ir kļūda.

Ports jau tiek izmantots

Mainiet APP_PORT vai SHINY_PORT failā .env uz brīvu portu, pēc tam atjauniniet konteinerus:

  docker compose -f docker-compose.production.yml up -d --force-recreate
  

Lai atrastu, kas izmanto portu saimniekdatorā:

  lsof -i :8080
  

400 CSRF žetons nevar tikt verificēts

Šī kļūda parādās lokālās vai apgrieztā starpniekservera vidēs, kur pieprasījuma izcelsme neatbilst paredzētajam saimniekdatoram. Atspējojiet CSRF validāciju tikai lokālai izstrādei:

  CSRF_VALIDATION_ENABLED=false
  

Pēc tam restartējiet lietotni:

  docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
  

Neaktivizējiet CSRF validāciju ražošanā. Ja šī kļūda rodas ražošanā, pārliecinieties, ka jūsu apgrieztais starpniekserveris pārsūta pareizās Host un X-Forwarded-For galvenes.

Aizmirsa administratora paroli

Atiestatiet administratora paroli tieši datu bāzē. Savienojieties ar MySQL konteineru un atjauniniet paroles jauktu:

1. solis — Ģenerējiet jauno paroles jauktu. Aizstājiet newpassword ar vēlamo paroli:

  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;
"
  

2. solis — Atjauniniet jauktu datu bāzē:

  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';"
  

Konteiners turpina restartēties

Pārbaudiet, vai veselības pārbaude neizdevās:

  docker compose -f docker-compose.production.yml ps
docker inspect rtcloud-app --format '{{json .State.Health}}'
  

Lietotnes veselības pārbaude izsauc galapunktu /health. Ja tas atkārtoti neizdodas, pārbaudiet lietojumprogrammas žurnālus startēšanas kļūdām.

Diska vieta ir pilna

Identificējiet, kas patērē vietu:

  # Pārbaudiet saimniekdatora diska lietojumu
df -h

# Pārbaudiet Docker diska lietojumu (attēli, konteineri, sējumi)
docker system df

# Noņemiet neizmantotus attēlus un apstātus konteinerus (droši palaist)
docker system prune
  

Neizmantojiet docker system prune --volumes, jo tas dzēsīs lietojumprogrammas datus.


Veselības pārbaudes

Katram pakalpojumam ir automātiska veselības pārbaude. Konteinera statuss atspoguļo rezultātu:

KonteinersPārbaudes metodeSākuma periodsIntervāls
rtcloud-appHTTP GET /health90 sekundes30 sekundes
rtcloud-mysqlmysqladmin ping30 sekundes10 sekundes
rtcloud-keycloakHTTP GET :9000/health/live120 sekundes30 sekundes

Konteineri ar neizdevušos veselības pārbaudi tiek automātiski restartēti atbilstoši iestatījumam RESTART_POLICY (noklusējums: unless-stopped).

Vai šī lapa bija noderīga?