Apkope
Ikdienas apkope pašmitinātai rtCloud instancei: jaunināšana, dublēšana, atjaunošana un biežu problēmu novēršana.
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_PASSWORDnav 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
HostunX-Forwarded-Forgalvenes.
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:
| Konteiners | Pārbaudes metode | Sākuma periods | Intervāls |
|---|---|---|---|
rtcloud-app | HTTP GET /health | 90 sekundes | 30 sekundes |
rtcloud-mysql | mysqladmin ping | 30 sekundes | 10 sekundes |
rtcloud-keycloak | HTTP GET :9000/health/live | 120 sekundes | 30 sekundes |
Konteineri ar neizdevušos veselības pārbaudi tiek automātiski restartēti atbilstoši iestatījumam RESTART_POLICY (noklusējums: unless-stopped).