veza/veza-backend-api/.env.production
senke 6b26ab1c71 config(prod): add complete .env.production template
Created comprehensive production environment configuration template with:
- All required variables documented (DATABASE_URL, JWT_SECRET, REDIS_ADDR)
- Security settings (COOKIE_SECURE=true, COOKIE_SAME_SITE=strict)
- CORS configuration for user's local domains (veza.com, veza.talas.fr, etc.)
- Placeholder syntax  for orchestrator injection
- Clear documentation of mandatory vs optional variables

User domains from /etc/hosts:
- veza.com, veza.talas.fr, veza.fr, veza.talas.com (all on 127.0.0.1)

Production deployment should inject secrets via:
- Kubernetes Secrets
- AWS Secrets Manager
- HashiCorp Vault
- CI/CD pipeline variables

Fixes: P1.5 from audit AUDIT_TEMP_29_01_2026.md
2026-01-29 23:15:29 +01:00

103 lines
3.4 KiB
Text

# =============================================================================
# VEZA BACKEND API - PRODUCTION CONFIGURATION
# =============================================================================
# ⚠️ IMPORTANT: Ce fichier est un TEMPLATE
# Les valeurs ${VAR} doivent être injectées par l'orchestrateur (K8s, Docker, etc.)
# Ne JAMAIS committer de secrets en clair dans ce fichier
# =============================================================================
# --- ENVIRONNEMENT ---
APP_ENV=production
APP_PORT=8080
LOG_LEVEL=info
# --- BASE DE DONNÉES ---
# Injecté par orchestrateur (ex: K8s Secret, Docker Compose environment)
DATABASE_URL=${DATABASE_URL}
DATABASE_MAX_OPEN_CONNS=25
DATABASE_MAX_IDLE_CONNS=5
DATABASE_CONN_MAX_LIFETIME=5m
# --- JWT & SÉCURITÉ ---
# ⚠️ CRITIQUE: Injecté par AWS Secrets Manager / HashiCorp Vault
# Ne JAMAIS utiliser la valeur de dev en production
JWT_SECRET=${JWT_SECRET}
JWT_ISSUER=veza-api
JWT_AUDIENCE=veza-app
JWT_ACCESS_TOKEN_DURATION=15m
JWT_REFRESH_TOKEN_DURATION=30d
# --- COOKIES (PRODUCTION) ---
# CRITIQUE: Secure cookies obligatoires en production
COOKIE_SECURE=true
COOKIE_SAME_SITE=strict
COOKIE_DOMAIN=.veza.com
# --- CORS ---
# ⚠️ IMPORTANT: Définir les origines exactes (pas de wildcard)
# User config: veza.com, veza.talas.fr, veza.fr, veza.talas.com (all on 127.0.0.1)
# Dev local avec domaines personnalisés (port 5173 pour Vite)
CORS_ALLOWED_ORIGINS=http://veza.com:5173,http://veza.talas.fr:5173,http://veza.fr:5173,http://veza.talas.com:5173
# Production (HTTPS): https://app.veza.com,https://www.veza.com
# --- REDIS ---
# Requis pour CSRF tokens, rate limiting, et cache
REDIS_ADDR=${REDIS_ADDR:-localhost:6379}
REDIS_PASSWORD=${REDIS_PASSWORD}
REDIS_DB=0
# --- RABBITMQ (Optionnel) ---
# Désactiver si non utilisé en production
RABBITMQ_ENABLE=${RABBITMQ_ENABLE:-false}
RABBITMQ_URL=${RABBITMQ_URL}
# --- SENTRY (Monitoring) ---
# Fortement recommandé pour production
SENTRY_DSN=${SENTRY_DSN}
SENTRY_ENVIRONMENT=production
SENTRY_SAMPLE_RATE_ERRORS=1.0
SENTRY_SAMPLE_RATE_TRANSACTIONS=0.1
# --- RATE LIMITING ---
# Activer en production pour protection DoS
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_SECOND=100
# --- UPLOADS ---
# Chemin absolu pour stockage persistant
UPLOAD_DIR=${UPLOAD_DIR:-/var/lib/veza/uploads}
ENABLE_CLAMAV=${ENABLE_CLAMAV:-true}
CLAMAV_REQUIRED=${CLAMAV_REQUIRED:-true}
# --- SERVICES EXTERNES ---
# URLs des autres services du stack
STREAM_SERVER_URL=${STREAM_SERVER_URL:-http://localhost:8082}
CHAT_SERVER_URL=${CHAT_SERVER_URL:-http://localhost:8081}
# --- EMAIL (Optionnel) ---
# Requis si email verification / password reset activés
SMTP_HOST=${SMTP_HOST}
SMTP_PORT=${SMTP_PORT:-587}
SMTP_USERNAME=${SMTP_USERNAME}
SMTP_PASSWORD=${SMTP_PASSWORD}
SMTP_FROM=${SMTP_FROM:-noreply@veza.com}
# =============================================================================
# VARIABLES OBLIGATOIRES vs OPTIONNELLES
# =============================================================================
#
# OBLIGATOIRES (l'app ne démarre pas sans):
# - DATABASE_URL
# - JWT_SECRET
# - REDIS_ADDR (si CSRF/rate limiting activés)
#
# FORTEMENT RECOMMANDÉES:
# - SENTRY_DSN (monitoring erreurs)
# - CORS_ALLOWED_ORIGINS (sinon mode strict = reject all)
#
# OPTIONNELLES:
# - RABBITMQ_* (si événements asynchrones non utilisés)
# - SMTP_* (si pas d'emails)
# - CLAMAV_* (si pas de scan antivirus uploads)
#
# =============================================================================