Toutes les variables d'environnement de Lumira V2, leur usage, et la configuration par environnement (dev/prod).
Install
npx skillscat add tachfineamnay/lumirav2/environment-variables-configuration Install via the SkillsCat registry.
SKILL.md
Environment Variables & Configuration
Context
Lumira V2 utilise deux fichiers .env principaux :
apps/api/.env→ Variables du backend NestJSapps/web/.env.local→ Variables du frontend Next.js
Référence : .env.example à la racine du monorepo.
Variables Backend (API)
Base de données
DATABASE_URL="postgresql://user:password@host:5432/lumira_db?schema=public"Serveur
PORT=3001
NODE_ENV=development # production | development | testAuthentication JWT
JWT_SECRET="your-256-bit-secret-key"
JWT_REFRESH_SECRET="your-refresh-secret-key"
JWT_ACCESS_EXPIRY="15m"
JWT_REFRESH_EXPIRY="7d"Stripe
STRIPE_SECRET_KEY="sk_test_..." # sk_live_... en production
STRIPE_WEBHOOK_SECRET="whsec_..." # Secret de signature webhookGoogle Gemini AI
GEMINI_API_KEY="AIza..." # Clé API Google AI StudioAWS S3 (Uploads)
AWS_REGION="eu-west-3"
AWS_ACCESS_KEY_ID="AKIA..."
AWS_SECRET_ACCESS_KEY="..."
AWS_S3_BUCKET="lumira-uploads-prod"
AWS_S3_BUCKET_URL="https://lumira-uploads-prod.s3.amazonaws.com"Email (Notifications)
SMTP_HOST="smtp.resend.com"
SMTP_PORT=587
SMTP_USER="resend"
SMTP_PASS="re_..." # Clé API Resend
SMTP_FROM="Oracle Lumira <no-reply@oraclelumira.com>"CORS
WEB_URL="http://localhost:3000" # https://oraclelumira.com en prodVariables Frontend (Web)
API Connection
NEXT_PUBLIC_API_URL="http://localhost:3001/api"
# Production: NEXT_PUBLIC_API_URL="https://api.oraclelumira.com/api"Stripe
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_test_..." # pk_live_... en productionAnalytics (optionnel)
NEXT_PUBLIC_POSTHOG_KEY="phc_..."
NEXT_PUBLIC_POSTHOG_HOST="https://eu.posthog.com"Accès aux variables depuis NestJS
import { ConfigService } from '@nestjs/config';
@Injectable()
export class MyService {
constructor(private configService: ConfigService) {}
getApiKey(): string {
return this.configService.get<string>('GEMINI_API_KEY');
}
getStrictApiKey(): string {
const key = this.configService.get<string>('GEMINI_API_KEY');
if (!key) throw new Error('GEMINI_API_KEY is not defined');
return key;
}
}Accès depuis Next.js
// Variables NEXT_PUBLIC_ → accessibles côté client et serveur
const apiUrl = process.env.NEXT_PUBLIC_API_URL;
// Variables sans préfixe → accessibles UNIQUEMENT côté serveur
const secret = process.env.JWT_SECRET; // Server Actions, API routes uniquementConfiguration par environnement
Développement local
# apps/api/.env
DATABASE_URL="postgresql://postgres:password@localhost:5432/lumira_dev"
NODE_ENV=development
PORT=3001
JWT_SECRET=dev-secret-local
STRIPE_SECRET_KEY=sk_test_...
GEMINI_API_KEY=AIza...
# apps/web/.env.local
NEXT_PUBLIC_API_URL=http://localhost:3001/api
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...Production (Coolify)
Les variables sont injectées via l'interface Coolify, pas de fichier .env sur le serveur. Voir le skill 10-coolify pour la configuration.
# Domaines de production
Web: https://oraclelumira.com
API: https://api.oraclelumira.com (ou port 3001 interne)
Admin: https://desk.oraclelumira.comValidation au démarrage
Il est recommandé de valider les variables critiques au boot :
// apps/api/src/app.module.ts
ConfigModule.forRoot({
isGlobal: true,
validationSchema: Joi.object({
DATABASE_URL: Joi.string().required(),
JWT_SECRET: Joi.string().min(32).required(),
STRIPE_SECRET_KEY: Joi.string().required(),
GEMINI_API_KEY: Joi.string().required(),
PORT: Joi.number().default(3001),
NODE_ENV: Joi.string().valid('development', 'production', 'test').default('development'),
}),
}),Checklist de déploiement
Avant de déployer en production, vérifier :
-
DATABASE_URLpointe vers la base de données de production -
JWT_SECRETest une clé forte (≥ 256 bits) -
STRIPE_SECRET_KEYest une clé live (pas test) -
STRIPE_WEBHOOK_SECRETcorrespond au webhook Stripe configuré -
GEMINI_API_KEYest valide et a des quotas suffisants -
AWS_S3_BUCKETest le bucket de production -
WEB_URLcorrespond au domaine de production -
NEXT_PUBLIC_API_URLpointe vers l'API de production
Best Practices
| ✅ DO | ❌ DON'T |
|---|---|
Utiliser ConfigService dans NestJS |
Utiliser process.env directement dans les services |
| Valider les variables au démarrage avec Joi | Laisser des variables manquantes causer des erreurs en runtime |
Prefix NEXT_PUBLIC_ pour les variables côté client |
Exposer des secrets dans NEXT_PUBLIC_ |
Garder .env.example à jour |
Commiter .env dans Git |
| Utiliser des secrets forts (≥32 chars) en prod | Réutiliser les secrets de dev en prod |