PM2 para JavaScript (Node.js): guia completo com exemplos práticos
1. O que é e para que serve
PM2 (Process Manager 2) é um poderoso gerenciador de processos para aplicações Node.js, projetado para uso em ambiente de produção. Ele permite iniciar, parar, reiniciar e monitorar aplicações Node.js, garantindo alta disponibilidade e tolerância a falhas. O PM2 reinicia automaticamente processos que falham, distribui a carga entre múltiplas instâncias da aplicação (clusterização), oferece um balanceador de carga integrado e suporta reinicializações suaves (graceful) sem tempo de inatividade.
Em ambientes de produção, aplicações Node.js frequentemente enfrentam erros inesperados, vazamentos de memória ou sobrecargas. O PM2 resolve esses problemas atuando como um "daemon guardião": ele monitora o estado de cada processo, registra stdout/stderr, fornece métricas de desempenho (CPU, memória) e permite gerenciar a aplicação via CLI ou API. Sem o PM2, o desenvolvedor teria que escrever scripts manualmente para reinicialização, monitoramento e escalabilidade — o PM2 automatiza todas essas tarefas.
Os principais recursos do PM2 incluem: clusterização (execução de múltiplos workers em todos os núcleos da CPU), reinicialização sem downtime, gerenciamento de ambiente (desenvolvimento/produção), monitoramento integrado (pm2 monit), suporte a arquivos de configuração (ecosystem.config.js) e integração com sistemas de inicialização (systemd, upstart) para inicialização automática ao ligar o servidor.
2. Instalação
O PM2 é instalado globalmente via npm (Node Package Manager). Comando exato:
npm install -g pm2
Para instalar uma versão específica:
npm install -g pm2@5.3.0
Após a instalação, verifique a versão:
pm2 --version
3. Início rápido — exemplo mínimo funcional
Crie uma aplicação Node.js simples app.js:
// app.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Olá do PM2!\n');
});
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
Inicie a aplicação com o PM2:
pm2 start app.js --name my-app
Verifique o status:
pm2 status
Pare a aplicação:
pm2 stop my-app
4. Principais métodos/funções/classes
4.1. pm2.start() — Iniciar aplicação
Assinatura: pm2.start(script, options, callback)
O que faz: Inicia o script especificado como um processo PM2 com as opções definidas (nome, número de instâncias, variáveis de ambiente).
Exemplo de código funcional:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
pm2.start({
script: 'app.js',
name: 'my-app',
instances: 2, // iniciar 2 instâncias
exec_mode: 'cluster', // modo cluster
env: {
NODE_ENV: 'production',
PORT: 3000
}
}, (err, apps) => {
if (err) {
console.error(err);
return pm2.disconnect();
}
console.log('Aplicação iniciada:', apps);
pm2.disconnect();
});
});
4.2. pm2.stop() — Parar processo
Assinatura: pm2.stop(process, callback)
O que faz: Para o processo especificado (por nome, ID ou todos os processos).
Exemplo de código funcional:
const pm2 = require('pm2');
pm2.connect((err) => {
if (err) {
console.error(err);
process.exit(2);
}
// Par