Deploy automático do N8N em VPS significa eliminar o passo manual de logar via SSH toda vez que existe uma atualização: um pipeline de CI/CD (GitHub Actions, na prática mais comum) conecta ao servidor a cada git push e roda docker compose pull && docker compose up -d sozinho. Combinado com restart policies do Docker e, opcionalmente, uma unit systemd supervisionando o daemon, o N8N também volta sozinho depois de um crash ou reboot do VPS — sem ninguém precisar intervir. Este guia cobre o pipeline completo: do workflow do GitHub Actions ao auto-restart e rollback.
Por que automatizar o deploy do N8N (e não só instalar manualmente)
A maioria dos guias de N8N em VPS para no docker compose up -d rodado manualmente na primeira instalação — e é aí que o processo de manutenção some. Toda vez que sai uma nova versão do N8N, ou que você muda uma variável de ambiente, alguém precisa logar no servidor via SSH e repetir os comandos. Isso não escala: some com o histórico de mudanças, ninguém revisa o que está indo pra produção, e é fácil esquecer de atualizar por semanas. Um pipeline de CI/CD resolve isso transformando "atualizar o N8N" em um git push.
Pipeline com GitHub Actions: o setup completo
O pipeline mais simples e mais usado para este caso de uso conecta ao VPS via SSH e reaplica o docker-compose.yml. Primeiro, cadastre 3 secrets no repositório (Settings → Secrets and variables → Actions): VPS_HOST, VPS_USER e VPS_SSH_KEY (a chave privada correspondente à chave pública já autorizada no authorized_keys do servidor). Nunca coloque essas credenciais direto no arquivo de workflow.
# .github/workflows/deploy.yml
name: Deploy N8N
on:
push:
branches: [main]
paths:
- 'docker-compose.yml'
- '.env.production'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
script: |
cd /opt/n8n
docker compose pull
docker compose up -d
docker image prune -f
O gatilho paths evita disparar o deploy quando você só edita a documentação do repositório — só roda quando o docker-compose.yml ou o arquivo de ambiente mudam. O docker image prune -f no final evita acumular imagens antigas do N8N a cada deploy.
Auto-restart: systemd e restart policies do Docker
Deploy automático resolve metade do problema — a outra metade é o servidor se recuperar sozinho de uma falha sem ninguém acordar de madrugada pra reiniciar o container. Duas camadas resolvem isso:
| Camada | O que faz | Configuração |
|---|---|---|
| Restart policy do container | Reinicia o container do N8N se ele cair (crash, OOM kill) | restart: unless-stopped no docker-compose.yml |
| systemd do Docker | Garante que o Docker daemon (e os containers com restart policy) voltem depois de reboot do VPS | systemctl enable docker |
| Healthcheck do container | Detecta quando o N8N está travado, não só quando o processo morreu | healthcheck no compose, apontando pra rota /healthz do N8N |
Sem essas três camadas, um crash do N8N às 3h da manhã só é resolvido quando alguém percebe manualmente. Com elas, o container volta sozinho em segundos.
Auto-update controlado vs. auto-update total
Existem duas filosofias para manter o N8N atualizado automaticamente, e a diferença importa em produção:
- Auto-update total (Watchtower): o Watchtower monitora o Docker Hub e aplica qualquer nova versão da imagem
n8nio/n8nassim que ela sai, sem revisão. Rápido de configurar, mas arriscado em produção — uma breaking change do N8N entra no ar sem ninguém validar antes. - Auto-update controlado (CI/CD): o pipeline de GitHub Actions só atualiza quando você faz o push — geralmente depois de fixar a versão da imagem (
image: n8nio/n8n:1.x.x) e testar em um ambiente de staging. Mais trabalho de setup, mas dá controle sobre quando cada mudança entra no ar.
Para produção, a recomendação é CI/CD controlado. Watchtower fica melhor reservado para ambientes de teste, onde uma versão quebrada não afeta ninguém além de você.
Rollback: voltando para a versão anterior rapidamente
Se um deploy quebrar algo, o rollback com essa estrutura é simples: fixe a tag da imagem no docker-compose.yml (em vez de usar latest), guarde o histórico de versões no Git, e para reverter basta dar git revert no commit problemático e deixar o pipeline rodar de novo — ele vai puxar a imagem da versão anterior e reaplicar o docker compose up -d. Sem tag fixa, não existe rollback confiável: o docker compose pull sempre traz a versão mais recente, mesmo que você reverta o código.
Segurança do pipeline: o que não fazer
Alguns erros comuns em pipelines de deploy via SSH:
- Chave SSH sem restrição: use uma chave dedicada ao deploy, com permissões restritas via
command=noauthorized_keys, em vez de reaproveitar a chave de acesso administrativo completo ao VPS. - Secrets direto no workflow YAML: sempre via GitHub Secrets — nunca hardcoded no arquivo, mesmo em repositório privado.
- Sem timeout no job: defina
timeout-minutesno job de deploy para o pipeline não ficar travado indefinidamente se o SSH cair no meio do processo.
Para quem já roda o N8N em VPS mas ainda instalou tudo manualmente (veja nosso guia de deploy do N8N em VPS com Docker), migrar para esse pipeline não exige reinstalar nada — só adicionar o workflow do GitHub Actions apontando para o mesmo diretório onde o docker-compose.yml já está.
Qual VPS usar para rodar esse pipeline
O requisito técnico para o VPS que recebe o deploy automático é o mesmo de uma instalação manual do N8N — o pipeline de CI/CD não adiciona carga ao servidor, só automatiza os comandos. Para produção com deploy automático e N8N respondendo webhooks em tempo real, o VPS Brasil Básico (4GB RAM, 4 vCPUs, 100GB NVMe, R$99/mês) evita que o N8N trave durante o próprio deploy — o container antigo só é substituído depois que a nova imagem termina de subir. Veja também nosso guia geral sobre CI/CD para deploys em VPS se você quiser aplicar esse mesmo pipeline a outras aplicações além do N8N.
Conclusão
Automatizar o deploy do N8N com GitHub Actions transforma manutenção manual (SSH, comandos digitados na mão, sem histórico) em um processo versionado: cada atualização é um commit, cada deploy é rastreável, e o container se recupera sozinho de falhas graças às restart policies do Docker e do systemd. O investimento inicial é pequeno — um arquivo de workflow e 3 secrets — e o retorno é não depender de ninguém lembrar de atualizar o servidor manualmente.
Quero meu VPS para rodar N8N com deploy automático
Leia também: Veja mais tutoriais de N8N
Comentários (0)
Ainda não há comentários. Seja o primeiro!