# Produzione (docker-compose.prod.yml). Sulla VPS copiare questo file in `.env` nella root del repo e compilarlo. # Non committare mai il file compilato. Procedura completa in CLAUDE.md → "Deploy". # # Segreti: valori casuali lunghi, SOLO esadecimali (finiscono anche dentro URL postgres://), es. # node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # openssl rand -hex 32 # --- Dominio e TLS --- # Dominio principale, senza www né protocollo. Sottodomini usati: www, area, api, shop-admin, media DOMAIN=example.it # Email per Let's Encrypt (avvisi di scadenza dei certificati) ACME_EMAIL=admin@example.it # --- Dashboard Medusa (shop-admin.DOMAIN) --- SHOP_ADMIN_USER=iti # Hash bcrypt della password di basic auth, TRA APICI SINGOLI (contiene "$"): # docker run --rm caddy:2-alpine caddy hash-password --plaintext 'password-lunga' SHOP_ADMIN_PASSWORD_HASH='$2a$14$sostituire-con-hash-bcrypt' # IP/CIDR ammessi, separati da spazio (vuoto = tutti; la basic auth resta comunque) SHOP_ADMIN_ALLOWED_IPS= # --- Postgres --- POSTGRES_USER=postgres POSTGRES_PASSWORD= POSTGRES_DB=postgres APP_DB_NAME=iti_app APP_DB_USER=iti_app APP_DB_PASSWORD= MEDUSA_DB_NAME=iti_medusa MEDUSA_DB_USER=iti_medusa MEDUSA_DB_PASSWORD= # --- Segreti condivisi API ↔ Medusa --- INTERNAL_API_SECRET= WEBHOOK_SECRET= # --- API (apps/api) --- API_COOKIE_SECRET= API_JWT_SECRET= API_LOG_LEVEL=info # Stampata da `npm run deploy:seed:medusa` al primo avvio (riga MEDUSA_PUBLISHABLE_KEY=pk_...) MEDUSA_PUBLISHABLE_KEY= PRIVACY_POLICY_VERSION=privacy-v1 # Destinatari delle notifiche interne, separati da virgola (vuoto = utenti admin attivi) ADMIN_NOTIFY_EMAILS= # Email transazionali: console (NON invia: solo log) | brevo | resend EMAIL_PROVIDER=console EMAIL_FROM= EMAIL_FROM_NAME=ITI TECHNOLOGY EMAIL_REPLY_TO= BREVO_API_KEY= RESEND_API_KEY= # Admin iniziale dell'area riservata (`npm run db:seed:prod`), password almeno 12 caratteri SEED_ADMIN_EMAIL= SEED_ADMIN_PASSWORD= # --- Medusa --- MEDUSA_JWT_SECRET= MEDUSA_COOKIE_SECRET= MEDUSA_AUTH_MFA_ENCRYPTION_KEY= # Stripe: chiave segreta (sk_live_… / sk_test_…) e signing secret del webhook # https://api.DOMAIN/hooks/payment/stripe_stripe (vedi CLAUDE.md → Stripe) STRIPE_API_KEY= STRIPE_WEBHOOK_SECRET= # --- Sito pubblico (apps/public) --- # Chiave pubblicabile Stripe (pk_live_… / pk_test_…), stesso account di STRIPE_API_KEY STRIPE_PUBLISHABLE_KEY= # true solo sul dominio definitivo: altrimenti noindex ovunque e robots.txt "Disallow: /" SITE_INDEXABLE=false # --- Backup (npm run backup:prod) --- # Cartella dell'host dove scrivere i backup (da includere nel backup già presente sulla VPS) BACKUP_DIR=./backups # Numero di backup da tenere BACKUP_KEEP_DAYS=14