Files
iti-technology/.env.prod.example
T
Lorenzo SanesiandClaude Opus 5.5 b83ce039fb
Deploy stack su Proxmox / deploy (push) Failing after 3s
Piattaforma ITI TECHNOLOGY: monorepo, Medusa, API, sito, area riservata e deploy
Monorepo npm con apps/public (Angular SSR), apps/private (Angular SPA),
apps/api (Fastify), packages/shared e packages/styles; Medusa 2.21 in medusa/;
infrastruttura Docker (Postgres PostGIS+pgvector, Redis, Caddy, backup) e
workflow Gitea Actions per il deploy via SSH a ogni push su master.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jQyT6dR9czzGwqb7FkG6u
2026-10-20 09:30:48 +02:00

77 lines
2.7 KiB
Bash

# 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