/** * AAMOS PM2 Ecosystem Config * Unified service registry — alla tjänster under AAMOS-paraplyet * Uppdaterad: 2026-06-01 (namnkonsolidering: prexo-* → aamos-finance-*) * * Env-strategi: läser /opt/amos/.env.amos-core vid laddning så att * DATABASE_URL och övriga secrets alltid finns — oavsett hur PM2 startades. */ const fs = require('fs'); function parseEnvFile(path) { try { return fs.readFileSync(path, 'utf8') .split('\n') .reduce((acc, line) => { const m = line.match(/^([A-Z_][A-Z0-9_]*)=(.*)$/); if (m) acc[m[1]] = m[2].trim(); return acc; }, {}); } catch { return {}; } } const baseEnv = parseEnvFile('/opt/amos/.env.amos-core'); const DB = baseEnv.DATABASE_URL || process.env.DATABASE_URL || ''; module.exports = { apps: [ // ── Core Platform ──────────────────────────────────────────────────────── { name: 'aamos-dynasty', script: '/opt/amos/services/dynasty-service/index.mjs', env: { PORT: 3001, DATABASE_URL: DB } }, { name: 'aamos-ops', script: '/opt/amos/services/operations-service/index.mjs', env: { PORT: 3003 } }, { name: 'aamos-cto', script: '/opt/amos/services/cto-service/index.mjs', env: { PORT: 3004 } }, { name: 'aamos-analytics', script: '/opt/amos/services/analytics-service/index.mjs', env: { PORT: 3006 } }, { name: 'aamos-commerce', script: '/opt/amos/services/commerce-service/index.mjs', env: { PORT: 3007 } }, { name: 'aamos-integrations', script: '/opt/amos/services/ouroboros-integrations/index.mjs', env: { PORT: 3241, DATABASE_URL: DB } }, // ── AAMOS Finance — Ekonomimoduler ─────────────────────────────────────── { name: 'aamos-finance-core', script: '/opt/amos/services/finance-service/index.mjs', env: { PORT: 3002, DATABASE_URL: DB } }, { name: 'aamos-finance-payroll', script: '/opt/amos/services/ouroboros-payroll/start.mjs', env: { PORT: 3231, DATABASE_URL: DB } }, { name: 'aamos-finance-vat', script: '/opt/amos/services/ouroboros-vat/start.mjs', env: { PORT: 3230, DATABASE_URL: DB } }, { name: 'aamos-finance-expenses', script: '/opt/amos/services/ouroboros-expenses/start.mjs', env: { PORT: 3226, DATABASE_URL: DB } }, { name: 'aamos-finance-inventory',script: '/opt/amos/services/ouroboros-inventory/start.mjs', env: { PORT: 3228, DATABASE_URL: DB } }, // ── AAMOS HR ───────────────────────────────────────────────────────────── { name: 'aamos-hr-people', script: '/opt/amos/services/people-service/index.mjs', env: { PORT: 3005 } }, { name: 'aamos-hr-recruiting', script: '/opt/amos/services/ouroboros-recruiting/start.mjs', env: { PORT: 3229, DATABASE_URL: DB } }, // ── AAMOS Ops ──────────────────────────────────────────────────────────── { name: 'aamos-ops-field', script: '/opt/amos/services/ouroboros-field-service/start.mjs', env: { PORT: 3232, DATABASE_URL: DB } }, // ── SEO/AEO ────────────────────────────────────────────────────────────── { name: 'aamos-seo', script: '/opt/amos/services/seo-aeo/index.mjs', env: { PORT: 3330, SEO_DB_PATH: '/opt/amos/data/seo-aeo.db' } }, // ── QuixZoom ───────────────────────────────────────────────────────────── { name: 'aamos-qx-enterprise', script: '/opt/amos/services/quixzoom-enterprise/index.mjs', env: { PORT: 7020 } }, { name: 'aamos-qx-regulatory', script: '/opt/amos/services/quixzoom-regulatory/index.mjs', env: { PORT: 7050 } }, // ── AAMOS Ledger Engine (Etapp 1 — Vertikal stängning) ─────────────────── { name: 'aamos-ledger', script: '/opt/amos/services/aamos-ledger/index.mjs', env: { PORT: 3250, AAMOS_LEDGER_PORT: 3250, DATABASE_URL: DB, REDIS_URL: 'redis://127.0.0.1:6379', HERMES_CHANNEL: 'aamos:hermes', HERMES_LOG_DIR: '/opt/amos/data/hermes', SERVICE_NAME: 'aamos-ledger', NODE_ENV: 'production', } }, ] };