Priežiūra
Kasdienė savarankiškai valdomos rtCloud instancijos priežiūra: atnaujinimas, atsarginių kopijų kūrimas, atkūrimas ir įprastų problemų šalinimas.
Dažniausiai naudojamos komandos
Reguliariai naudokite šias komandas savo rtCloud konteineriams valdyti. Paleiskite jas iš katalogo, kuriame yra docker-compose.production.yml.
# Patikrinkite visų konteinerių būseną ir sveikatą
docker compose -f docker-compose.production.yml ps
# Peržiūrėkite gyvus žurnalus (visos paslaugos)
docker compose -f docker-compose.production.yml logs -f
# Peržiūrėkite tik programos žurnalus
docker compose -f docker-compose.production.yml logs -f rtcloud
# Iš naujo paleiskite vieną konteinerį
docker compose -f docker-compose.production.yml restart rtcloud
# Sustabdykite visas paslaugas
docker compose -f docker-compose.production.yml down
# Paleiskite visas paslaugas
docker compose -f docker-compose.production.yml up -d
# Atidarykite apvalkalą programos konteinerio viduje
docker compose -f docker-compose.production.yml exec rtcloud bash
Atnaujinimas
rtCloud atnaujinimai platinami kaip naujos Docker vaizdo žymos. Atnaujinant ištraukiamas naujausias vaizdas ir iš naujo sukuriamas programos konteineris. Duomenų bazės migracijos paleidžiamos automatiškai paleidžiant.
1. Ištraukite naujausią vaizdą:
docker compose -f docker-compose.production.yml pull
2. Iš naujo sukurkite programos konteinerį:
docker compose -f docker-compose.production.yml up -d
Docker pakeičia tik tuos konteinerius, kurių vaizdas pasikeitė. MySQL konteineris ir visi pavadinti tomai nepaliekami.
Versijos fiksavimas
Norėdami atnaujinti į konkrečią versiją, o ne į latest, atnaujinkite RTCLOUD_IMAGE .env faile:
RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
Tada paleiskite docker compose pull ir up -d kaip nurodyta aukščiau.
Versijos grąžinimas
Paprastai versijos grąžinimas nerekomenduojamas, nes duomenų bazės migracijų negalima atšaukti. Jei versijos grąžinimas būtinas, atkurkite iš prieš atnaujinimą sukurtos duomenų bazės atsarginės kopijos.
Atsarginių kopijų kūrimas ir atkūrimas
Duomenų bazės atsarginė kopija
Paleiskite šią komandą, kad eksportuotumėte programos duomenų bazę į 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
Atsarginės kopijos failas įrašomas į jūsų dabartinį katalogą pagrindiniame kompiuteryje.
Duomenų bazės atkūrimas
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
Įkeltų failų atsarginė kopija
Apklausos pateikimuose dažnai yra įkeltų failų (nuotraukų, garso, dokumentų), saugomų pavadintuose Docker tomuose. Kurkite jų atsargines kopijas atskirai nuo duomenų bazės:
# Įkėlimų atsarginė kopija
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .
# Garso įrašų atsarginė kopija
docker run --rm \
-v rtcloud_audios:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
Pakeiskite rtcloud_uploads ir rtcloud_audios tikrais tomų pavadinimais (su COMPOSE_PROJECT_NAME priešdėliu), jei pakeitėte numatytąjį.
Įkeltų failų atkūrimas
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
Automatizuotos kasdienės atsarginės kopijos
Pridėkite cron užduotį pagrindiniame kompiuteryje, kad atsarginės kopijos būtų kuriamos automatiškai. Redaguokite root crontab naudodami crontab -e:
# Kasdienė duomenų bazės atsarginė kopija 2:00, saugokite 30 dienų istoriją
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
Trikčių šalinimas
Programos konteineris nepaleidžiamas
Patikrinkite konteinerio žurnalus dėl klaidų pranešimų:
docker compose -f docker-compose.production.yml logs rtcloud
Dažniausios priežastys:
- Trūkstami arba neteisingi aplinkos kintamieji
.envfaile - MySQL dar nepasiruošęs (palaukite 60 sekundžių ir patikrinkite vėl)
- Prievado konfliktas – kitas procesas jau naudoja
APP_PORT
MySQL nesveika
docker compose -f docker-compose.production.yml logs mysql
Dažniausios priežastys:
.envfaile nenustatytasMYSQL_ROOT_PASSWORD- Sugadintas duomenų tomas (retai – patikrinkite disko vietą su
df -h)
MySQL pirmą kartą paleidžiant gali užtrukti 30–60 sekundžių inicializuotis. Palaukite ir patikrinkite vėl prieš dariuosi išvadą, kad nepavyko.
Prievadas jau naudojamas
Pakeiskite APP_PORT arba SHINY_PORT .env faile į laisvą prievadą, tada iš naujo sukurkite konteinerius:
docker compose -f docker-compose.production.yml up -d --force-recreate
Norėdami sužinoti, kas naudoja prievadą pagrindiniame kompiuteryje:
lsof -i :8080
400 CSRF žetonas negalėjo būti patikrintas
Ši klaida rodoma vietinėje arba atvirkštinio tarpinio serverio aplinkoje, kur užklausos kilmė neatitinka tikėtamo pagrindinio kompiuterio. Išjunkite CSRF tikrinimą tik vietiniam kūrimui:
CSRF_VALIDATION_ENABLED=false
Tada iš naujo paleiskite programą:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
Gamyboje neišjunkite CSRF tikrinimo. Jei ši klaida kyla gamyboje, įsitikinkite, kad jūsų atvirkštinis tarpinis serveris persiunčia teisingus
HostirX-Forwarded-Forantraščius.
Pamirštas administratoriaus slaptažodis
Iš naujo nustatykite administratoriaus slaptažodį tiesiogiai duomenų bazėje. Prisijunkite prie MySQL konteinerio ir atnaujinkite slaptažodžio maišą:
1 žingsnis – sugeneruokite naują slaptažodžio maišą. Pakeiskite newpassword pageidaujamu slaptažodžiu:
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 žingsnis – atnaujinkite maišą duomenų bazėje:
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';"
Konteineris nuolat paleidžiamas iš naujo
Patikrinkite, ar nepavyksta sveikatos tikrinimas:
docker compose -f docker-compose.production.yml ps
docker inspect rtcloud-app --format '{{json .State.Health}}'
Programos sveikatos tikrinimas iškviečia /health galinio taško. Jei jis nuolat nepavyksta, patikrinkite programos žurnalus dėl paleidimo klaidų.
Disko vieta baigėsi
Nustatykite, kas sunaudoja vietą:
# Patikrinkite pagrindinio kompiuterio disko naudojimą
df -h
# Patikrinkite Docker disko naudojimą (vaizdai, konteineriai, tomai)
docker system df
# Pašalinkite nenaudojamus vaizdus ir sustabdytus konteinerius (saugu vykdyti)
docker system prune
Nenaudokite docker system prune --volumes, nes tai ištrins programos duomenis.
Sveikatos tikrinimai
Kiekviena paslauga turi automatinį sveikatos tikrinimą. Konteinerio būsena atspindi rezultatą:
| Konteineris | Tikrinimo metodas | Pradžios laikotarpis | Intervalas |
|---|---|---|---|
rtcloud-app | HTTP GET /health | 90 sekundžių | 30 sekundžių |
rtcloud-mysql | mysqladmin ping | 30 sekundžių | 10 sekundžių |
rtcloud-keycloak | HTTP GET :9000/health/live | 120 sekundžių | 30 sekundžių |
Konteineriai su nepavykusiu sveikatos tikrinimu automatiškai paleidžiami iš naujo pagal RESTART_POLICY nustatymą (numatytasis: unless-stopped).