244 lines
10 KiB
JavaScript
244 lines
10 KiB
JavaScript
// ecosystem.config.cjs
|
|
// This file is the standard way to configure applications for PM2.
|
|
// It allows us to define all the settings for our application in one place.
|
|
// The .cjs extension is required because the project's package.json has "type": "module".
|
|
|
|
module.exports = {
|
|
apps: [
|
|
{
|
|
// --- API Server ---
|
|
// The name is now dynamically set based on the environment.
|
|
// This is a common pattern but requires you to call pm2 with the correct name.
|
|
// The deploy script handles this by using 'flyer-crawler-api' for prod and 'flyer-crawler-api-test' for test.
|
|
name: 'flyer-crawler-api',
|
|
script: './node_modules/.bin/tsx',
|
|
args: 'server.ts', // tsx will execute this file
|
|
max_memory_restart: '500M', // Restart if memory usage exceeds 500MB
|
|
// Production Environment Settings
|
|
env_production: {
|
|
NODE_ENV: 'production', // Set the Node.js environment to production
|
|
name: 'flyer-crawler-api',
|
|
cwd: '/var/www/flyer-crawler.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Test Environment Settings
|
|
env_test: {
|
|
NODE_ENV: 'test', // Set to 'test' to match the environment purpose and disable pino-pretty
|
|
name: 'flyer-crawler-api-test',
|
|
cwd: '/var/www/flyer-crawler-test.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Development Environment Settings
|
|
env_development: {
|
|
NODE_ENV: 'development',
|
|
name: 'flyer-crawler-api-dev',
|
|
watch: true,
|
|
ignore_watch: ['node_modules', 'logs', '*.log', 'flyer-images', '.git'],
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
},
|
|
{
|
|
// --- General Worker ---
|
|
name: 'flyer-crawler-worker',
|
|
script: './node_modules/.bin/tsx',
|
|
args: 'src/services/worker.ts', // tsx will execute this file
|
|
max_memory_restart: '1G', // Restart if memory usage exceeds 1GB
|
|
// Production Environment Settings
|
|
env_production: {
|
|
NODE_ENV: 'production',
|
|
name: 'flyer-crawler-worker',
|
|
cwd: '/var/www/flyer-crawler.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Test Environment Settings
|
|
env_test: {
|
|
NODE_ENV: 'test',
|
|
name: 'flyer-crawler-worker-test',
|
|
cwd: '/var/www/flyer-crawler-test.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Development Environment Settings
|
|
env_development: {
|
|
NODE_ENV: 'development',
|
|
name: 'flyer-crawler-worker-dev',
|
|
watch: true,
|
|
ignore_watch: ['node_modules', 'logs', '*.log', 'flyer-images', '.git'],
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
},
|
|
{
|
|
// --- Analytics Worker ---
|
|
name: 'flyer-crawler-analytics-worker',
|
|
script: './node_modules/.bin/tsx',
|
|
args: 'src/services/worker.ts', // tsx will execute this file
|
|
max_memory_restart: '1G', // Restart if memory usage exceeds 1GB
|
|
// Production Environment Settings
|
|
env_production: {
|
|
NODE_ENV: 'production',
|
|
name: 'flyer-crawler-analytics-worker',
|
|
cwd: '/var/www/flyer-crawler.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Test Environment Settings
|
|
env_test: {
|
|
NODE_ENV: 'test',
|
|
name: 'flyer-crawler-analytics-worker-test',
|
|
cwd: '/var/www/flyer-crawler-test.projectium.com',
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
// Development Environment Settings
|
|
env_development: {
|
|
NODE_ENV: 'development',
|
|
name: 'flyer-crawler-analytics-worker-dev',
|
|
watch: true,
|
|
ignore_watch: ['node_modules', 'logs', '*.log', 'flyer-images', '.git'],
|
|
// Inherit secrets from the deployment environment
|
|
DB_HOST: process.env.DB_HOST,
|
|
DB_USER: process.env.DB_USER,
|
|
DB_PASSWORD: process.env.DB_PASSWORD,
|
|
DB_NAME: process.env.DB_NAME,
|
|
REDIS_URL: process.env.REDIS_URL,
|
|
REDIS_PASSWORD: process.env.REDIS_PASSWORD,
|
|
FRONTEND_URL: process.env.FRONTEND_URL,
|
|
JWT_SECRET: process.env.JWT_SECRET,
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY,
|
|
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY,
|
|
SMTP_HOST: process.env.SMTP_HOST,
|
|
SMTP_PORT: process.env.SMTP_PORT,
|
|
SMTP_SECURE: process.env.SMTP_SECURE,
|
|
SMTP_USER: process.env.SMTP_USER,
|
|
SMTP_PASS: process.env.SMTP_PASS,
|
|
SMTP_FROM_EMAIL: process.env.SMTP_FROM_EMAIL,
|
|
},
|
|
},
|
|
],
|
|
};
|