Variabili d'ambiente
Lista completa delle env var FireFeed con descrizione, default, sensibilità.
Ogni servizio (web, oms, worker, docs) legge dal proprio .env. In Dokploy le variabili vengono materializzate nel file .env adiacente al docker-compose.prod.yml (modificabili dalla UI Dokploy).
Riferimento file template: .env.prod.example + .env.example (dev).
- Tipo:
secret (mai loggare/esporre) · config (URL, host, key non sensibili) · tuning (numeri di concorrenza/timeout)
- Richiesto:
sì = startup fail senza, no = ha default sicuro
| Var | Tipo | Richiesto | Descrizione |
|---|
FIREFEED_DEPLOYMENT | config | sì | Namespace per immagini Docker (development o production), distinto per gli stack sullo stesso host. |
FIREFEED_COOKIE_NAMESPACE | config | sì | Namespace dei cookie cross-app; impedisce a development e production di condividere company/progetto. |
OMS_DOMAIN | config | sì | Host pubblico associato al servizio OMS nelle label Dokploy. |
DOCS_DOMAIN | config | sì | Host pubblico associato al servizio Docs nelle label Dokploy. |
Per l'assistente in production usare AGENT_PROVIDER=openrouter, una
OPENROUTER_API_KEY valida e OPENROUTER_SITE_URL=https://app.fire-feed.com.
AGENT_ENABLED=true rende disponibili le route agente; il budget applicativo
resta vincolante con AGENT_HARD_BUDGET=true.
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
DATABASE_URL | secret | sì | — | Postgres connection string. Sia per web sia per worker. Usata da Prisma + raw pg client. |
REDIS_URL | secret | sì | redis://localhost:6379 | Redis BullMQ + pubsub SSE. |
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
ENCRYPTION_KEY | secret | sì | — | AES-256-GCM key per cifrare credenziali source/destinazione (password import/export, token Amazon SP-API, stableUrlToken). 32 byte base64. |
INTERNAL_SECRET | secret | sì | — | Shared secret web↔worker per /internal/* route. Header x-internal-secret. |
AUTH_SECRET | secret | sì | — | NextAuth v5 JWT signing. 32+ char random. |
AUTH_URL | config | sì (prod) | — | URL pubblico del web (https://exp.fire-feed.com). |
AUTH_TRUST_HOST | config | sì (prod) | false | true quando sotto reverse proxy. |
AUTH_KEYCLOAK_ID | config | sì | — | Client ID Keycloak (es. firefeed-web). |
AUTH_KEYCLOAK_SECRET | secret | sì | — | Client secret Keycloak. |
AUTH_KEYCLOAK_ISSUER | config | sì | — | URL realm Keycloak (https://auth.../realms/firefeed). |
AUTH_KEYCLOAK_ISSUER_INTERNAL | config | no | — | Override Keycloak issuer per chiamate server-to-server (es. Docker network hostname). |
COOKIE_DOMAIN | config | sì (prod multi-subdomain) | host-only | Dominio condiviso, per esempio .fire-feed.com, per mantenere company e progetto attivi fra Feed Manager e OMS. |
RETURN_PORTAL_SECRET | secret | sì se il portale resi è usato | — | Segreto HMAC distinto da AUTH_SECRET, 32+ caratteri, per i link pubblici token-scoped. |
RETURN_PORTAL_TRUSTED_PROXY_HOPS | config | sì (prod) | 1 | Numero di reverse proxy fidati che appendono X-Forwarded-For per il rate limit del portale resi. |
Importante per il modulo OMS: l'app OMS legge gli stessi nomi env (AUTH_KEYCLOAK_ID/SECRET) ma riceve valori diversi (firefeed-oms invece di firefeed-web). In Dokploy questo si ottiene popolando un secondo blocco env scoped al service oms con i valori del client firefeed-oms. Il secret di un client NON funziona per l'altro — sono due Keycloak client distinti nello stesso realm.
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
OMS_PUBLIC_URL | config | sì (prod) | nessuno (fail-closed) | Origine pubblica OMS usata dai link Feed-Manager. È letta dal server a ogni richiesta e validata contro l'host reale; deve contenere solo schema e host, senza path/query/hash. |
FIREFEED_TRUST_PROXY_HEADERS | config | no | false | Consente di derivare l'origine pubblica da X-Forwarded-Host/Proto. Impostare true solo se il container Web non è esposto direttamente e l'ingress sovrascrive entrambi gli header. |
NEXT_PUBLIC_APP_URL | config | sì (prod) | http://localhost:3000 | URL pubblico del Feed Manager usato da OMS, OAuth, inviti e link cross-modulo. |
OMS_URL | config | sì | — | URL OMS per chiamate server-side. Può essere diverso da OMS_PUBLIC_URL quando il server usa la rete interna. |
APP_URL | config | sì (prod) | — | Già esistente per Feed-Manager. Dentro al container OMS è anche il fallback per il redirect a /onboarding quando un utente OMS non ha ancora una company creata. |
FIREFEED_CONTROLLED_PROVIDER_TENANTS | config | no | vuoto | Mappa JSON provider→company UUID ammessi ai rollout non generali (controlled o capability beta protette); senza allowlist il gate resta chiuso. Non usare wildcard prima della promozione di readiness. |
OMS_TENANT_MIGRATION_MAX_WAIT_MS | tuning | no | 10000 | Attesa massima del lock per bootstrap/migrazione dello schema OMS della company. |
OMS_TENANT_MIGRATION_TIMEOUT_MS | tuning | no | 120000 | Timeout transazionale delle migrazioni tenant OMS forward-only. |
BUSINESS_TIMEZONE | config | no | Europe/Rome | Fuso operativo usato per le date business delle operazioni di spedizione. |
MIRAKL_REFUND_REASON_CODE | config | no | 11 | Codice motivo inviato nei rimborsi Mirakl; deve essere valido per l'operatore configurato. |
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
WORKER_URL | config | sì (prod) | http://localhost:4000 | URL del worker per chiamate web → worker /internal/*. In compose è http://firefeed-worker:4000. |
STORAGE_PATH | config | sì | /app/storage | Local buffer dove il worker scrive prima di caricare su S3 (WS2B). Anche fallback per export legacy senza manifest. Volume Docker condiviso firefeed-storage. |
PIPELINE_CONCURRENCY | tuning | no | 1 | Root pipeline orchestrator (WS3). Vedi Concurrency. Bumpare con cautela. |
IMPORT_CONCURRENCY | tuning | no | 2 | Import worker BullMQ concurrency. |
RULES_CONCURRENCY | tuning | no | 2 | Rules worker BullMQ concurrency. |
EXPORT_CONCURRENCY | tuning | no | 4 | Export worker BullMQ concurrency. |
EXPORT_ARTIFACT_RETENTION | tuning | no | 10 | WS8 — quanti artifact per export tenere. Cron giornaliero 03:30 UTC droppa i più vecchi da S3 + manifest export_artifacts + filesystem locale. Deve essere >= 1. |
Quando settati, worker carica ogni artifact + persiste un row in export_artifacts. Web /api/feeds/[token] streamma da S3. Lascia vuoto in dev per filesystem-only mode.
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
S3_ENDPOINT | config | no | — | URL del server S3 (RustFS / MinIO / AWS S3). Es: https://exp.data.fire-feed.com. |
S3_REGION | config | no | us-east-1 | Placeholder per RustFS/MinIO (ignorato lato server). |
S3_ACCESS_KEY_ID | secret | sì se S3 abilitato | — | Access key. |
S3_SECRET_ACCESS_KEY | secret | sì se S3 abilitato | — | Secret key. |
S3_BUCKET | config | sì se S3 abilitato | firefeed-exports | Bucket di destinazione. |
S3_FORCE_PATH_STYLE | config | no | true | true per RustFS/MinIO. false per AWS S3 virtual-hosted. |
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
RESEND_API_KEY | secret | sì (prod) | vuoto = no-op | Resend API key. Quando vuoto il package @firefeed/mail non manda mail (utile per dev/CI). |
MAIL_FROM | config | sì (prod) | — | Sender verificato Resend, es. FireFeed <noreply@fire-feed.com>. |
APP_URL | config | sì (prod) | — | URL pubblico (https://exp.fire-feed.com) usato nei CTA delle mail. |
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
CORS_ORIGIN | config | no | http://localhost:3000 | Origin allow-list per il worker (usato dall'endpoint SSE). |
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
LOG_LEVEL | tuning | no | info | Pino log level per il job logger (fatal|error|warn|info|debug|trace). |
Le metriche Prometheus sono esposte su GET /metrics del worker (porta 4000, interno alla rete compose). Non c'è una env var per disabilitarle.
| Var | Tipo | Richiesto | Default | Descrizione |
|---|
PORT | config | no | web=3000 · OMS=3010 · worker=4000 · docs=3001 | Override solo se serve mappare host port diversi. |
HOSTNAME | config | no | 0.0.0.0 | Bind address. |
HOST | config | no | 0.0.0.0 | Worker bind address. |
WEB_PORT | config | no | 3000 | Host-side override per compose. |
DATABASE_URL con prefix postgresql://build:build@...: usato nei Dockerfile build stage per far girare prisma generate (fake URL, prisma generate non si connette).
PGPASSWORD: solo per script ad-hoc psql (es. backfill, mai in code path).
- Aggiungi a
.env.example (dev defaults sicuri o vuoto).
- Aggiungi a
.env.prod.example (con commento descrittivo).
- Aggiorna questa tabella.
- Se è tuning runtime: aggiungi un override anche in
Dockerfile.* se serve un default fisso a build time.