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.