Configuração completa, portável e versionável de Nginx como reverse proxy com SSL automático (Let's Encrypt) para VPS. Ideal para hospedar múltiplos projetos em uma única VPS com suporte a load balancing.
- ✅ Nginx como Reverse Proxy containerizado
- ✅ SSL/TLS automático com Let's Encrypt e renovação automática
- ✅ Load Balancing para projetos que precisam de múltiplas réplicas
- ✅ Segurança integrada: Rate limiting, headers de segurança, firewall
- ✅ Totalmente portável: Use em qualquer VPS Linux
- ✅ Fácil manutenção: Scripts de automação para todas operações
- ✅ Modular: Adicione/remova projetos facilmente
- ✅ Documentação completa: Guias detalhados de instalação e uso
- Ubuntu 20.04+ ou Debian 10+ (outras distros Linux também funcionam)
- Docker 20.10+
- Docker Compose 2.0+
- Git
- Acesso root ou sudo
- Domínios/subdomínios configurados apontando para o IP da VPS (registro DNS tipo A)
- Portas 80 e 443 abertas no firewall
Internet (porta 80/443)
↓
[Nginx Reverse Proxy]
↓
proxy-network (Docker)
↓
├── Projeto A (load balanced: 3 réplicas)
├── Projeto B (single container)
├── Projeto C (com banco de dados)
└── ... (N projetos)
[Certbot] → Renovação SSL automática (2x/dia)
vps/
├── README.md # Este arquivo
├── .env.example # Template de configuração
├── docker-compose.yml # Nginx + Certbot
├── nginx/
│ ├── nginx.conf # Configuração global
│ ├── conf.d/ # Configurações por projeto
│ └── snippets/ # Snippets reutilizáveis (SSL, segurança)
├── projects/
│ └── templates/ # Templates de projetos
├── scripts/
│ ├── setup.sh # Setup inicial da VPS
│ ├── add-project.sh # Adicionar novo projeto
│ ├── get-ssl.sh # Obter certificado SSL
│ ├── deploy.sh # Deploy de projeto
│ └── backup-configs.sh # Backup de configurações
└── docs/
├── INSTALL.md # Guia de instalação
├── USAGE.md # Guia de uso
└── TROUBLESHOOTING.md # Solução de problemas
cd /opt
git clone https://github.com/seu-usuario/nginx-vps-setup.git vps
cd vpscp .env.example .env
nano .env # Edite com suas configuraçõeschmod +x scripts/*.sh
./scripts/setup.shEste script irá:
- Instalar dependências necessárias
- Criar estrutura de diretórios
- Configurar firewall (UFW)
- Criar rede Docker
- Subir Nginx + Certbot
./scripts/add-project.shSiga o wizard interativo para configurar:
- Nome do projeto
- Domínio
- Porta interna
- Tipo (single, load-balanced, with-database)
./scripts/get-ssl.sh seu-dominio.com./scripts/deploy.sh nome-do-projeto- Guia de Instalação - Instalação detalhada passo a passo
- Guia de Uso - Como usar todos os scripts e recursos
- Solução de Problemas - Problemas comuns e soluções
# 1. Criar configuração Nginx
nano nginx/conf.d/meu-app.conf
# 2. Criar docker-compose do projeto
cd projects/meu-app
nano docker-compose.yml
# 3. Obter SSL
./scripts/get-ssl.sh meu-app.dominio.com
# 4. Reload Nginx
docker compose exec nginx nginx -s reload
# 5. Deploy
docker compose -f projects/meu-app/docker-compose.yml up -dPara adicionar load balancing a um projeto existente, edite a configuração Nginx:
upstream meu-app-backend {
least_conn;
server meu-app-1:3000;
server meu-app-2:3000;
server meu-app-3:3000;
}
server {
# ...
location / {
proxy_pass http://meu-app-backend;
# ...
}
}E escale os containers:
cd projects/meu-app
docker compose up -d --scale meu-app=3# Ver logs do Nginx
docker compose logs -f nginx
# Ver logs de um projeto específico
docker compose -f projects/meu-app/docker-compose.yml logs -f
# Verificar status de todos os containers
docker ps
# Ver uso de recursos
docker statsEste setup inclui:
- SSL/TLS: Apenas TLS 1.2 e 1.3
- HSTS: HTTP Strict Transport Security
- Headers de segurança: X-Frame-Options, CSP, etc.
- Rate Limiting: Proteção contra abuso de API
- Firewall: UFW configurado (apenas portas 22, 80, 443)
- Fail2Ban: Opcional, mas recomendado para proteção adicional
A renovação é automática (2x por dia via cron). Para renovar manualmente:
docker compose run --rm certbot renew
docker compose exec nginx nginx -s reload# Backup manual
./scripts/backup-configs.sh
# Backups automáticos são configurados via cron no setup.sh# Atualizar imagens Docker
docker compose pull
docker compose up -d
# Atualizar configurações do Git
git pull origin main
docker compose exec nginx nginx -s reloadContribuições são bem-vindas! Sinta-se à vontade para:
- Fazer fork do projeto
- Criar uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abrir um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Issues: GitHub Issues
- Documentação: Veja a pasta
docs/ - Discussões: GitHub Discussions
Desenvolvido com base nas melhores práticas de DevOps e recomendações oficiais de:
Desenvolvido com ❤️ para simplificar o deploy de múltiplas aplicações em VPS