veza/veza-backend-api/.env.production

104 lines
3.4 KiB
Text
Raw Permalink Normal View History

# =============================================================================
# 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)
fix(v0.12.6): apply all pentest remediations — 36 findings across 36 files CRITICAL fixes: - Race condition (TOCTOU) in payout/refund with SELECT FOR UPDATE (CRITICAL-001/002) - IDOR on analytics endpoint — ownership check enforced (CRITICAL-003) - CSWSH on all WebSocket endpoints — origin whitelist (CRITICAL-004) - Mass assignment on user self-update — strip privileged fields (CRITICAL-005) HIGH fixes: - Path traversal in marketplace upload — UUID filenames (HIGH-001) - IP spoofing — use Gin trusted proxy c.ClientIP() (HIGH-002) - Popularity metrics (followers, likes) set to json:"-" (HIGH-003) - bcrypt cost hardened to 12 everywhere (HIGH-004) - Refresh token lock made mandatory (HIGH-005) - Stream token replay prevention with access_count (HIGH-006) - Subscription trial race condition fixed (HIGH-007) - License download expiration check (HIGH-008) - Webhook amount validation (HIGH-009) - pprof endpoint removed from production (HIGH-010) MEDIUM fixes: - WebSocket message size limit 64KB (MEDIUM-010) - HSTS header in nginx production (MEDIUM-001) - CORS origin restricted in nginx-rtmp (MEDIUM-002) - Docker alpine pinned to 3.21 (MEDIUM-003/004) - Redis authentication enforced (MEDIUM-005) - GDPR account deletion expanded (MEDIUM-006) - .gitignore hardened (MEDIUM-007) LOW/INFO fixes: - GitHub Actions SHA pinning on all workflows (LOW-001) - .env.example security documentation (INFO-001) - Production CORS set to HTTPS (LOW-002) All tests pass. Go and Rust compile clean. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 23:44:46 +00:00
# SECURITY(REM-018): Default to HTTPS origins for production. Override in deployment.
CORS_ALLOWED_ORIGINS=https://app.veza.com,https://www.veza.com,https://veza.fr,https://veza.talas.fr
# --- REDIS ---
# Requis pour CSRF tokens, rate limiting, et cache
REDIS_ADDR=${REDIS_ADDR:-veza.fr: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://veza.fr:8082}
CHAT_SERVER_URL=${CHAT_SERVER_URL:-http://veza.fr: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)
#
# =============================================================================