Variables d'Environnement (.env)
Vue d'Ensemble Toutes les configurations de CSWeb Community Platform sont définies dans le fichier .env situé à la racine du projet.
Création du Fichier .env
# Copier le template
cp .env.example .env
# Éditer avec vos valeurs
nano .env # ou vim, code, etc.Configuration Breakout (ESSENTIEL)
BREAKOUT_MODE Mode de déploiement de la base de données breakout.
Valeurs :
local: Docker containers (développement, test)remote: Serveur distant (production, RGPH5, etc.)
Défaut : local
Exemples :
# Développement avec Docker
BREAKOUT_MODE=localBREAKOUT_DB_TYPE Type de base de données pour le breakout sélectif.
Valeurs :
postgresql: PostgreSQL (recommandé pour analytics)mysql: MySQL (compatible, performant)sqlserver: SQL Server (RGPH5 Sénégal, production enterprise)
Défaut : postgresql
Impact :
- Détermine le driver PDO utilisé (
pdo_pgsql,pdo_mysql,pdo_sqlsrv) - Active le profil Docker Compose correspondant
- Charge les variables de connexion appropriées
Exemples :
BREAKOUT_DB_TYPE=postgresqlApplication
APP_ENV Environnement d'exécution de l'application.
Valeurs :
prod: Production (logs minimaux, cache activé)dev: Développement (logs verbose, debug activé)test: Tests (isolation, fixtures)
Défaut : prod
Exemples :
# Production
APP_ENV=prod
# Développement
APP_ENV=devAPP_DEBUG Active le mode debug (affichage erreurs détaillées).
Valeurs :
true: Debug activé (stack traces complètes)false: Debug désactivé (messages génériques)
Défaut : false
Exemples :
# Production
APP_DEBUG=false
# Développement
APP_DEBUG=trueAPP_TIMEZONE Fuseau horaire de l'application (format PHP timezone).
Valeurs : Tout timezone PHP valide (voir Liste PHP Timezones (opens in a new tab))
Défaut : UTC
Exemples :
# Sénégal (GMT)
APP_TIMEZONE=Africa/Dakar
# France (CET/CEST)
APP_TIMEZONE=Europe/Paris
# UTC (recommandé)
APP_TIMEZONE=UTCAPP_SECRET Clé secrète pour chiffrement/hachage (Symfony).
Format : Chaîne aléatoire longue (32+ caractères)
Génération :
# Générer une clé aléatoire
openssl rand -hex 32
# Exemple output:
# a1b2c3d4e5f67890abcdef1234567890fedcba0987654321abcdef1234567890Exemples :
APP_SECRET=a1b2c3d4e5f67890abcdef1234567890fedcba0987654321abcdef1234567890CSWEB_PORT Port HTTP pour accéder à CSWeb.
Défaut : 8080
Exemples :
# Port par défaut
CSWEB_PORT=8080
# Port alternatif (si 8080 occupé)
CSWEB_PORT=9090Accès :
- Interface web :
http://localhost:8080 - API :
http://localhost:8080/api
MySQL Metadata (FIXE)
MYSQL_HOST Nom d'hôte du serveur MySQL metadata.
Valeurs :
mysql: Container Docker (mode local)localhost: MySQL local (hors Docker)- IP/hostname : Serveur distant (déconseillé pour metadata)
Défaut : mysql
Exemples :
# Docker (recommandé)
MYSQL_HOST=mysql
# Local (installation manuelle)
MYSQL_HOST=localhostMYSQL_PORT Port du serveur MySQL metadata.
Défaut : 3306
Exemples :
MYSQL_PORT=3306MYSQL_DATABASE Nom de la base de données metadata.
Défaut : csweb_metadata
Exemples :
MYSQL_DATABASE=csweb_metadataMYSQL_USER Utilisateur MySQL pour la base metadata.
Défaut : csweb_user
Exemples :
MYSQL_USER=csweb_userMYSQL_PASSWORD Mot de passe de l'utilisateur MySQL metadata.
Génération :
# Générer mot de passe sécurisé
openssl rand -base64 32Exemples :
MYSQL_PASSWORD=MySecurePass123!MetadataMYSQL_ROOT_PASSWORD Mot de passe root du serveur MySQL.
Génération :
openssl rand -base64 32Exemples :
MYSQL_ROOT_PASSWORD=MyVerySecureRootPass456!PostgreSQL Breakout Variables utilisées si BREAKOUT_DB_TYPE=postgresql.
POSTGRES_HOST Nom d'hôte du serveur PostgreSQL.
Valeurs :
postgres: Container Docker (mode local)localhost: PostgreSQL local- IP/hostname : Serveur distant (mode remote)
Défaut : postgres
Exemples :
# Docker container
POSTGRES_HOST=postgresPOSTGRES_PORT Port du serveur PostgreSQL.
Défaut : 5432
Exemples :
POSTGRES_PORT=5432POSTGRES_DATABASE Nom de la base de données breakout PostgreSQL.
Défaut : csweb_analytics
Exemples :
# Développement
POSTGRES_DATABASE=csweb_analytics
# Production
POSTGRES_DATABASE=prod_analytics
# RGPH5
POSTGRES_DATABASE=rgph5_analyticsPOSTGRES_USER Utilisateur PostgreSQL pour la base breakout.
Défaut : csweb_analytics
Exemples :
POSTGRES_USER=csweb_analyticsPOSTGRES_PASSWORD Mot de passe de l'utilisateur PostgreSQL.
Génération :
openssl rand -base64 32Exemples :
# Développement
POSTGRES_PASSWORD=dev_postgres_pass_123
# Production
POSTGRES_PASSWORD=ProdSecurePostgres789!MySQL Breakout Variables utilisées si BREAKOUT_DB_TYPE=mysql.
MYSQL_BREAKOUT_HOST Nom d'hôte du serveur MySQL breakout.
Défaut : mysql-breakout
Exemples :
# Docker container
MYSQL_BREAKOUT_HOST=mysql-breakout
# Serveur distant
MYSQL_BREAKOUT_HOST=10.20.30.40MYSQL_BREAKOUT_PORT Port du serveur MySQL breakout.
Défaut : 3307 (port différent pour éviter conflit avec MySQL metadata)
Exemples :
# Docker (port customisé)
MYSQL_BREAKOUT_PORT=3307
# Remote (port standard)
MYSQL_BREAKOUT_PORT=3306MYSQL_BREAKOUT_DATABASE Nom de la base de données breakout MySQL.
Défaut : csweb_breakout
Exemples :
MYSQL_BREAKOUT_DATABASE=csweb_breakoutMYSQL_BREAKOUT_USER Utilisateur MySQL pour la base breakout.
Défaut : breakout_user
Exemples :
MYSQL_BREAKOUT_USER=breakout_userMYSQL_BREAKOUT_PASSWORD Mot de passe de l'utilisateur MySQL breakout.
Génération :
openssl rand -base64 32Exemples :
MYSQL_BREAKOUT_PASSWORD=BreakoutSecurePass456!SQL Server Breakout Variables utilisées si BREAKOUT_DB_TYPE=sqlserver.
SQLSERVER_HOST Nom d'hôte du serveur SQL Server.
Défaut : sqlserver
Exemples :
# Docker container
SQLSERVER_HOST=sqlserver
# Serveur distant RGPH5
SQLSERVER_HOST=172.16.0.50SQLSERVER_PORT Port du serveur SQL Server.
Défaut : 1433
Exemples :
SQLSERVER_PORT=1433SQLSERVER_DATABASE Nom de la base de données breakout SQL Server.
Défaut : CSWeb_Analytics
Exemples :
# Développement
SQLSERVER_DATABASE=CSWeb_Analytics
# RGPH5 Sénégal
SQLSERVER_DATABASE=RGPH5_AnalyticsSQLSERVER_USER Utilisateur SQL Server.
Défaut : sa (System Administrator)
Exemples :
# SA (développement uniquement)
SQLSERVER_USER=sa
# User applicatif (production)
SQLSERVER_USER=csweb_breakout_userSQLSERVER_PASSWORD Mot de passe SQL Server.
Contraintes SQL Server :
- Minimum 8 caractères
- Majuscules + minuscules + chiffres + symboles
- Ne pas contenir le username
Exemples :
# Développement
SQLSERVER_PASSWORD=YourStrong!Passw0rd
# RGPH5 Production
SQLSERVER_PASSWORD=RGPH5SecurePass!2026Outils de Développement
PHPMYADMIN_PORT Port pour accéder à phpMyAdmin (interface MySQL).
Défaut : 8081
Exemples :
PHPMYADMIN_PORT=8081Accès :
- URL :
http://localhost:8081 - Server :
mysql(oumysql-breakoutpour breakout DB) - Username/Password : Selon DB (
MYSQL_USER/MYSQL_BREAKOUT_USER)
PGADMIN_PORT Port pour accéder à pgAdmin (interface PostgreSQL).
Défaut : 8082
Exemples :
PGADMIN_PORT=8082Accès :
- URL :
http://localhost:8082 - Email :
PGADMIN_EMAIL - Password :
PGADMIN_PASSWORD
PGADMIN_EMAIL Email de login pgAdmin.
Défaut : admin@csweb.local
Exemples :
PGADMIN_EMAIL=admin@csweb.localPGADMIN_PASSWORD Mot de passe de login pgAdmin.
Défaut : admin123
Exemples :
# Développement
PGADMIN_PASSWORD=admin123
# Production (désactiver pgAdmin)
# PGADMIN_PORT= # Commenter pour désactiverSécurité
JWT_SECRET Clé secrète pour signer les tokens JWT OAuth2.
Format : Chaîne aléatoire longue (32+ caractères)
Génération :
openssl rand -hex 32Exemples :
JWT_SECRET=fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210JWT_EXPIRATION Durée de validité des tokens JWT en millisecondes.
Défaut : 86400000 (24 heures)
Exemples :
# 24 heures (défaut)
JWT_EXPIRATION=86400000
# 1 heure (production sécurisée)
JWT_EXPIRATION=3600000
# 7 jours (développement)
JWT_EXPIRATION=604800000Conversions :
- 1 heure = 3 600 000 ms
- 24 heures = 86 400 000 ms
- 7 jours = 604 800 000 ms
FILES_FOLDER Dossier de stockage des fichiers uploadés (photos, documents).
Défaut : /var/www/html/files
Exemples :
# Docker (défaut)
FILES_FOLDER=/var/www/html/files
# Montage volume externe
FILES_FOLDER=/mnt/storage/csweb/filesAPI_URL URL de base de l'API CSWeb (utilisée pour webhooks, callbacks).
Défaut : http://localhost:8080/api/
Exemples :
# Développement local
API_URL=http://localhost:8080/api/
# Production
API_URL=https://csweb.example.org/api/
# RGPH5 Sénégal
API_URL=http://193.203.15.16/kairos/api/Logging
CSWEB_LOG_LEVEL Niveau de logs de l'application CSWeb.
Valeurs :
debug: Tous les messages (verbose)info: Messages informatifs + erreurswarning: Avertissements + erreurserror: Erreurs uniquement (recommandé production)
Défaut : error
Exemples :
# Production
CSWEB_LOG_LEVEL=error
# Développement
CSWEB_LOG_LEVEL=debugCSWEB_PROCESS_CASES_LOG_LEVEL Niveau de logs spécifique à la commande process-cases-by-dict.
Valeurs : Identiques à CSWEB_LOG_LEVEL
Défaut : error
Exemples :
# Production (minimal)
CSWEB_PROCESS_CASES_LOG_LEVEL=error
# Debug breakout (verbose)
CSWEB_PROCESS_CASES_LOG_LEVEL=debugMAX_EXECUTION_TIME Temps maximum d'exécution PHP en secondes.
Défaut : 300 (5 minutes)
Exemples :
# Requêtes courtes
MAX_EXECUTION_TIME=300
# Breakout RGPH (très long)
MAX_EXECUTION_TIME=0 # Illimité (déconseillé)Performance Tuning
Variables pour optimiser PHP, MySQL, PostgreSQL et Apache. Voir le guide complet Performance Tuning pour les profils et formules.
PHP
| Variable | Default | Description |
|---|---|---|
PHP_MEMORY_LIMIT | 512M | Memoire max par processus PHP |
PHP_MAX_EXECUTION_TIME | 300 | Temps max d'execution (secondes) |
PHP_MAX_INPUT_TIME | 300 | Temps max de parsing input |
PHP_UPLOAD_MAX_FILESIZE | 100M | Taille max d'un fichier uploade |
PHP_POST_MAX_SIZE | 100M | Taille max d'une requete POST |
PHP_SESSION_GC_MAXLIFETIME | 7200 | Duree de session (secondes) |
PHP_OPCACHE_MEMORY | 128 | Memoire OPcache (MB) |
PHP_OPCACHE_MAX_FILES | 10000 | Fichiers max en cache OPcache |
MySQL Performance
| Variable | Default | Description |
|---|---|---|
MYSQL_MAX_CONNECTIONS | 200 | Connexions simultanees max |
MYSQL_INNODB_BUFFER_POOL_SIZE | 256M | Cache InnoDB |
MYSQL_INNODB_LOG_FILE_SIZE | 64M | Journal InnoDB |
MYSQL_SLOW_QUERY_TIME | 2 | Seuil requete lente (sec) |
MYSQL_MAX_ALLOWED_PACKET | 64M | Taille max paquet |
MYSQL_THREAD_CACHE_SIZE | 16 | Threads en cache |
MYSQL_TABLE_OPEN_CACHE | 2000 | Tables ouvertes en cache |
MYSQL_WAIT_TIMEOUT | 28800 | Timeout connexion inactive |
PostgreSQL Performance
| Variable | Default | Description |
|---|---|---|
PG_MAX_CONNECTIONS | 200 | Connexions simultanees max |
PG_SHARED_BUFFERS | 256MB | Cache partage |
PG_EFFECTIVE_CACHE_SIZE | 1GB | Estimation cache OS |
PG_WORK_MEM | 4MB | Memoire par tri |
PG_MAINTENANCE_WORK_MEM | 64MB | Memoire VACUUM/INDEX |
Apache MPM Prefork
| Variable | Default | Description |
|---|---|---|
APACHE_MAX_REQUEST_WORKERS | 150 | Processus Apache max |
APACHE_SERVER_LIMIT | 150 | Limite serveur (>= MaxRequestWorkers) |
APACHE_KEEP_ALIVE_TIMEOUT | 5 | Timeout keep-alive (sec) |
APACHE_MAX_KEEP_ALIVE_REQUESTS | 100 | Requetes max keep-alive |
APACHE_TIMEOUT | 300 | Timeout requete (sec) |
Verification :
docker exec csweb-app php bin/console csweb:check-configExemples Complets
Configuration Local (PostgreSQL)
# .env - Développement Local avec PostgreSQL
# Breakout
BREAKOUT_MODE=local
BREAKOUT_DB_TYPE=postgresql
# Application
APP_ENV=dev
APP_DEBUG=true
APP_TIMEZONE=Africa/Dakar
APP_SECRET=a1b2c3d4e5f67890abcdef1234567890fedcba0987654321abcdef1234567890
CSWEB_PORT=8080
# MySQL Metadata (Docker)
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DATABASE=csweb_metadata
MYSQL_USER=csweb_user
MYSQL_PASSWORD=dev_metadata_pass_123
MYSQL_ROOT_PASSWORD=dev_root_pass_456
# PostgreSQL Breakout (Docker)
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATABASE=csweb_analytics
POSTGRES_USER=csweb_analytics
POSTGRES_PASSWORD=dev_postgres_pass_789
# Outils Dev
PHPMYADMIN_PORT=8081
PGADMIN_PORT=8082
PGADMIN_EMAIL=admin@csweb.local
PGADMIN_PASSWORD=admin123
# Sécurité
JWT_SECRET=fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210
JWT_EXPIRATION=86400000
FILES_FOLDER=/var/www/html/files
API_URL=http://localhost:8080/api/
# Logs
CSWEB_LOG_LEVEL=debug
CSWEB_PROCESS_CASES_LOG_LEVEL=debug
MAX_EXECUTION_TIME=300Configuration Remote (SQL Server RGPH5)
# .env - Production RGPH5 Sénégal avec SQL Server distant
# Breakout
BREAKOUT_MODE=remote
BREAKOUT_DB_TYPE=sqlserver
# Application
APP_ENV=prod
APP_DEBUG=false
APP_TIMEZONE=Africa/Dakar
APP_SECRET=PROD_SECRET_CHANGE_ME_UNIQUE_VALUE_HERE
CSWEB_PORT=8080
# MySQL Metadata (Container local)
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DATABASE=csweb_metadata
MYSQL_USER=csweb_user
MYSQL_PASSWORD=ProdMetadataPass123!
MYSQL_ROOT_PASSWORD=ProdRootPass456!
# SQL Server Breakout (Serveur ANSD distant)
SQLSERVER_HOST=172.16.0.50
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=RGPH5_Analytics
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=RGPH5SecurePass!2026
# Sécurité
JWT_SECRET=PROD_JWT_SECRET_CHANGE_ME_UNIQUE_VALUE
JWT_EXPIRATION=3600000 # 1h (sécurisé)
FILES_FOLDER=/var/www/html/files
API_URL=http://193.203.15.16/kairos/api/
# Logs (production)
CSWEB_LOG_LEVEL=error
CSWEB_PROCESS_CASES_LOG_LEVEL=error
MAX_EXECUTION_TIME=0 # Illimité pour breakout sur gros volumesConfiguration Hybrid (MySQL local + PostgreSQL remote)
# .env - Hybrid: Metadata local + Breakout distant
# Breakout
BREAKOUT_MODE=remote
BREAKOUT_DB_TYPE=postgresql
# Application
APP_ENV=prod
APP_DEBUG=false
APP_TIMEZONE=UTC
APP_SECRET=HYBRID_SECRET_UNIQUE
CSWEB_PORT=8080
# MySQL Metadata (Container local)
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DATABASE=csweb_metadata
MYSQL_USER=csweb_user
MYSQL_PASSWORD=LocalMetadataPass!
MYSQL_ROOT_PASSWORD=LocalRootPass!
# PostgreSQL Breakout (Serveur distant)
POSTGRES_HOST=192.168.1.100
POSTGRES_PORT=5432
POSTGRES_DATABASE=prod_analytics
POSTGRES_USER=analytics_user
POSTGRES_PASSWORD=RemotePostgresPass!
# Sécurité
JWT_SECRET=HYBRID_JWT_SECRET_UNIQUE
JWT_EXPIRATION=86400000
FILES_FOLDER=/var/www/html/files
API_URL=http://csweb.example.org/api/
# Logs
CSWEB_LOG_LEVEL=error
CSWEB_PROCESS_CASES_LOG_LEVEL=error
MAX_EXECUTION_TIME=300Vérification
Afficher Variables Actuelles
# Toutes les variables
docker compose exec csweb env
# Filtrer breakout
docker compose exec csweb env | grep BREAKOUT
# Filtrer PostgreSQL
docker compose exec csweb env | grep POSTGRES
# Filtrer MySQL
docker compose exec csweb env | grep MYSQLTester Connexions
# Vérifier drivers disponibles
docker compose exec csweb php bin/console csweb:check-database-drivers
# Tester connexions aux DB
docker compose exec csweb php bin/console csweb:check-database-drivers --test-connectionsOutput attendu :
pdo_mysql : Available pdo_pgsql : Available pdo_sqlsrv : Available MySQL Metadata : Connected to mysql:3306/csweb_metadata PostgreSQL Breakout : Connected to postgres:5432/csweb_analyticsTroubleshooting
Erreur: Variable Non Définie
Symptôme :
Environment variable "POSTGRES_PASSWORD" is not definedSolution :
- Vérifier
.envexiste :
ls -la .env- Vérifier variable présente :
grep POSTGRES_PASSWORD .env- Redémarrer containers :
docker compose restartErreur: Mauvaise Valeur
Symptôme :
SQLSTATE[HY000]: Driver not found for pdo_sqlsrvCause : BREAKOUT_DB_TYPE ne correspond pas aux variables configurées.
Solution :
# Vérifier cohérence
BREAKOUT_DB_TYPE=sqlserver # Doit correspondre
SQLSERVER_HOST=... # Variables SQL Server doivent être rempliesErreur: Mot de Passe Invalide (SQL Server)
Symptôme :
Password validation failed. The password does not meet policy requirements.Cause : Mot de passe SQL Server trop faible.
Solution :
# Minimum 8 caractères avec majuscule + chiffre + symbole
SQLSERVER_PASSWORD=MyStrong!Pass123Ressources
- Template Complet :
.env.example(racine du projet) - Configuration Multi-DB : Database - Multi-DB
- Architecture Flexible : Architecture - Flexible
- Docker Compose : Config - Docker Compose
- Troubleshooting : Common Issues
CSWeb Community Platform v2.0 - Environment Variables Reference Architecte : Bouna DRAME | Portfolio (opens in a new tab)