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 .env faile
  • 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:

  • .env faile nenustatytas MYSQL_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 Host ir X-Forwarded-For antrašč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ą:

KonteinerisTikrinimo metodasPradžios laikotarpisIntervalas
rtcloud-appHTTP GET /health90 sekundžių30 sekundžių
rtcloud-mysqlmysqladmin ping30 sekundžių10 sekundžių
rtcloud-keycloakHTTP GET :9000/health/live120 sekundžių30 sekundžių

Konteineriai su nepavykusiu sveikatos tikrinimu automatiškai paleidžiami iš naujo pagal RESTART_POLICY nustatymą (numatytasis: unless-stopped).

Ar šis puslapis buvo naudingas?