Karbantartás
Napi karbantartás saját üzemeltetésű rtCloud-példányhoz: frissítés, biztonsági mentés, visszaállítás és általános problémák hibaelhárítása.
Általános parancsok
Ezeket a parancsokat rendszeresen használja az rtCloud-konténerek kezeléséhez. Futtassa őket a docker-compose.production.yml fájlt tartalmazó könyvtárból.
# Az összes konténer állapotának és egészségének ellenőrzése
docker compose -f docker-compose.production.yml ps
# Élő naplók megtekintése (összes szolgáltatás)
docker compose -f docker-compose.production.yml logs -f
# Csak az alkalmazás naplóinak megtekintése
docker compose -f docker-compose.production.yml logs -f rtcloud
# Egyetlen konténer újraindítása
docker compose -f docker-compose.production.yml restart rtcloud
# Az összes szolgáltatás leállítása
docker compose -f docker-compose.production.yml down
# Az összes szolgáltatás elindítása
docker compose -f docker-compose.production.yml up -d
# Shell megnyitása az alkalmazáskonténeren belül
docker compose -f docker-compose.production.yml exec rtcloud bash
Frissítés
Az rtCloud frissítéseit új Docker-képfájl-címkékként terjesztik. A frissítés lekéri a legújabb képfájlt, és újra létrehozza az alkalmazáskonténert. Az adatbázis-migrációk automatikusan futnak az indításkor.
1. A legújabb képfájl lekérése:
docker compose -f docker-compose.production.yml pull
2. Az alkalmazáskonténer újra létrehozása:
docker compose -f docker-compose.production.yml up -d
A Docker csak azokat a konténereket cseréli le, amelyek képfájlja megváltozott. A MySQL-konténer és az összes elnevezett kötet nem érintett.
Verzió rögzítése
Egy adott verzióra való frissítéshez a latest helyett frissítse az RTCLOUD_IMAGE értékét a .env fájlban:
RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
Majd futtassa a docker compose pull és up -d parancsokat a fentiek szerint.
Visszaminősítés
A visszaminősítés általában nem ajánlott, mivel az adatbázis-migrációk nem vonhatók vissza. Ha visszaminősítésre van szükség, állítsa vissza a frissítés előtt készített adatbázis-biztonsági mentésből.
Biztonsági mentés és visszaállítás
Az adatbázis biztonsági mentése
Futtassa ezt a parancsot az alkalmazás adatbázisának SQL-fájlba való exportálásához:
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
A biztonsági mentési fájl a gazdagép aktuális könyvtárába kerül.
Az adatbázis visszaállítása
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
A feltöltött fájlok biztonsági mentése
A felmérési beküldések gyakran tartalmaznak feltöltött fájlokat (fényképek, hangfájlok, dokumentumok), amelyek elnevezett Docker-kötetekben tárolódnak. Ezeket külön kell biztonsági másolatot készíteni az adatbázistól:
# Feltöltések biztonsági mentése
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .
# Hangfelvételek biztonsági mentése
docker run --rm \
-v rtcloud_audios:/data \
-v "$(pwd):/backup" \
alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
Cserélje az rtcloud_uploads és rtcloud_audios értékeket a tényleges kötetnevekre (a COMPOSE_PROJECT_NAME értékével előtagolva), ha megváltoztatta az alapértelmezett értékeket.
A feltöltött fájlok visszaállítása
docker run --rm \
-v rtcloud_uploads:/data \
-v "$(pwd):/backup" \
alpine tar xzf /backup/uploads-20240101.tar.gz -C /data
Automatizált napi biztonsági mentések
Adjon hozzá egy cron-feladatot a gazdagépen az automatikus biztonsági mentések futtatásához. Szerkessze a root crontab-ot a crontab -e paranccsal:
# Napi adatbázis-biztonsági mentés reggel 2-kor, 30 napos előzmények megőrzésével
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
Hibaelhárítás
Az alkalmazáskonténer nem indul el
Ellenőrizze a konténer naplóit a hibaüzenetekért:
docker compose -f docker-compose.production.yml logs rtcloud
Általános okok:
- Hiányzó vagy érvénytelen környezeti változók a
.envfájlban - A MySQL még nem áll készen (várjon 60 másodpercet, majd ellenőrizze újra)
- Port-ütközés — egy másik folyamat már használja az
APP_PORT-ot
A MySQL nem egészséges
docker compose -f docker-compose.production.yml logs mysql
Általános okok:
- A
MYSQL_ROOT_PASSWORDnincs beállítva a.envfájlban - Sérült adatkötet (ritka — ellenőrizze a lemezterületet a
df -hparanccsal)
A MySQL akár 30–60 másodpercig is eltarthat az első indításkor való inicializálásig. Várjon, és ellenőrizze újra a hiba feltételezése előtt.
A port már használatban van
Változtassa meg az APP_PORT-ot vagy a SHINY_PORT-ot a .env fájlban egy szabad portra, majd hozza létre újra a konténereket:
docker compose -f docker-compose.production.yml up -d --force-recreate
A gazdagépen egy portot használó folyamat megkeresése:
lsof -i :8080
400 CSRF Token Could Not Be Verified
Ez a hiba helyi vagy fordított proxy környezetekben jelenik meg, ahol a kérés eredete nem egyezik a várt gazdagéppel. Tiltsa le a CSRF-ellenőrzést csak helyi fejlesztéshez:
CSRF_VALIDATION_ENABLED=false
Majd indítsa újra az alkalmazást:
docker compose -f docker-compose.production.yml up -d --force-recreate rtcloud
Ne tiltsa le a CSRF-ellenőrzést éles környezetben. Ha ez a hiba éles környezetben fordul elő, győződjön meg arról, hogy a fordított proxy a helyes
HostésX-Forwarded-Forfejléceket továbbítja.
Elfelejtette a rendszergazdai jelszót
Állítsa vissza a rendszergazdai jelszót közvetlenül az adatbázisban. Csatlakozzon a MySQL-konténerhez, és frissítse a jelszó-hash-t:
1. lépés — Generálja az új jelszó hash-ét. Cserélje a newpassword értéket a kívánt jelszóra:
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. lépés — Frissítse a hash-t az adatbázisban:
docker compose -f docker-compose.production.yml exec mysql \
mysql -u root -p"${MYSQL_ROOT_PASSWORD}" smartsurvey \
-e "UPDATE ss_user SET password='<hash_az_1_lepesbol>' WHERE username='admin';"
A konténer folyamatosan újraindul
Ellenőrizze, hogy az állapotellenőrzés nem sikertelen-e:
docker compose -f docker-compose.production.yml ps
docker inspect rtcloud-app --format '{{json .State.Health}}'
Az alkalmazás állapotellenőrzése a /health végpontot hívja meg. Ha ez ismételten sikertelen, ellenőrizze az alkalmazás naplóit az indítási hibákért.
A lemezterület megtelt
Azonosítsa, mi foglalja el a területet:
# Gazdagép lemezhasználatának ellenőrzése
df -h
# Docker lemezhasználatának ellenőrzése (képfájlok, konténerek, kötetek)
docker system df
# Nem használt képfájlok és leállított konténerek eltávolítása (biztonságos futtatni)
docker system prune
Ne használja a docker system prune --volumes parancsot, mert az törli az alkalmazásadatokat.
Állapotellenőrzések
Minden szolgáltatásnak automatikus állapotellenőrzése van. A konténer állapota tükrözi az eredményt:
| Konténer | Ellenőrzési módszer | Indítási időszak | Intervallum |
|---|---|---|---|
rtcloud-app | HTTP GET /health | 90 másodperc | 30 másodperc |
rtcloud-mysql | mysqladmin ping | 30 másodperc | 10 másodperc |
rtcloud-keycloak | HTTP GET :9000/health/live | 120 másodperc | 30 másodperc |
A sikertelen állapotellenőrzéssel rendelkező konténerek automatikusan újraindulnak a RESTART_POLICY beállítás szerint (alapértelmezett: unless-stopped).