module.exports = { apps: [ // 🟢 --- PRIMEIRA APLICAÇÃO: API PRINCIPAL (servidor HTTP) --- { name: "hubxglpi-api", // Nome que aparecerá no PM2 script: "src/server.js", // Caminho do arquivo principal da API // 👇 Execução em modo "cluster" (um processo por core da máquina) exec_mode: "cluster", instances: "max", // "max" = usa todos os núcleos disponíveis // ⚙️ Variáveis de ambiente padrão (modo development) env: { NODE_ENV: "development", PORT: 3000 // Porta usada no ambiente de desenvolvimento }, // ⚙️ Variáveis de ambiente quando rodar com `--env production` env_production: { NODE_ENV: "production", PORT: 8080 // Porta usada no ambiente de produção } }, // 🕒 --- SEGUNDA APLICAÇÃO: CRON JOBS (tarefas agendadas) --- { name: "hubxglpi-cron", // Nome do serviço de crons script: "src/cron.js", // Arquivo onde ficam as tarefas agendadas // 👇 Modo "fork" = apenas 1 instância, sem cluster (evita rodar crons duplicados) exec_mode: "fork", instances: 1, // Força a rodar somente um processo // ⚙️ Variáveis de ambiente para desenvolvimento env: { NODE_ENV: "development" }, // ⚙️ Variáveis de ambiente para produção 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. */