CHORE: Preparando ambiente PM2 para novas Features

This commit is contained in:
Rafael Alves Lopes 2026-01-12 16:40:47 -03:00
parent b398b22286
commit 08b3bf2639
2 changed files with 30 additions and 45 deletions

View File

@ -1,73 +1,58 @@
// ecosystem.config.js
module.exports = { module.exports = {
apps: [ apps: [
// 🟢 --- PRIMEIRA APLICAÇÃO: API PRINCIPAL (servidor HTTP) --- // 🟢 API PRINCIPAL
{ {
name: "hubxglpi-api", // Nome que aparecerá no PM2 name: "hubxglpi-api",
script: "src/infra/http/server.js", // Caminho do arquivo principal da API script: "src/infra/http/server.js",
// 👇 Execução em modo "cluster" (um processo por core da máquina)
exec_mode: "cluster", exec_mode: "cluster",
instances: "max", // "max" = usa todos os núcleos disponíveis instances: "max",
// ⚙️ Variáveis de ambiente padrão (modo development)
env: { env: {
watch: true,
NODE_ENV: "development", NODE_ENV: "development",
PORT: 3000 // Porta usada no ambiente de desenvolvimento PORT: 3000
}, },
// ⚙️ Variáveis de ambiente quando rodar com `--env production`
env_production: { env_production: {
watch: false,
NODE_ENV: "production", NODE_ENV: "production",
PORT: 3000 // Porta usada no ambiente de produção PORT: 3000
} }
}, },
// 🕒 --- SEGUNDA APLICAÇÃO: CRON JOBS (tarefas agendadas) --- // 🕒 CRON DE SINCRONIZAÇÃO
{ {
name: "hubxglpi-cron", // Nome do serviço de crons name: "hubxglpi-cron",
script: "src/infra/cron/sync.cron.js", // Arquivo onde ficam as tarefas agendadas script: "src/infra/cron/sync.cron.js",
// 👇 Modo "fork" = apenas 1 instância, sem cluster (evita rodar crons duplicados)
exec_mode: "fork", exec_mode: "fork",
instances: 1, // Força a rodar somente um processo instances: 1,
env: {
NODE_ENV: "development"
},
env_production: {
NODE_ENV: "production"
}
},
// 🐶 WATCHDOG
{
name: "hubxglpi-watchdog",
script: "src/infra/cron/observer.cron.js",
exec_mode: "fork",
instances: 1,
// ⚙️ Variáveis de ambiente para desenvolvimento
env: { env: {
watch: true,
NODE_ENV: "development" NODE_ENV: "development"
}, },
// ⚙️ Variáveis de ambiente para produção
env_production: { env_production: {
watch: false,
NODE_ENV: "production" NODE_ENV: "production"
} }
} }
] ]
}; };
/** * @module server
* @description Ponto de entrada principal da aplicação.
* Este módulo é responsável por:
* Definir a configuração do PM2 para gerenciar a aplicação principal e o serviço de cron jobs.
* 1. A aplicação principal (`hubxglpi-api`) roda em modo cluster para lidar com requisições HTTP. Para encerrar chamados.
* 2. O serviço de cron jobs (`hubxglpi-cron`) roda em modo fork para evitar execuções duplicadas das tarefas agendadas.
*/
/**
* 💡 Dicas de uso:
*
* 🧪 Ambiente de desenvolvimento:
* pm2 start ecosystem.config.js --env development
*
* 🚀 Ambiente de produção:
* pm2 start ecosystem.config.js --env production
* pm2 startup systemd
* sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u desenvolvimento --hp /home/desenvolvimento
* pm2 save
*
* Após isso, o PM2 inicializa automaticamente os dois processos no boot do servidor.
*/

View File

@ -33,7 +33,7 @@ const TYPES = Object.freeze({
async function getMundialeTickets(watermark) { async function getMundialeTickets(watermark) {
return hubsoftTicketsRepo.getTicketsByTipo({ return hubsoftTicketsRepo.getTicketsByTipo({
tipoAtendimento: TYPES.MUNDIALE, tipoAtendimento: TYPES.MUNDIALE,
usuarioAbertura: 248, usuarioAbertura: process.env.HUBSOFT_MUNDIALE_USER_ID,
watermark watermark
}); });
} }