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
77 lines
2.7 KiB
Bash
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
|