Piattaforma ITI TECHNOLOGY: monorepo, Medusa, API, sito, area riservata e deploy
Deploy stack su Proxmox / deploy (push) Failing after 3s

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
This commit is contained in:
Lorenzo Sanesi
2026-10-20 09:30:48 +02:00
co-authored by Claude Opus 5.5
commit b83ce039fb
505 changed files with 84544 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
# apps/api (Fastify). Copia in `.env` e compila. Non committare `.env`.
# La configurazione è validata all'avvio (src/config/env.ts): se manca qualcosa il server non parte
# e stampa l'elenco delle variabili mancanti o non valide.
# --- Server ---
NODE_ENV=development
HOST=0.0.0.0
# 3000: è la porta a cui Medusa invia i webhook (FASTIFY_WEBHOOK_URL in medusa/apps/backend/.env)
PORT=3000
LOG_LEVEL=info
# Cartella dei log su file con rotazione (obbligatoria con NODE_ENV=production)
LOG_DIR=
# Proxy fidati per l'IP reale da X-Forwarded-For: false, true, oppure indirizzi/CIDR/preset separati da virgola
# (produzione: "loopback,uniquelocal", cioè Caddy e il server SSR sulla rete Docker)
TRUST_PROXY=false
# --- Database applicativo ---
# Postgres iti_app con l'utente iti_app (credenziali APP_DB_* del .env di root)
DATABASE_URL=postgres://iti_app:change-me@localhost:5432/iti_app
# --- Seed (npm run db:seed): utente admin iniziale, password almeno 12 caratteri ---
SEED_ADMIN_EMAIL=
SEED_ADMIN_PASSWORD=
# --- Sicurezza ---
# Origini CORS consentite, separate da virgola (sito pubblico + area privata)
CORS_ORIGINS=http://localhost:4200,http://localhost:4300
# Segreto per i cookie firmati (almeno 32 caratteri)
# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
COOKIE_SECRET=
# Rate limit globale per IP
RATE_LIMIT_MAX=300
RATE_LIMIT_WINDOW=1 minute
# --- Autenticazione ---
# Segreto HS256 degli access token (almeno 32 caratteri)
JWT_SECRET=
# Durata access token (secondi) e refresh token (giorni)
ACCESS_TOKEN_TTL_SECONDS=900
REFRESH_TOKEN_TTL_DAYS=30
# Dominio padre del cookie di refresh per condividerlo tra sottodomini (es. .ititechnology.it); vuoto in sviluppo
AUTH_COOKIE_DOMAIN=
AUTH_COOKIE_SECURE=true
# Limiti per IP: login/reset al minuto, route che inviano email ogni 15 minuti
AUTH_LOGIN_RATE_MAX=5
AUTH_EMAIL_RATE_MAX=3
# URL dell'area privata (base dei link nelle email di verifica/reset)
PRIVATE_APP_URL=http://localhost:4300
# Versione dell'informativa privacy salvata con i consensi
PRIVACY_POLICY_VERSION=privacy-v1
# Destinatari delle notifiche interne (nuovo ordine), separati da virgola; vuoto = utenti admin attivi
ADMIN_NOTIFY_EMAILS=
# --- Storage file (disco) ---
# Radice: contiene public/ (servita da Caddy) e private/ (mai servita staticamente, solo via API).
# In produzione un percorso assoluto su volume Docker.
UPLOAD_DIR=uploads
# Dimensione massima di un upload in byte (25 MB)
UPLOAD_MAX_BYTES=26214400
# URL pubblico dell'area public/ (in sviluppo la serve l'API stessa su /uploads)
PUBLIC_UPLOADS_URL=http://localhost:3000/uploads
# --- Email transazionali ---
# Provider: console (solo log + EMAIL_OUTBOX_DIR), brevo, resend. Cambiare provider = cambiare queste variabili.
EMAIL_PROVIDER=console
# Mittente su dominio verificato presso il provider (obbligatorio con brevo/resend)
EMAIL_FROM=
EMAIL_FROM_NAME=ITI TECHNOLOGY
EMAIL_REPLY_TO=
# Chiave del provider scelto
BREVO_API_KEY=
RESEND_API_KEY=
# Solo sviluppo: le email (adapter console) vengono salvate complete in questa cartella
EMAIL_OUTBOX_DIR=
# --- Medusa ---
# URL del backend Medusa (in Docker: http://medusa:9000) e timeout di ogni chiamata in ms
MEDUSA_URL=http://localhost:9000
MEDUSA_TIMEOUT_MS=5000
# Payment provider del checkout (Stripe registrato in medusa-config.ts con id "stripe")
MEDUSA_PAYMENT_PROVIDER_ID=pp_stripe_stripe
# Publishable API key del sales channel "Web": la stampa a console lo script seed
# (in medusa/apps/backend: npx medusa exec ./src/scripts/seed-base.ts), riga MEDUSA_PUBLISHABLE_KEY=pk_...
MEDUSA_PUBLISHABLE_KEY=
# Segreto condiviso con Medusa per le route /internal/* (header x-internal-secret). Deve coincidere con
# INTERNAL_API_SECRET in medusa/apps/backend/.env. Generare un valore casuale lungo (almeno 32 caratteri).
INTERNAL_API_SECRET=
# Segreto per verificare la firma HMAC-SHA256 (header x-signature) dei webhook Medusa su /webhooks/medusa.
# Deve coincidere con WEBHOOK_SECRET in medusa/apps/backend/.env (almeno 32 caratteri).
WEBHOOK_SECRET=