Comandos comuns

Use estes comandos regularmente para gerenciar seus contêineres do rtCloud. Execute-os no diretório que contém docker-compose.production.yml.

  # Verificar status e integridade de todos os contêineres
docker compose -f docker-compose.production.yml ps

# Ver logs em tempo real (todos os serviços)
docker compose -f docker-compose.production.yml logs -f

# Ver logs apenas do aplicativo
docker compose -f docker-compose.production.yml logs -f rtcloud

# Reiniciar um único contêiner
docker compose -f docker-compose.production.yml restart rtcloud

# Parar todos os serviços
docker compose -f docker-compose.production.yml down

# Iniciar todos os serviços
docker compose -f docker-compose.production.yml up -d

# Abrir um shell dentro do contêiner do aplicativo
docker compose -f docker-compose.production.yml exec rtcloud bash
  

Atualização

As atualizações do rtCloud são distribuídas como novas tags de imagem Docker. A atualização baixa a imagem mais recente e recria o contêiner do aplicativo. As migrações de banco de dados são executadas automaticamente na inicialização.

1. Baixe a imagem mais recente:

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

2. Recrie o contêiner do aplicativo:

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

O Docker substitui apenas os contêineres cuja imagem foi alterada. O contêiner MySQL e todos os volumes nomeados não são afetados.

Fixando uma versão

Para atualizar para uma versão específica em vez de latest, atualize RTCLOUD_IMAGE no .env:

  RTCLOUD_IMAGE=rtawebteam/rta-smartsurvey:1.2.3
  

Em seguida, execute docker compose pull e up -d como acima.

Downgrade

O downgrade geralmente não é recomendado, pois as migrações de banco de dados não podem ser revertidas. Se um downgrade for necessário, restaure a partir de um backup de banco de dados feito antes da atualização.


Backup e restauração

Fazer backup do banco de dados

Execute este comando para exportar o banco de dados do aplicativo para um arquivo SQL:

  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
  

O arquivo de backup é gravado no seu diretório atual no host.

Restaurar o banco de dados

  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
  

Fazer backup dos arquivos enviados

Os envios de pesquisa frequentemente incluem arquivos enviados (fotos, áudio, documentos) armazenados em volumes Docker nomeados. Faça backup deles separadamente do banco de dados:

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

# Backup de gravações de áudio
docker run --rm \
  -v rtcloud_audios:/data \
  -v "$(pwd):/backup" \
  alpine tar czf /backup/audios-$(date +%Y%m%d).tar.gz -C /data .
  

Substitua rtcloud_uploads e rtcloud_audios pelos seus nomes de volumes reais (prefixados por COMPOSE_PROJECT_NAME) se você alterou o padrão.

Restaurar arquivos enviados

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

Backups diários automatizados

Adicione um job cron no host para executar backups automaticamente. Edite o crontab do root com crontab -e:

  # Backup diário do banco de dados às 2:00, mantendo 30 dias de histórico
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
  

Solução de problemas

Contêiner do aplicativo não inicia

Verifique os logs do contêiner em busca de mensagens de erro:

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

Causas comuns:

  • Variáveis de ambiente ausentes ou inválidas no .env
  • MySQL ainda não pronto (aguarde 60 segundos e verifique novamente)
  • Conflito de porta — outro processo já está usando APP_PORT

MySQL não saudável

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

Causas comuns:

  • MYSQL_ROOT_PASSWORD não definido no .env
  • Volume de dados corrompido (raro — verifique o espaço em disco com df -h)

O MySQL pode levar de 30 a 60 segundos para inicializar na primeira inicialização. Aguarde e verifique novamente antes de assumir falha.

Porta já em uso

Altere APP_PORT ou SHINY_PORT no .env para uma porta livre, depois recrie os contêineres:

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

Para descobrir o que está usando uma porta no host:

  lsof -i :8080
  

Erro 400 de token CSRF não pôde ser verificado

Este erro aparece em ambientes locais ou de proxy reverso onde a origem da solicitação não corresponde ao host esperado. Desabilite a validação CSRF apenas para desenvolvimento local:

  CSRF_VALIDATION_ENABLED=false
  

Depois reinicie o aplicativo:

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

Não desabilite a validação CSRF em produção. Se este erro ocorrer em produção, certifique-se de que seu proxy reverso está encaminhando os cabeçalhos Host e X-Forwarded-For corretos.

Esqueci a senha do administrador

Redefina a senha do administrador diretamente no banco de dados. Conecte-se ao contêiner MySQL e atualize o hash da senha:

Etapa 1 — Gere o novo hash de senha. Substitua novasenha pela senha desejada:

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

Etapa 2 — Atualize o hash no banco de dados:

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

Contêiner continua reiniciando

Verifique se a verificação de integridade está falhando:

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

A verificação de integridade do aplicativo chama o endpoint /health. Se falhar repetidamente, verifique os logs do aplicativo em busca de erros de inicialização.

Disco cheio

Identifique o que está consumindo espaço:

  # Verificar uso do disco do host
df -h

# Verificar uso do disco do Docker (imagens, contêineres, volumes)
docker system df

# Remover imagens não utilizadas e contêineres parados (seguro de executar)
docker system prune
  

Não use docker system prune --volumes, pois isso excluirá os dados do aplicativo.


Verificações de integridade

Cada serviço tem uma verificação de integridade automática. O status do contêiner reflete o resultado:

ContêinerMétodo de verificaçãoPeríodo de inícioIntervalo
rtcloud-appHTTP GET /health90 segundos30 segundos
rtcloud-mysqlmysqladmin ping30 segundos10 segundos
rtcloud-keycloakHTTP GET :9000/health/live120 segundos30 segundos

Contêineres com verificação de integridade com falha são automaticamente reiniciados de acordo com a configuração RESTART_POLICY (padrão: unless-stopped).

Esta página foi útil?