Veelgebruikte opdrachten

Gebruik deze opdrachten regelmatig om uw rtCloud-containers te beheren. Voer ze uit vanuit de map met docker-compose.production.yml.

  # Controleer de status en gezondheid van alle containers
docker compose -f docker-compose.production.yml ps

# Bekijk live logboeken (alle services)
docker compose -f docker-compose.production.yml logs -f

# Bekijk logboeken alleen voor de app
docker compose -f docker-compose.production.yml logs -f rtcloud

# Herstart een enkele container
docker compose -f docker-compose.production.yml restart rtcloud

# Stop alle services
docker compose -f docker-compose.production.yml down

# Start alle services
docker compose -f docker-compose.production.yml up -d

# Open een shell binnen de app-container
docker compose -f docker-compose.production.yml exec rtcloud bash
  

Upgraden

rtCloud-updates worden verspreid als nieuwe Docker-image-tags. Upgraden haalt de nieuwste image op en maakt de app-container opnieuw aan. Databasemigraties worden automatisch uitgevoerd bij het opstarten.

1. Haal de nieuwste image op:

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

2. Maak de app-container opnieuw aan:

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

Docker vervangt alleen de containers waarvan de image is gewijzigd. De MySQL-container en alle benoemde volumes zijn niet beïnvloed.

Een versie vastzetten

Om te upgraden naar een specifieke versie in plaats van latest, werkt u RTCLOUD_IMAGE bij in .env:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

Voer dan docker compose pull en up -d uit zoals hierboven.

Downgraden

Downgraden wordt over het algemeen niet aanbevolen, omdat databasemigraties niet ongedaan gemaakt kunnen worden. Als een downgrade noodzakelijk is, herstel dan vanuit een database-back-up die is gemaakt vóór de upgrade.


Back-up en herstel

Back-up van de database

Voer deze opdracht uit om de applicatiedatabase te exporteren naar een SQL-bestand:

  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
  

Het back-upbestand wordt geschreven naar uw huidige map op de host.

Database herstellen

  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
  

Back-up van geüploade bestanden

Enquête-inzendingen bevatten vaak geüploade bestanden (foto’s, audio, documenten) die zijn opgeslagen in benoemde Docker-volumes. Maak er afzonderlijk van de database een back-up van:

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

# Back-up audio-opnames
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

Vervang rtcloud_uploads en rtcloud_audios door uw werkelijke volumenamen (voorafgegaan door COMPOSE_PROJECT_NAME) als u de standaard heeft gewijzigd.

Geüploade bestanden herstellen

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

Geautomatiseerde dagelijkse back-ups

Voeg een cron-taak toe op de host om back-ups automatisch uit te voeren. Bewerk de root-crontab met crontab -e:

  # Dagelijkse database-back-up om 2:00 uur, bewaar 30 dagen geschiedenis
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
  

Probleemoplossing

App-container start niet

Controleer de containerlogboeken op foutmeldingen:

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

Veelvoorkomende oorzaken:

  • Ontbrekende of ongeldige omgevingsvariabelen in .env
  • MySQL nog niet gereed (wacht 60 seconden en controleer opnieuw)
  • Poortconflict — een ander proces gebruikt al APP_PORT

MySQL niet gezond

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

Veelvoorkomende oorzaken:

  • MYSQL_ROOT_PASSWORD niet ingesteld in .env
  • Beschadigd gegevensvolume (zeldzaam — controleer schijfruimte met df -h)

MySQL kan 30–60 seconden nodig hebben om te initialiseren bij de allereerste start. Wacht en controleer opnieuw voordat u aanneemt dat er een probleem is.

Poort al in gebruik

Wijzig APP_PORT of SHINY_PORT in .env naar een vrije poort en maak dan de containers opnieuw aan:

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

Om te vinden wat een poort op de host gebruikt:

  lsof -i :8080
  

400 CSRF-token kon niet worden geverifieerd

Deze fout treedt op in lokale of reverse-proxy-omgevingen waar de verzoekoorsprong niet overeenkomt met de verwachte host. Schakel CSRF-validatie uit voor alleen lokale ontwikkeling:

  CSRF_VALIDATION_ENABLED=false
  

Start dan de app opnieuw:

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

Schakel CSRF-validatie niet uit in productie. Als deze fout optreedt in productie, zorg er dan voor dat uw reverse proxy de juiste Host- en X-Forwarded-For-headers doorstuurt.

Beheerderswachtwoord vergeten

Reset het beheerderswachtwoord rechtstreeks in de database. Verbind met de MySQL-container en werk de wachtwoord-hash bij:

Stap 1 — Genereer de nieuwe wachtwoord-hash. Vervang nieuwwachtwoord door uw gewenste wachtwoord:

  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 . 'nieuwwachtwoord') . PHP_EOL;
"
  

Stap 2 — Werk de hash bij in de database:

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

Container blijft herstarten

Controleer of de gezondheidscontrole mislukt:

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

De gezondheidscontrole van de app roept het /health-eindpunt aan. Als dit herhaaldelijk mislukt, controleer dan de applicatielogboeken op opstartfouten.

Schijfruimte vol

Identificeer wat ruimte verbruikt:

  # Controleer schijfgebruik van host
df -h

# Controleer Docker-schijfgebruik (images, containers, volumes)
docker system df

# Verwijder ongebruikte images en gestopte containers (veilig om uit te voeren)
docker system prune
  

Gebruik niet docker system prune --volumes want dit verwijdert applicatiegegevens.


Gezondheidscontroles

Elke service heeft een automatische gezondheidscontrole. De containerstatus weerspiegelt het resultaat:

ContainerControlemethodeStartperiodeInterval
rtcloud-appHTTP GET /health90 seconden30 seconden
rtcloud-mysqlmysqladmin ping30 seconden10 seconden
rtcloud-keycloakHTTP GET :9000/health/live120 seconden30 seconden

Containers met een mislukte gezondheidscontrole worden automatisch herstart volgens de RESTART_POLICY-instelling (standaard: unless-stopped).

Was deze pagina nuttig?