Como atualizar a NooviChat via linha de comando
Se você não usa o Portainer, este guia mostra como atualizar a NooviChat diretamente pelo terminal — tanto via Docker Compose quanto via Docker Swarm.
Antes de começar
Faça o backup do banco de dados antes de qualquer atualização. É um passo rápido e pode salvar horas de trabalho em caso de problema.
Backup obrigatório
Execute no terminal do servidor, dentro do container do postgres:
# Se estiver usando Docker Compose
docker compose exec postgres pg_dump -U noovichat noovichat > backup_$(date +%Y%m%d_%H%M).sql
# Se estiver usando Docker Swarm
docker exec $(docker ps -q -f name=noovichat_postgres) \
pg_dump -U noovichat noovichat > backup_$(date +%Y%m%d_%H%M).sqlVolumes: o que apagar?
Em atualizações normais, não é necessário apagar nenhum volume. Apague volumes apenas quando o suporte NooviAI solicitar explicitamente.
✓ Se você usa MinIO ou S3
Os arquivos das conversas (imagens, vídeos, documentos, áudios) estão no bucket externo. O volume de storage local é apenas cache e pode ser removido com segurança se solicitado — sem perda de dados.
✗ Se você NÃO usa MinIO nem S3
Todos os arquivos enviados nas conversas ficam dentro do volume local noovichat_storage. Remover este volume causa perda permanente e irreversível de todo o conteúdo de mídia — imagens, vídeos, documentos e áudios das conversas. Não há como recuperar.
| Volume | Conteúdo | Atualização normal |
|---|---|---|
| noovichat_storage | Arquivos de conversas (mídia) | Manter |
| noovichat_postgres | Banco de dados completo | Manter |
| noovichat_redis | Cache e filas (temporário) | Manter |
Atualizar via Docker Compose
Use este método se o seu servidor roda com docker-compose.yml.
Acesse o diretório da instalação
cd /caminho/para/sua/instalacao/noovichatAtualize o arquivo docker-compose.yml (se necessário)
Se precisar mudar para uma versão específica, edite a tag da imagem nos serviços app e sidekiq. Se estiver usando :latest, pule este passo.
# No docker-compose.yml, localize e atualize:
services:
app:
image: nooviai/noovichat:3.12.0 # <-- versão nova
sidekiq:
image: nooviai/noovichat:3.12.0 # <-- mesma versãoBaixe a nova imagem
docker compose pullPare os serviços
docker compose downSuba os serviços novamente
docker compose up -dRode a migração do banco
Aguarde o serviço app estar no ar (30 a 60 segundos) e execute:
docker compose exec app bundle exec rails db:migrateAtualizar via Docker Swarm
Use este método se o seu servidor roda em modo Swarm (sem Portainer).
Baixe a nova imagem em todos os nodes
docker pull nooviai/noovichat:latest
# ou com tag específica:
docker pull nooviai/noovichat:3.12.0Atualize o serviço app
# Com latest
docker service update --image nooviai/noovichat:latest noovichat_app
# Com versão específica
docker service update --image nooviai/noovichat:3.12.0 noovichat_appAtualize o serviço sidekiq
Não esqueça do sidekiq
App e sidekiq precisam estar sempre na mesma versão.
docker service update --image nooviai/noovichat:latest noovichat_sidekiq
# ou com versão específica:
docker service update --image nooviai/noovichat:3.12.0 noovichat_sidekiqAguarde os serviços estabilizarem
Monitore até ambos estarem com status Running:
# Acompanhe o status em tempo real
watch docker service ls
# Ou verifique um serviço específico
docker service ps noovichat_appRode a migração do banco
# Encontre o ID do container app em execução
docker ps --filter "name=noovichat_app" --format "{{.ID}}"
# Execute a migration
docker exec <ID_DO_CONTAINER> bundle exec rails db:migrateUsando stack file (docker stack deploy)?
Se você gerencia o Swarm via arquivo de stack, atualize a tag da imagem no arquivo e faça um redeploy:
docker stack deploy -c docker-compose.prod.yml noovichat --with-registry-authDetalhes do db:migrate
O db:migrate aplica mudanças estruturais no banco — novas colunas, tabelas e índices que acompanham a nova versão. Ele não apaga dados.
# Docker Compose
docker compose exec app bundle exec rails db:migrateAplica migrations pendentes via Docker Compose.
# Docker Swarm (substitua <ID> pelo ID real do container)
docker exec <ID> bundle exec rails db:migrateAplica migrations pendentes via Docker Swarm.
# Verificar status das migrations
docker compose exec app bundle exec rails db:migrate:status"up" = aplicada, "down" = pendente.
# Desfazer última migration (emergência)
docker compose exec app bundle exec rails db:rollbackUse apenas se a migration causou erro e você precisa reverter.
Verificação pós-atualização
# Verificar containers/serviços rodando
docker compose ps # Docker Compose
docker service ls # Docker Swarm
# Verificar logs do app (últimas 50 linhas)
docker compose logs --tail=50 app
# Verificar logs do sidekiq
docker compose logs --tail=50 sidekiq
# Testar se a aplicação responde
curl -I https://chat.seudominio.comO que verificar nos logs
Logs saudáveis mostram mensagens como Listening on ou Sidekiq starting. Erros recorrentes do tipo PG::UndefinedTable indicam que o db:migrate não foi executado.
Problemas comuns
docker compose pull não baixa a nova versão
Se estiver usando :latest, o Docker pode ter a imagem em cache. Force o pull com: docker compose pull --no-cache ou especifique a tag exata da nova versão no compose file.
Erro "no such service: app" ao rodar db:migrate
O nome do serviço no seu compose pode ser diferente. Verifique com docker compose ps e use o nome correto (pode ser "noovichat", "web" ou outro).
Container sobe mas cai imediatamente
Veja os logs: docker compose logs app. O erro mais comum é uma variável de ambiente faltando ou incorreta. Verifique o arquivo .env.
Swarm não atualiza o serviço (stays at old version)
Confirme que o docker pull foi executado no node correto. Em ambientes multi-node, todos os workers precisam ter a imagem baixada. Use docker pull em cada node ou configure um registry privado.
Mensagens pararam de ser processadas após a atualização
Verifique os logs do sidekiq. Provavelmente o db:migrate não foi executado ou o sidekiq está com uma versão diferente da imagem do app.