Como Configurar um Ambiente de Produção para Aplicações Node.js
A configuração adequada de um ambiente de produção para aplicações Node.js é essencial para garantir desempenho, segurança e escalabilidade. Neste guia, vamos abordar as melhores práticas e as etapas necessárias para configurar um ambiente de produção robusto.
1. Escolhendo um Servidor
A escolha do servidor depende do volume de tráfego esperado e dos requisitos da aplicação. Algumas opções populares incluem:
- Servidores Virtuais Privados (VPS) – DigitalOcean, Linode, Vultr
- Serviços Gerenciados – Heroku, Railway, Render
- Cloud Providers – AWS (EC2), Google Cloud (Compute Engine), Azure (VMs)
Para maior controle e escalabilidade, um VPS ou instâncias em nuvem são geralmente a melhor opção.
2. Instalando o Node.js e Dependências
2.1 Instalando Node.js
A melhor forma de instalar o Node.js é usando o Node Version Manager (NVM), pois facilita a troca de versões. Para instalá-lo:
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
source ~/.bashrc
Depois, instale a versão LTS mais recente do Node.js:
nvm install --lts
nvm use --lts
2.2 Instalando o Gerenciador de Processos PM2
O PM2 é um gerenciador de processos que mantém a aplicação rodando em background, mesmo após falhas ou reinicializações.
npm install -g pm2
Para iniciar a aplicação com PM2:
pm2 start app.js --name minha-aplicacao
pm2 save
pm2 startup
3. Configurando um Servidor Web com Nginx
Para melhorar o desempenho e a segurança, use o Nginx como proxy reverso para a aplicação Node.js.
3.1 Instalando o Nginx
sudo apt update
sudo apt install nginx -y
3.2 Configurando o Proxy Reverso
Crie um novo arquivo de configuração para a aplicação:
sudo nano /etc/nginx/sites-available/minha-aplicacao
Adicione o seguinte conteúdo:
server {
listen 80;
server_name minha-aplicacao.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Ative a configuração:
sudo ln -s /etc/nginx/sites-available/minha-aplicacao /etc/nginx/sites-enabled/
sudo systemctl restart nginx
4. Configurando um Banco de Dados
Se sua aplicação requer um banco de dados, escolha uma opção apropriada:
- PostgreSQL – Ideal para dados relacionais.
- MongoDB – Para aplicações NoSQL escaláveis.
- MySQL – Alternativa tradicional e popular.
Para instalar PostgreSQL:
sudo apt update
sudo apt install postgresql postgresql-contrib -y
Acesse o shell do PostgreSQL:
sudo -u postgres psql
Crie um novo banco de dados e usuário:
CREATE DATABASE minha_aplicacao;
CREATE USER usuario_com_senha WITH ENCRYPTED PASSWORD 'senha_secreta';
GRANT ALL PRIVILEGES ON DATABASE minha_aplicacao TO usuario_com_senha;
5. Implementando um Sistema de Logs
Monitorar logs é essencial para depuração e análise de erros. Use PM2 para acessar logs:
pm2 logs minha-aplicacao
Ou configure logs personalizados com Winston:
npm install winston
Exemplo de configuração com Winston:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' })
]
});
module.exports = logger;
6. Implementando HTTPS com Certbot e Let’s Encrypt
A segurança é essencial em produção. Para configurar SSL/TLS com Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d minha-aplicacao.com
Renove automaticamente:
sudo certbot renew --dry-run
7. Configurando Variáveis de Ambiente
Nunca armazene credenciais no código. Use dotenv para variáveis de ambiente:
npm install dotenv
Crie um arquivo .env
:
DB_USER=usuario_com_senha
DB_PASS=senha_secreta
No código:
require('dotenv').config();
console.log(process.env.DB_USER);
8. Automatizando Deploy com Git e CI/CD
8.1 Configurando Git
No servidor:
git clone https://github.com/usuario/minha-aplicacao.git
cd minha-aplicacao
npm install
pm2 restart minha-aplicacao
8.2 Automatizando com Git Hooks
Adicione um hook de pós-recebimento para deploy automático:
cd /var/repo/minha-aplicacao.git/hooks
nano post-receive
Adicione:
#!/bin/bash
cd /caminho/da/aplicacao
git pull origin main
npm install
pm2 restart minha-aplicacao
Dê permissão de execução:
chmod +x post-receive
9. Monitorando Performance
Use ferramentas como:
- New Relic – Para monitoramento de performance.
- PM2 Monitor – Estatísticas em tempo real.
pm2 monit
Conclusão
Configurar um ambiente de produção para aplicações Node.js exige atenção à segurança, desempenho e escalabilidade. Seguindo essas práticas, você garante que sua aplicação esteja pronta para operação estável e confiável.