Skip to content

Avvio stack in localhost

Questa guida descrive il percorso canonico per eseguire l'intero stack locale del workspace cs-repository.

Il bootstrap parte sempre da platform-local-stack. I singoli repository possono essere avviati da soli solo per debug puntuale, non come entrypoint principale.

Nei comandi sotto, sostituisci <workspace-root> con la directory locale che contiene i repository sibling del workspace.

Prerequisiti

  • Node.js >= 22
  • npm >= 10
  • Docker Desktop attivo

Verifica rapida:

bash
node -v
npm -v
docker info

Setup una tantum

Installa le dipendenze in tutti i repository eseguibili del workspace:

bash
cd <workspace-root>/platform-auth-service && npm install
cd <workspace-root>/platform-ai-service && npm install
cd <workspace-root>/platform-connectors-service && npm install
cd <workspace-root>/platform-mcp-service && npm install
cd <workspace-root>/platform-agent-service && npm install
cd <workspace-root>/platform-local-stack && npm install
cd <workspace-root>/platform-status-service && npm install
cd <workspace-root>/platform-wiki && npm install
cd <workspace-root>/cs-portal && npm install
cd <workspace-root>/cs-chat && npm install
cd <workspace-root>/cs-transacion-manage && npm install
cd <workspace-root>/sfdc-external && npm install
cd <workspace-root>/funnel-ia-engine && npm install

Preparazione environment

funnel-ia-engine

Prepara i file .env del repo e dei workspace:

bash
cd <workspace-root>/funnel-ia-engine
cp .env.example .env
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env

Note operative:

  • in frontend/.env lascia VITE_API_BASE_URL vuota per usare lo stesso origin browser con prefisso /api
  • in backend/.env PLATFORM_AI_SERVICE_URL punta di default a http://localhost:3300
  • il backend Funnel bootstrapa di default le credenziali locali admin@local.test / ChangeMe123! dentro platform-auth-service

platform-ai-service

Prepara il file .env del servizio:

bash
cd <workspace-root>/platform-ai-service
cp .env.example .env

Valori locali gia allineati nel template:

  • PORT=3300
  • PLATFORM_INTERNAL_TOKEN=platform-local-stack-internal-token
  • AI_DATABASE_URL

La configurazione dei provider AI viene letta dallo state store PostgreSQL. Per test locali senza provider esterni usa il provider template tramite le route admin/backoffice o un seed gia presente nel database locale.

platform-mcp-service

Per il bootstrap canonico via platform-local-stack non serve copiare env manualmente. Se lo avvii standalone, allinea almeno:

  • PORT=3500
  • PLATFORM_INTERNAL_TOKEN=platform-local-stack-internal-token
  • PLATFORM_AUTH_SERVICE_URL=http://127.0.0.1:3100
  • PLATFORM_AI_SERVICE_URL=http://127.0.0.1:3300
  • PLATFORM_CONNECTORS_SERVICE_URL=http://127.0.0.1:3200
  • PLATFORM_STATUS_SERVICE_URL=http://127.0.0.1:3400

platform-agent-service

Per il bootstrap canonico via platform-local-stack, il launcher passa DATABASE_URL, REDIS_URL, PLATFORM_MCP_SERVICE_URL e PLATFORM_INTERNAL_TOKEN. Se lo avvii standalone, usa il database agent-postgres e Redis del local stack.

cs-portal

Prepara gli env se devi avviare il repo fuori dal local stack:

bash
cd <workspace-root>/cs-portal
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env

Verifica almeno:

  • SESSION_COOKIE_*
  • PLATFORM_CONNECTORS_SERVICE_URL
  • PLATFORM_INTERNAL_TOKEN
  • DEFAULT_DATA_SOURCE_ID
  • VITE_API_BASE_URL=/api

cs-chat

Prepara gli env se devi avviare il repo fuori dal local stack:

bash
cd <workspace-root>/cs-chat
cp .env.example .env

Verifica almeno:

  • DATABASE_URL
  • PLATFORM_AUTH_SERVICE_URL
  • PLATFORM_AI_SERVICE_URL
  • PLATFORM_AGENT_SERVICE_URL
  • PLATFORM_MCP_SERVICE_URL
  • PLATFORM_INTERNAL_TOKEN
  • CS_CHAT_AGENT_CALLBACK_BASE_URL
  • CS_CHAT_PRODUCT_CODE=cs-chat

cs-transacion-manage

Prepara gli env se devi avviare il repo fuori dal local stack:

bash
cd <workspace-root>/cs-transacion-manage
cp apps/api/.env.example apps/api/.env

