# ============================================================================= # Configuration NON SECRETE du backend # ============================================================================= # Seules figurent ici les variables reellement lues par le code # (verifie dans app.module.ts, security.config.ts et les adaptateurs). # Les identifiants et cles vivent dans le Secret xpeditis-backend-secrets. apiVersion: v1 kind: ConfigMap metadata: name: xpeditis-backend-config namespace: xpeditis-prod labels: app.kubernetes.io/name: xpeditis-backend app.kubernetes.io/part-of: xpeditis data: NODE_ENV: "production" # Lu par les migrations (deployment-environment.ts) : bloque les comptes de # test et neutralise ceux qui accepteraient encore leur mot de passe public. APP_ENV: "production" PORT: "4000" API_PREFIX: "api/v1" # Force la sortie pino en JSON : c'est ce que Promtail sait decouper en # champs (level, context, reqId) pour Loki. LOG_FORMAT: "json" # --- URLs publiques -------------------------------------------------------- APP_URL: "https://app.xpeditis.com" FRONTEND_URL: "https://app.xpeditis.com" BACKEND_URL: "https://api.xpeditis.com" # Liste blanche CORS. `credentials: true` interdit le joker `*` : chaque # origine autorisee doit etre enumeree (security.config.ts). CORS_ORIGIN: "https://app.xpeditis.com,https://www.xpeditis.com,https://xpeditis.com" # --- Cookies d'authentification ------------------------------------------- # Le point initial rend le cookie valide pour tous les sous-domaines : l'API # (api.xpeditis.com) le pose, le middleware Next.js (app.xpeditis.com) le lit. # Sans cela, la connexion reussit mais l'utilisateur est renvoye sur /login. COOKIE_DOMAIN: ".xpeditis.com" # app et api partagent le meme site : 'lax' suffit et reste le plus sur. # Ne passer a 'none' que si le front devient reellement cross-site (et 'none' # impose Secure). COOKIE_SAMESITE: "lax" # --- PostgreSQL (db-01, reseau prive) -------------------------------------- DATABASE_HOST: "10.10.1.20" DATABASE_PORT: "5432" DATABASE_NAME: "xpeditis_prod" # pg_hba n'accepte que des lignes `hostssl` : sans cette valeur a "true", # le backend ne peut tout simplement pas se connecter. DATABASE_SSL: "true" DATABASE_LOGGING: "false" # --- Redis (db-01, reseau prive) ------------------------------------------- REDIS_HOST: "10.10.1.20" REDIS_PORT: "6379" REDIS_DB: "0" # --- JWT ------------------------------------------------------------------- JWT_ACCESS_EXPIRATION: "15m" JWT_REFRESH_EXPIRATION: "7d" # --- SMTP (Brevo) ---------------------------------------------------------- SMTP_HOST: "smtp-relay.brevo.com" SMTP_PORT: "587" SMTP_SECURE: "false" SMTP_FROM: "noreply@xpeditis.com" # --- Stockage objet (Hetzner Object Storage, compatible S3) ---------------- # Aucun changement de code : le SDK AWS parle a Hetzner via AWS_S3_ENDPOINT. AWS_REGION: "fsn1" AWS_S3_ENDPOINT: "https://fsn1.your-objectstorage.com" AWS_S3_BUCKET: "xpeditis-prod-documents" # --- Collecteur de logs applicatifs --------------------------------------- LOG_EXPORTER_URL: "http://xpeditis-log-exporter:3200" # --- Premier administrateur ------------------------------------------------ # Lu par la migration 1756000000001-BootstrapAdminFromEnv, qui remplace le # compte de demonstration admin@xpeditis.com / Password123!. # # Renseigne SEUL (sans BOOTSTRAP_ADMIN_PASSWORD_HASH dans le Secret), il cree # un compte ADMIN actif SANS mot de passe utilisable : vous definissez le # votre via « mot de passe oublie ». Aucun secret n'existe alors nulle part. # # La migration ne fait rien s'il existe deja un administrateur actif : elle ne # peut donc pas en creer un second lors d'un deploiement ulterieur. # # Cette adresse doit etre RELEVABLE : c'est par elle que passe le lien de # definition du mot de passe. BOOTSTRAP_ADMIN_EMAIL: "ops@xpeditis.com" BOOTSTRAP_ADMIN_FIRST_NAME: "Admin" BOOTSTRAP_ADMIN_LAST_NAME: "Xpeditis" # Organisation de rattachement (users.organization_id est NOT NULL). # Creee si elle n'existe pas ; a completer ensuite dans l'interface. BOOTSTRAP_ADMIN_ORG_NAME: "Xpeditis" BOOTSTRAP_ADMIN_ORG_STREET: "A completer" BOOTSTRAP_ADMIN_ORG_CITY: "A completer" BOOTSTRAP_ADMIN_ORG_POSTAL_CODE: "00000" BOOTSTRAP_ADMIN_ORG_COUNTRY: "FR"