# Backend Medusa (medusa/apps/backend). Copia in `.env` e compila. Non committare `.env`. # Postgres dedicato a Medusa: credenziali MEDUSA_DB_* del .env di root DATABASE_URL=postgres://iti_medusa:change-me@localhost:5432/iti_medusa REDIS_URL=redis://localhost:6379 # CORS (liste separate da virgola). Il dashboard admin in dev gira su :9000/app; # lo storefront non chiama Medusa direttamente (passa da apps/api), STORE_CORS resta minimale. STORE_CORS=http://localhost:4200 ADMIN_CORS=http://localhost:9000 AUTH_CORS=http://localhost:9000 # Segreti: genera valori casuali lunghi, es. # node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" JWT_SECRET=change-me COOKIE_SECRET=change-me AUTH_MFA_ENCRYPTION_KEY=change-me # Storage file locale. Relativo alla cartella del backend o assoluto (in produzione: volume Docker). FILE_UPLOAD_DIR=static FILE_BACKEND_URL=http://localhost:9000/static MEDUSA_ADMIN_ONBOARDING_TYPE=default # Stripe (chiavi di TEST in sviluppo: https://dashboard.stripe.com/test/apikeys). # Senza STRIPE_API_KEY il provider non viene registrato e seed-base.ts si ferma. # Webhook da registrare in Stripe: {URL pubblico Medusa}/hooks/payment/stripe_stripe STRIPE_API_KEY= STRIPE_WEBHOOK_SECRET= # Segreto condiviso con apps/api per le route /internal/* (header x-internal-secret). # Stesso valore di INTERNAL_API_SECRET in apps/api/.env. Senza, le route rispondono sempre 401. INTERNAL_API_SECRET= # Webhook verso apps/api: POST {FASTIFY_WEBHOOK_URL}/webhooks/medusa firmato HMAC-SHA256 (header x-signature). # WEBHOOK_SECRET deve coincidere con quello di apps/api/.env. Senza una delle due variabili l'invio viene saltato. FASTIFY_WEBHOOK_URL=http://localhost:3000 WEBHOOK_SECRET= # Opzionale: base del backoff tra i tentativi (ms, default 2000 -> 2s, 4s, 8s, 16s) # WEBHOOK_RETRY_BASE_MS=2000