Verifica almeno:

  • DATABASE_URL
  • PLATFORM_AUTH_SERVICE_URL
  • PLATFORM_PAYMENTS_SERVICE_URL
  • PLATFORM_INTERNAL_TOKEN
  • CS_TRANSACTION_PRODUCT_CODE=cs-transacion-manage
  • PORT

sfdc-external

Per sfdc-external non c'è oggi un passaggio canonico cp ... .env già documentato al livello root del repo.

Usa backend/.env.example come sorgente di riferimento per allineare le variabili richieste dal tuo ambiente locale:

bash
cd <workspace-root>/sfdc-external
sed -n '1,220p' backend/.env.example
sed -n '1,120p' frontend/.env.example

In particolare verifica almeno:

  • DATABASE_URL
  • SHADOW_DATABASE_URL
  • FRONTEND_ORIGINS
  • eventuali variabili auth o Salesforce richieste dal tuo scenario locale

Per il frontend, il default locale resta VITE_API_BASE_URL=/api.

Servizi senza setup .env dedicato

Per il bootstrap canonico via platform-local-stack, platform-auth-service, platform-connectors-service, platform-mcp-service, platform-agent-service, platform-status-service e platform-wiki non richiedono copie manuali di file .env: lo stack launcher passa le variabili runtime necessarie, inclusa STATUS_DATABASE_URL per il catalogo prodotti status.

Allineamento database locali

sfdc-external

Genera il client Prisma ed esegui le migrazioni:

bash
cd <workspace-root>/sfdc-external
npm exec --workspace backend prisma -- generate --schema prisma/schema.prisma
npm exec --workspace backend prisma -- migrate dev --schema prisma/schema.prisma

funnel-ia-engine

Allinea Prisma nel backend:

bash
cd <workspace-root>/funnel-ia-engine/backend
npm run prisma:generate
npm run prisma:migrate:deploy

platform-auth-service

Non richiede migrazioni manuali. All'avvio inizializza la propria tabella di stato nel database auth-postgres.

platform-agent-service

Se avvii il servizio fuori dal local stack, genera Prisma e applica le migrazioni con DATABASE_URL puntato al database agent-postgres:

bash
cd <workspace-root>/platform-agent-service
npm run prisma:generate
npm run prisma:migrate:deploy

platform-status-service

Se avvii il servizio fuori dal local stack, genera Prisma e applica le migrazioni con STATUS_DATABASE_URL puntato al database status scelto:

bash
cd <workspace-root>/platform-status-service
npm run prisma:generate --workspace backend
npm run prisma:migrate:deploy --workspace backend

cs-chat

Genera il client Prisma ed esegui le migrazioni:

bash
cd <workspace-root>/cs-chat
npm run prisma:generate
npm run prisma:migrate:dev

cs-transacion-manage

Se avvii il repo fuori dal local stack, genera il client Prisma ed esegui le migrazioni:

bash
cd <workspace-root>/cs-transacion-manage
npm run db:migrate

Avvio canonico dell'intero stack

L'unico entrypoint locale canonico è platform-local-stack:

bash
cd <workspace-root>/platform-local-stack
npm run check-paths
npm run profiles
npm run start:dev

npm run check-paths risolve i repository sibling dal basename del remote origin, con fallback ai nomi directory storici definiti in platform-local-stack/config/stack-paths.json. Se il workspace root non coincide con la parent directory di platform-local-stack, esporta STACK_WORKSPACE_ROOT prima di lanciare i comandi.

I backend Nest vengono avviati dal local stack tramite lo script start:local-stack, che è l'entrypoint watch esplicito per il bootstrap locale (nest start --watch). Per avvii standalone usa i normali script start o start:prod del repo. Ogni backend Nest deve mantenere compilerOptions.deleteOutDir: true in nest-cli.json e disabilitare l'incremental cache in tsconfig.build.json, così dist viene pulita prima di emettere output build/watch e non rimangono layout o metadati generati obsoleti.

npm run start:dev usa il profilo YAML full come default e avvia:

  • PostgreSQL per platform-auth-service
  • PostgreSQL per platform-agent-service
  • PostgreSQL per platform-payments-service
  • PostgreSQL per sfdc-external
  • PostgreSQL e Redis per funnel-ia-engine
  • PostgreSQL per cs-chat
  • PostgreSQL per cs-transacion-manage
  • pgAdmin
  • Loki, Grafana e Promtail
  • platform-auth-service
  • platform-ai-service
  • platform-mcp-service
  • platform-agent-service
  • platform-connectors-service
  • platform-status-service/backend
  • sfdc-external/backend
  • funnel-ia-engine/backend
  • cs-portal/backend
  • cs-chat/apps/api
  • cs-transacion-manage/packages/shared
  • cs-transacion-manage/apps/api
  • platform-status-service/frontend
  • sfdc-external/frontend
  • funnel-ia-engine/frontend
  • cs-portal/frontend
  • cs-chat/apps/web
  • cs-transacion-manage/apps/web
  • funnel-ia-engine/backend worker
  • platform-wiki
  • reverse proxy locale su porta 8080

