Vanliga kommandon

Använd dessa kommandon regelbundet för att hantera dina rtCloud-containrar. Kör dem från katalogen som innehåller docker-compose.production.yml.

  # Kontrollera status och hälsa för alla containrar
docker compose -f docker-compose.production.yml ps

# Visa liveloggar (alla tjänster)
docker compose -f docker-compose.production.yml logs -f

# Visa loggar för enbart appen
docker compose -f docker-compose.production.yml logs -f rtcloud

# Starta om en enstaka container
docker compose -f docker-compose.production.yml restart rtcloud

# Stoppa alla tjänster
docker compose -f docker-compose.production.yml down

# Starta alla tjänster
docker compose -f docker-compose.production.yml up -d

# Öppna ett skal inuti appcontainern
docker compose -f docker-compose.production.yml exec rtcloud bash
  

Uppgradering

rtCloud-uppdateringar distribueras som nya Docker-avbildstaggar. Uppgradering hämtar den senaste avbilden och återskapar appcontainern. Databasmigrationer körs automatiskt vid start.

1. Hämta den senaste avbilden:

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

2. Återskapa appcontainern:

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

Docker ersätter bara containrarna vars avbild har ändrats. MySQL-containern och alla namngivna volymer påverkas inte.

Fästa en version

För att uppgradera till en specifik version istället för latest, uppdatera RTCLOUD_IMAGE i .env:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

Kör sedan docker compose pull och up -d som ovan.

Nedgradering

Nedgradering rekommenderas generellt inte, eftersom databasmigrationer inte kan återställas. Om en nedgradering är nödvändig, återställ från en databassäkerhetskopia tagen före uppgraderingen.


Säkerhetskopiering och återställning

Säkerhetskopiera databasen

Kör detta kommando för att exportera applikationsdatabasen till en SQL-fil:

  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
  

Säkerhetskopian skrivs till din aktuella katalog på värden.

Återställa databasen

  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
  

Säkerhetskopiera uppladdade filer

Undersökningsinlämningar inkluderar ofta uppladdade filer (foton, ljud, dokument) lagrade i namngivna Docker-volymer. Säkerhetskopiera dem separat från databasen:

  # Säkerhetskopiera uppladdningar
docker run --rm \
  -v rtcloud_uploads:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/uploads-$(date +%Y%m%d).tar.gz -C /data .

# Säkerhetskopiera ljudinspelningar
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

Ersätt rtcloud_uploads och rtcloud_audios med dina faktiska volymnamn (prefixade med COMPOSE_PROJECT_NAME) om du ändrade standardvärdet.

Återställa uppladdade filer

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

Automatiserade dagliga säkerhetskopior

Lägg till ett cron-jobb på värden för att köra säkerhetskopior automatiskt. Redigera root-crontab med crontab -e:

  # Daglig databassäkerhetskopiering kl. 02:00, behåll 30 dagars historik
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
  

Felsökning

Appcontainern startar inte

Kontrollera containerloggarna för felmeddelanden:

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

Vanliga orsaker:

  • Saknade eller ogiltiga miljövariabler i .env
  • MySQL är inte redo ännu (vänta 60 sekunder och kontrollera igen)
  • Portkollision — en annan process använder redan APP_PORT

MySQL är inte frisk

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

Vanliga orsaker:

  • MYSQL_ROOT_PASSWORD är inte angett i .env
  • Skadad datavolym (sällsynt — kontrollera diskutrymme med df -h)

MySQL kan ta 30–60 sekunder att initialisera vid allra första starten. Vänta och kontrollera igen innan du antar att det är ett fel.

Porten används redan

Ändra APP_PORT eller SHINY_PORT i .env till en ledig port och återskapa sedan containrarna:

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

För att hitta vad som använder en port på värden:

  lsof -i :8080
  

400 CSRF-token kunde inte verifieras

Det här felet uppstår i lokala eller omvänd proxy-miljöer där begärans ursprung inte matchar den förväntade värden. Inaktivera CSRF-validering enbart för lokal utveckling:

  CSRF_VALIDATION_ENABLED=false
  

Starta sedan om appen:

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

Inaktivera inte CSRF-validering i produktion. Om det här felet uppstår i produktion, se till att din omvända proxy vidarebefordrar korrekta Host- och X-Forwarded-For-huvuden.

Glömt adminlösenordet

Återställ adminlösenordet direkt i databasen. Anslut till MySQL-containern och uppdatera lösenordshash:

Steg 1 — Generera den nya lösenordshash. Ersätt nyttlösenord med ditt önskade lösenord:

  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 . 'nyttlösenord') . PHP_EOL;
"
  

Steg 2 — Uppdatera hashen i databasen:

  docker compose -f docker-compose.production.yml exec mysql \
  mysql -u root -p"${MYSQL_ROOT_PASSWORD}" smartsurvey \
  -e "UPDATE ss_user SET password='<hash_från_steg_1>' WHERE username='admin';"
  

Containern startar om kontinuerligt

Kontrollera om hälsokontrollen misslyckas:

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

Appens hälsokontroll anropar slutpunkten /health. Om den misslyckas upprepade gånger, kontrollera applikationsloggarna för startfel.

Diskutrymmet är fullt

Identifiera vad som förbrukar utrymme:

  # Kontrollera värdens diskanvändning
df -h

# Kontrollera Dockers diskanvändning (avbilder, containrar, volymer)
docker system df

# Ta bort oanvända avbilder och stoppade containrar (säkert att köra)
docker system prune
  

Använd inte docker system prune --volumes eftersom det raderar applikationsdata.


Hälsokontroller

Varje tjänst har en automatisk hälsokontroll. Containerstatus återspeglar resultatet:

ContainerKontrollmetodStartperiodIntervall
rtcloud-appHTTP GET /health90 sekunder30 sekunder
rtcloud-mysqlmysqladmin ping30 sekunder10 sekunder
rtcloud-keycloakHTTP GET :9000/health/live120 sekunder30 sekunder

Containrar med en misslyckad hälsokontroll startas automatiskt om enligt inställningen RESTART_POLICY (standard: unless-stopped).

Var den här sidan hjälpsam?