Script Bash único e autossuficiente para preparar uma VPS Ubuntu/Debian com Docker Swarm e fazer o deploy, em poucos cliques, das stacks mais usadas: PostgreSQL, Redis, N8N (Editor / Workers / Webhooks / MCP), Stirling PDF, pgAdmin, pgBackWeb, Portainer e Cloudflare Tunnel.
É a versão linha de comando (sem interface web) — basta copiar o setup-mlc.sh
para o servidor e rodar.
- VPS com Ubuntu ou Debian (testado em Ubuntu 22.04/24.04)
- Acesso root (ou
sudo) - Conexão com a internet
Tudo o que o script precisa (Docker, etc.) é instalado por ele mesmo.
# 1. Baixe o script
curl -fsSL https://raw.githubusercontent.com/madeinlowcode/easy-setup/main/setup-mlc.sh -o setup-mlc.sh
# 2. Rode como root
sudo bash setup-mlc.shOu clonando o repositório:
git clone https://github.com/madeinlowcode/easy-setup.git
cd easy-setup
sudo bash setup-mlc.shAo rodar, aparece um menu numerado. A ordem recomendada numa VPS nova:
-
Opção
A— executa todo o preparo do servidor automaticamente (passos 1 a 9):- Atualiza o sistema (
apt update && upgrade) - Configura o hostname (necessário pro Swarm)
- Instala pacotes básicos + Docker
- Habilita/inicia o Docker
- Inicializa o Docker Swarm e cria a rede interna
network_swarm_public - Mostra os tokens do Swarm (pra você adicionar outros servidores ao cluster)
- Instala o CTOP (monitor de containers)
- Configura o Cloudflare Tunnel (opcional — precisa de um token da Cloudflare)
- Instala o Portainer (painel web — acesse em
http://SEU-IP:9000)
Você também pode rodar cada passo individualmente (opções 1 a 10).
- Atualiza o sistema (
-
Opção
11— instala as stacks (ferramentas). Submenu:# Stack O que é Precisa de Acesso após instalar 1 PostgreSQL 16 + pgvector Banco de dados — rede interna ( postgres:5432)2 Redis 7 Fila / cache — rede interna ( redis:6379)3 N8N Editor Interface do N8N (criar workflows) 1, 2 http://SEU-IP:56784 N8N Workers Executa os workflows em background 1, 2, 3 — (sem tela) 5 N8N Webhooks Recebe webhooks externos 1, 2, 3 http://SEU-IP:56796 N8N MCP API API MCP do N8N 1, 2 http://SEU-IP:5680/mcp7 Stirling PDF Ferramentas de PDF (juntar, OCR, converter...) — http://SEU-IP:80118 pgAdmin 4 Painel web pra gerenciar o Postgres 1 http://SEU-IP:50509 pgBackWeb Backups do Postgres via web 1 http://SEU-IP:8085 -
Opção
12— mostra todas as senhas e endereços salvos. -
Opção
13— remove uma stack instalada.
- Instale o PostgreSQL (1) e o Redis (2) ANTES de qualquer stack do N8N.
- Anote a senha do PostgreSQL e a chave de encriptação (
ENCRYPTION_KEY) gerada no N8N Editor — você precisa das mesmas nos Workers, Webhooks e MCP. - O banco de dados do N8N e do pgBackWeb é criado automaticamente pelo script.
- O Portainer dá só 5 minutos pra você abrir
http://SEU-IP:9000e criar o usuário admin. Se passar, use a opção 10 (reiniciar Portainer). - Se você não tem um domínio, use o IP do servidor nos campos de domínio do N8N.
- Postgres e Redis ficam apenas na rede interna (não são expostos pra internet) —
mais seguro. Use o pgAdmin (
http://SEU-IP:5050) pra acessá-los.
Cada stack instalada gera:
/root/dados_vps/<stack>/<stack>.yaml # o docker-compose usado no deploy
/root/dados_vps/<stack>/credenciais.txt # senhas, chaves e endereço de acesso (chmod 600)
Os volumes Docker (postgres_data, redis_data, pgadmin_data, etc.) são criados
automaticamente.
Para expor os serviços na internet com segurança (sem abrir portas no firewall):
- No painel da Cloudflare → Zero Trust → Networks → Tunnels → crie um túnel.
- Copie o token gerado.
- No menu do script, escolha a opção 8 e cole o token.
- No painel do túnel, aponte cada hostname público para
http://localhost:<porta>(ex.:n8n.seudominio.com → http://localhost:5678).
Não tem token? Pode pular — os serviços continuam acessíveis pelo IP do servidor.
A opção 6 do menu mostra os comandos docker swarm join ... (worker e manager)
já com o IP deste servidor. Rode esse comando no novo servidor para ele entrar no cluster.
| Problema | O que fazer |
|---|---|
| Portainer abre e diz "timeout" | Use a opção 10 (reiniciar Portainer) e abra em até 5 min |
| N8N não conecta no banco | Confira se instalou Postgres (1) e Redis (2), e se a senha do Postgres está correta |
| pgBackWeb não conecta | Evite caracteres especiais (@ : / # ?) na senha do Postgres — a conexão é uma URL |
docker service ls mostra 0/1 |
Aguarde o pull da imagem; rode docker service ps <nome> --no-trunc pra ver o erro |
| Porta já em uso | Pare o serviço que usa a porta, ou edite o .yaml em /root/dados_vps/<stack>/ e refaça o deploy |
Comandos úteis:
docker stack ls # stacks instaladas
docker service ls # serviços rodando
docker service ps <nome> # status / erros de um serviço
docker stack rm <nome> # remover uma stack
ctop # monitor de containersEste script faz alterações no sistema (instala pacotes, atualiza o SO, inicializa o Docker Swarm). Rode em uma VPS dedicada a isso, não numa máquina com outras coisas importantes. Sempre faça backup antes.