I profili disponibili sono definiti in platform-local-stack/config/profiles e possono essere ispezionati con:

bash
cd <workspace-root>/platform-local-stack
npm run profiles

URL locali

Host canonici via proxy

  • http://auth.cs.lvh.me:8080
  • http://ai.cs.lvh.me:8080
  • http://agent.cs.lvh.me:8080
  • http://mcp.cs.lvh.me:8080/mcp
  • http://wiki.cs.lvh.me:8080
  • http://status.cs.lvh.me:8080
  • http://status.cs.lvh.me:8080/api/status/overview
  • http://pgadmin.cs.lvh.me:8080
  • http://grafana.cs.lvh.me:8080
  • http://loki.cs.lvh.me:8080
  • http://promtail.cs.lvh.me:8080
  • http://sfdc.cs.lvh.me:8080
  • http://funnel.cs.lvh.me:8080
  • http://portal.cs.lvh.me:8080
  • http://chat.cs.lvh.me:8080
  • http://transactions.cs.lvh.me:8080

Endpoint diretti utili

  • http://127.0.0.1:3100/health per platform-auth-service
  • http://127.0.0.1:3200/health per platform-connectors-service
  • http://127.0.0.1:3300/health per platform-ai-service
  • http://127.0.0.1:3400/health per platform-status-service/backend
  • http://127.0.0.1:3400/api/status/overview per il payload aggregato di platform-status-service
  • http://127.0.0.1:3500/health per platform-mcp-service
  • http://127.0.0.1:3600/health per platform-agent-service
  • http://127.0.0.1:3003/api/health per cs-portal/backend
  • http://127.0.0.1:3004/api/health per cs-chat/apps/api
  • http://127.0.0.1:3005/api/health per cs-transacion-manage/apps/api
  • http://127.0.0.1:5176 per platform-status-service/frontend
  • http://127.0.0.1:5177 per cs-portal/frontend
  • http://127.0.0.1:5178 per cs-chat/apps/web
  • http://127.0.0.1:5179 per cs-transacion-manage/apps/web
  • http://127.0.0.1:5050 per pgAdmin
  • http://127.0.0.1:3002 per Grafana
  • http://127.0.0.1:3101 per Loki
  • http://127.0.0.1:9080 per Promtail

Per status.cs.lvh.me, sfdc.cs.lvh.me, funnel.cs.lvh.me, portal.cs.lvh.me, chat.cs.lvh.me e transactions.cs.lvh.me il proxy serve il frontend sull'host root e inoltra il backend solo sui path /api/* (piu /socket.io per Funnel).

lvh.me punta già a 127.0.0.1, quindi non serve modificare /etc/hosts.

Verifiche rapide post-avvio

Verifica UI e routing

Apri questi URL e controlla che rispondano correttamente:

  • http://wiki.cs.lvh.me:8080
  • http://status.cs.lvh.me:8080
  • http://funnel.cs.lvh.me:8080
  • http://sfdc.cs.lvh.me:8080
  • http://portal.cs.lvh.me:8080
  • http://chat.cs.lvh.me:8080
  • http://transactions.cs.lvh.me:8080
  • http://auth.cs.lvh.me:8080
  • http://ai.cs.lvh.me:8080
  • http://mcp.cs.lvh.me:8080/mcp

Verifica servizi tecnici

  • pgAdmin: http://pgadmin.cs.lvh.me:8080 credenziali: pgadmin@example.com / pgadmin
  • Grafana: http://grafana.cs.lvh.me:8080 credenziali: admin / admin su volume nuovo; se il volume esiste già mantiene la password inizializzata in precedenza

pgAdmin pre-registra i database locali:

  • Auth Postgres
  • Agent Postgres
  • Payments Postgres
  • SFDC Postgres
  • Funnel Postgres
  • CS Chat Postgres
  • Transaction Manage Postgres

Password locali alla prima connessione:

  • Auth Postgres: platform_auth / platform_auth
  • Agent Postgres: platform_agent / platform_agent
  • Payments Postgres: platform_payments / platform_payments
  • SFDC Postgres: app_rw / app_rw
  • Funnel Postgres: funnelia / funnelia
  • CS Chat Postgres: cs_chat / cs_chat
  • Transaction Manage Postgres: postgres / postgres

