Piattaforma ITI TECHNOLOGY: monorepo, Medusa, API, sito, area riservata e deploy
Deploy stack su Proxmox / deploy (push) Failing after 3s
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:
@@ -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=
|
||||
Reference in New Issue
Block a user