Um template completo para deploy de aplicações Next.js em VPS usando Ansible, systemd e Nginx como proxy reverso.
- Next.js 15 com TypeScript e Tailwind CSS v4
- Ansible para provisionamento automatizado
- Nginx como proxy reverso com SSL/TLS
- Systemd para gerenciamento de serviços
- Bun como runtime de produção
- Biome para linting e formatação
- Scripts de deploy automatizados
nextjs-starterkit/
├── src/app/ # Aplicação Next.js
├── ansible/ # Configuração de infraestrutura
│ ├── roles/
│ │ ├── nginx/ # Proxy reverso e SSL
│ │ ├── ssl-certificates/ # Certificados Let's Encrypt
│ │ └── systemd/ # Gerenciamento de serviços
│ └── main.yml # Playbook principal
├── scripts/ # Scripts de automação
└── public/ # Assets estáticos
- Node.js 18+ ou Bun 1.0+
- Ansible 2.9+
- Ubuntu 20.04+ ou Debian 11+
- Acesso SSH com sudo
- Domínio apontando para o servidor
git clone <seu-repo> meu-projeto-nextjs
cd meu-projeto-nextjs# Com Bun (recomendado)
bun install
# Ou com npm
npm installEdite ansible/group_vars/all.yml:
# Configuração do site
domain_name: "meudominio.com"
ssl_certificate_email: "seu@email.com"
# Configuração da aplicação
app_port: 3000
# Configuração do serviço
service_user: "nginx"
service_working_directory: "/var/www/{{ domain_name }}"bun dev
# ou
npm run devAcesse http://localhost:3000
Crie ou edite ansible/inventory ou use host direto:
# Editar scripts/ansible.sh
MACHINE="seu-servidor" # IP ou hostname./scripts/ansible.shEste comando irá:
- ✅ Instalar e configurar Nginx
- ✅ Configurar certificados SSL com Let's Encrypt
- ✅ Criar serviço systemd
- ✅ Configurar proxy reverso
- ✅ Aplicar configurações de segurança
./scripts/deploy.shEste script:
- ✅ Faz build da aplicação
- ✅ Para o serviço atual
- ✅ Atualiza os arquivos
- ✅ Reinicia o serviço
# ansible/group_vars/all.yml
nginx_ssl_protocols: "TLSv1.2 TLSv1.3"
nginx_ssl_ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:..."# Limites de recursos
service_limit_nofile: "65535"
service_limit_nproc: "2048"
# Segurança
service_security_no_new_privileges: true
service_security_private_tmp: true
service_security_protect_system: "full"
# Memória (opcional)
service_memory_accounting: true
service_memory_high: "800M"
service_memory_max: "1G"ssl_certificate_staging: false # true para teste
ssl_certificate_force_renewal: false
certbot_auto_renew: true# Desenvolvimento
bun dev # Servidor de desenvolvimento com Turbopack
bun build # Build de produção
bun start # Servidor de produção
# Qualidade de código
bun lint # Verificar código com Biome
bun format # Formatar código
# Deploy
./scripts/ansible.sh # Provisionar servidor
./scripts/deploy.sh # Deploy da aplicaçãoO template inclui:
- SSL/TLS automático via Let's Encrypt
- Headers de segurança no Nginx
- Isolamento de processos no systemd
- Configurações de firewall (opcional)
- Usuário não-privilegiado para execução
O Nginx é configurado para:
- Servir assets estáticos diretamente
- Fazer proxy das rotas dinâmicas para Next.js
- Gerenciar certificados SSL automaticamente
- Aplicar headers de segurança
- Comprimir responses (gzip/brotli)
Comandos úteis no servidor:
# Status do serviço
sudo systemctl status meudominio.com
# Logs da aplicação
sudo journalctl -u meudominio.com -f
# Status do Nginx
sudo systemctl status nginx
# Renovação SSL
sudo certbot certificatesgit pull origin main
./scripts/deploy.sh# Editar ansible/group_vars/all.yml
./scripts/ansible.shO template pode ser adaptado para:
- Nuxt.js: Alterar
service_exec_start - SvelteKit: Modificar comandos de build
- Remix: Ajustar configurações de proxy
Adicione roles do Ansible para:
- PostgreSQL
- MongoDB
- Redis
- MySQL
sudo journalctl -u meudominio.com -n 50sudo certbot certificates
sudo certbot renew --dry-runsudo nginx -t
sudo systemctl reload nginx- Fork o projeto
- Crie uma branch para sua feature
- Commit suas mudanças
- Push para a branch
- Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Se você encontrar problemas ou tiver dúvidas:
- Verifique a seção de troubleshooting
- Abra uma issue no GitHub
- Consulte a documentação das ferramentas utilizadas
⭐ Se este template foi útil, considere dar uma estrela no repositório!