Verifica status dashboard

  • UI: http://status.cs.lvh.me:8080
  • sessione/setup: http://status.cs.lvh.me:8080/api/status-auth/session
  • overview aggregata: http://status.cs.lvh.me:8080/api/status/overview
  • health backend diretto: http://127.0.0.1:3400/health

platform-status-service è l'aggregatore canonico dello stato runtime dei microservizi. Il catalogo /products persiste prodotti, health target e link via Prisma nelle tabelle status_* sul database locale condiviso auth-postgres. La prima apertura della UI mostra il setup se non esiste una membership cs-status con ruolo SUPER_ADMIN.

Verifica health endpoints

Esempi di check rapidi:

bash
curl http://auth.cs.lvh.me:8080/health
curl http://ai.cs.lvh.me:8080/health
curl http://127.0.0.1:3200/health
curl http://127.0.0.1:3500/health
curl http://127.0.0.1:3600/health
curl http://127.0.0.1:3000/api/health
curl http://127.0.0.1:3001/api/health
curl http://127.0.0.1:3003/api/health
curl http://127.0.0.1:3005/api/health
curl http://127.0.0.1:3400/health
curl http://status.cs.lvh.me:8080/api/status/overview

Verifica auth condivisa

Per verificare la sessione condivisa tra prodotti:

  1. Apri http://funnel.cs.lvh.me:8080/#/login
  2. Esegui login con admin@local.test / ChangeMe123!
  3. Verifica GET http://funnel.cs.lvh.me:8080/api/auth/session
  4. Apri http://sfdc.cs.lvh.me:8080 senza rifare login

Check API rapido:

bash
curl -X POST http://funnel.cs.lvh.me:8080/api/auth/login/password \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@local.test","password":"ChangeMe123!"}'

Se stai verificando platform-auth-service in isolamento, ricorda che quelle credenziali non esistono finche un backend di prodotto non le sincronizza oppure finche non fai bootstrap via /internal/identities/upsert.

Comandi utili

Stato servizi

bash
cd <workspace-root>/platform-local-stack
npm run status

Stop completo

bash
cd <workspace-root>/platform-local-stack
npm run stop:dev

Avvio di un sottoinsieme esplicito

Per un setup minimo con servizi CORE e status dashboard:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- auth ai connectors mcp statusBackend statusFrontend proxy

Avvio tramite profilo

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile sfdc

Solo status dashboard, incluso auth per setup/login:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile status

Solo MCP e dipendenze core:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile mcp

Solo CS Chat e dipendenze core, incluso Agent per le risposte MCP reali:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile chat

Solo CS Transaction Manage, incluso Payments per il tier subscription usato dall'ACL prodotto:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile transactions

Solo CS Portal:

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile portal

Composizione di più profili

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile core --profile wiki

Dry run della risoluzione

bash
cd <workspace-root>/platform-local-stack
npm run start:dev -- --profile funnel --dry-run

Log runtime

I log runtime locali finiscono in:

  • <workspace-root>/platform-local-stack/.runtime/logs

Promtail raccoglie questi file e li invia a Loki, oltre ai log dei container Docker del local stack e dei processi host-managed come auth, ai, agent, connectors, mcp, sfdcBackend, funnelBackend, portalBackend, chatBackend, transactionShared, transactionBackend, statusBackend, sfdcFrontend, funnelFrontend, portalFrontend, chatFrontend, transactionFrontend, statusFrontend, wiki e proxy.

Troubleshooting minimo

Porte occupate

Se una porta è già occupata il bootstrap può fallire. Le porte usate dal local stack sono:

  • 8080
  • 3100
  • 3101
  • 3200
  • 3300
  • 3400
  • 3500
  • 3600
  • 3000
  • 3001
  • 3002
  • 3003
  • 3004
  • 3005
  • 5050
  • 5173
  • 5174
  • 5175
  • 5176
  • 5177
  • 5178
  • 5179
  • 5432
  • 5433
  • 5434
  • 5435
  • 5436
  • 5437
  • 5438
  • 6379
  • 9080

lvh.me

lvh.me risolve già verso 127.0.0.1. Se i domini *.cs.lvh.me non rispondono, il problema è quasi sempre nel bootstrap locale o nel reverse proxy, non nella risoluzione DNS.

Bootstrap canonico unico

  • usa platform-local-stack come entrypoint locale principale
  • usa i comandi repo-locali solo per debug puntuale
  • se npm run check-paths fallisce, correggi prima i path del workspace e poi rilancia lo stack

Workspace reference: /Users/jeanpaul/projects/cs-repository