Architecture & Déploiement
CSWeb Community Platform v2.0 offre une architecture flexible qui vous permet de choisir votre base de données et votre mode de déploiement selon vos besoins.
Vue d'Ensemble
L'architecture flexible vous permet de :
- Choisir votre SGBD : PostgreSQL (recommandé), MySQL ou SQL Server
- Déployer localement : Docker Compose pour développement/tests
- Déployer en production : Serveurs distants pour RGPH et recensements
- Migrer à chaud : Changer de SGBD sans réinstaller CSWeb
Concept Clé : Deux Bases de Données
CSWeb utilise toujours 2 bases distinctes :
1. MySQL Metadata (Obligatoire - Non Modifiable)
- Stocke les utilisateurs, dictionnaires, tokens OAuth
- Schéma imposé par CSWeb vanilla (compatibilité bidirectionnelle)
- Doit être MySQL (compatibilité CSWeb vanilla)
2. Base Breakout (Configurable)
- Stocke les données "breakées" (cas, niveaux, notes)
- Structure définie par vos dictionnaires CSPro
- Peut être PostgreSQL, MySQL ou SQL Server
- Optimisée pour analyses statistiques
┌─────────────────────┐ ┌────────────────────────┐
│ MySQL Metadata │ │ Breakout Database │
│ (Fixe) │ │ (Flexible) │
├─────────────────────┤ ├────────────────────────┤
│ • Users │ │ • {dict}_cases │
│ • Dictionaries │ │ • {dict}_notes │
│ • OAuth Tokens │ │ • {dict}_level_1 │
│ • Sync Queue │ │ • {dict}_level_2 │
└─────────────────────┘ └────────────────────────┘
CSWeb vanilla PostgreSQL/MySQL/SQL ServerMode LOCAL (Docker)
Tous les services (CSWeb + MySQL metadata + Base breakout) tournent sur la même machine.
Quand Utiliser
- Développement et tests
- POC (Proof of Concept) et démos
- Formation CSWeb
- Petits volumes (< 50k questionnaires)
Architecture Docker
┌──────────────── Docker Compose Stack ────────────────┐
│ │
│ ┌──────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ CSWeb │ │ csweb-mysql │ │ postgres │ │
│ │ :8080 │ │ :3306 │ │ :5432 │ │
│ │ (Apache) │ │ (Metadata) │ │ (Breakout) │ │
│ └──────────┘ └──────────────┘ └──────────────┘ │
│ │
│ Réseau: csweb_network │
└───────────────────────────────────────────────────────┘Configuration
Fichier .env (PostgreSQL) :
# Mode déploiement
DEPLOYMENT_MODE=local
BREAKOUT_DB_TYPE=postgresql
# PostgreSQL (Container Docker)
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DATABASE=csweb_analytics
POSTGRES_USER=csweb_analytics
POSTGRES_PASSWORD=secure_pass
# MySQL Metadata (Container Docker - Fixe)
MYSQL_HOST=csweb-mysql
MYSQL_PORT=3306
MYSQL_DATABASE=csweb
MYSQL_USER=csweb
MYSQL_PASSWORD=metadata_passLancement
# Lancer tous les containers
docker compose --profile local-postgres up -d
# Vérifier les services
docker compose ps
# Tester les drivers
docker compose exec csweb php bin/console csweb:check-database-driversMode REMOTE (Production)
CSWeb tourne localement mais se connecte à des serveurs de bases de données distants.
Quand Utiliser
- Production avec gros volumes (> 100k questionnaires)
- Recensements nationaux (RGPH)
- Infrastructure existante à réutiliser
- Haute disponibilité requise
Architecture Remote
┌─────────── Host Machine ───────────┐
│ │
│ ┌──────────┐ │
│ │ CSWeb │ │
│ │ :8080 │ │
│ │(Container)│ │
│ └────┬─────┘ │
│ │ │
└───────┼────────────────────────────┘
│
│ VPN/LAN
│
┌───────▼──── Production Network ────┐
│ │
│ ┌─────────────┐ ┌───────────────┐│
│ │ MySQL │ │ PostgreSQL ││
│ │192.168.1.50 │ │192.168.1.100 ││
│ │ :3306 │ │ :5432 ││
│ │ (Metadata) │ │ (Breakout) ││
│ └─────────────┘ └───────────────┘│
└─────────────────────────────────────┘Prérequis
- Connectivité réseau : VPN, LAN ou Internet
- Ports ouverts : MySQL (3306), PostgreSQL (5432), SQL Server (1433)
- Firewall configuré sur serveurs distants
- SGBD configuré pour accepter connexions externes
Configuration
Fichier .env (Remote PostgreSQL) :
# Mode déploiement
DEPLOYMENT_MODE=remote
BREAKOUT_DB_TYPE=postgresql
# PostgreSQL REMOTE
POSTGRES_HOST=192.168.1.100
POSTGRES_PORT=5432
POSTGRES_DATABASE=prod_analytics
POSTGRES_USER=analytics_user
POSTGRES_PASSWORD=ProdSecurePass123!
# MySQL Metadata REMOTE
MYSQL_HOST=192.168.1.50
MYSQL_PORT=3306
MYSQL_DATABASE=csweb_prod
MYSQL_USER=csweb_prod
MYSQL_PASSWORD=MetadataSecurePass!Lancement
# Seul le container CSWeb démarre (pas de containers DB)
docker compose up -d
# Vérifier connexion aux serveurs distants
docker compose exec csweb php bin/console csweb:check-database-drivers --test-connectionsOutput attendu :
✓ MySQL Metadata : Connected to 192.168.1.50:3306/csweb_prod
✓ PostgreSQL Breakout : Connected to 192.168.1.100:5432/prod_analyticsComparaison LOCAL vs REMOTE
| Critère | LOCAL (Docker) | REMOTE (Production) |
|---|---|---|
| Complexité setup | Facile (1 commande) | Moyenne (config réseau/firewall) |
| Performances | Rapide (réseau interne) | Dépend du réseau |
| Scalabilité | Locale (1 machine) | Élevée (serveurs dédiés) |
| Coût | Gratuit | Serveurs + licenses |
| Use case | Dev/Test/POC | Production/RGPH |
| Volume recommandé | < 50k cas | > 100k cas |
Choisir Votre SGBD
PostgreSQL (Recommandé)
Avantages :
- Performances excellentes pour analytics
- Types de données avancés (JSON, arrays)
- Requêtes complexes optimisées
- Open source et gratuit
Quand choisir :
- Volume > 100k questionnaires
- Analyses statistiques avancées
- Solution open source (sans licenses commerciales)
MySQL
Avantages :
- Compatible avec CSWeb vanilla
- Écosystème mature
- Migration facile depuis vanilla
Quand choisir :
- Migration depuis CSWeb vanilla existant
- Équipe déjà formée MySQL
- Volume < 100k questionnaires
SQL Server
Avantages :
- Intégration Microsoft (Power BI, Azure)
- Outils d'administration avancés
- Support entreprise
Quand choisir :
- Infrastructure Microsoft existante
- Budget pour licenses
- Besoin d'intégration Power BI
Migration À Chaud
Vous pouvez changer de SGBD sans réinstaller CSWeb.
Étapes
1. Backup des Données
# PostgreSQL
docker compose exec postgres pg_dump -U csweb_analytics csweb_analytics > backup.sql
# MySQL
docker compose exec mysql-breakout mysqldump -u breakout_user -p csweb_breakout > backup.sql2. Modifier .env
# Avant
BREAKOUT_DB_TYPE=postgresql
POSTGRES_HOST=postgres
# Après
BREAKOUT_DB_TYPE=mysql
MYSQL_BREAKOUT_HOST=mysql-breakout
MYSQL_BREAKOUT_PORT=33073. Relancer Containers
# Arrêter ancien profil
docker compose --profile local-postgres down
# Démarrer nouveau profil
docker compose --profile local-mysql up -d4. Re-Breakout
# Recommandé : re-breakout complet
docker compose exec csweb php bin/console csweb:process-cases-by-dict eval --overwriteCas d'Usage Réel : RGPH5 Sénégal
Contexte :
- ANSD (Agence Nationale de la Statistique et de la Démographie)
- Plusieurs millions de questionnaires RGPH5
- Serveur SQL Server existant
Configuration :
DEPLOYMENT_MODE=remote
BREAKOUT_DB_TYPE=sqlserver
# SQL Server REMOTE (ANSD)
SQLSERVER_HOST=172.16.0.50
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=RGPH5_Analytics
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=RGPH5SecurePass!Résultat :
- Gain de temps significatif grâce au breakout sélectif (vs mode global)
- Données stockées sur SQL Server de production
- Analyses SQL directes sur serveur ANSD
Drivers Pré-Installés
Tous les drivers sont pré-installés dans le container CSWeb :
docker compose exec csweb php bin/console csweb:check-database-driversOutput attendu :
✓ pdo_mysql : Available (MySQL metadata + breakout)
✓ pdo_pgsql : Available (PostgreSQL breakout)
✓ pdo_sqlsrv : Available (SQL Server breakout)| Driver | SGBD | Usage | Extension PHP |
|---|---|---|---|
pdo_mysql | MySQL/MariaDB | Metadata + Breakout | ext-pdo_mysql |
pdo_pgsql | PostgreSQL | Breakout uniquement | ext-pdo_pgsql |
pdo_sqlsrv | SQL Server | Breakout uniquement | ext-pdo_sqlsrv + ODBC Driver 18 |
Troubleshooting
Cannot connect to remote database
Symptôme :
Connection refused: 192.168.1.100:5432Solutions :
- Vérifier réseau :
ping 192.168.1.100
telnet 192.168.1.100 5432- Vérifier firewall :
sudo ufw allow 5432/tcp- Vérifier configuration PostgreSQL :
# postgresql.conf
listen_addresses = '*'
# pg_hba.conf
host all all 0.0.0.0/0 md5Port already in use
Symptôme :
Error: port 5432 is already allocatedSolution :
# Arrêter PostgreSQL local
sudo systemctl stop postgresql
# Ou changer port Docker
POSTGRES_PORT=5433Authentication failed
Symptôme :
SQLSTATE[28000]: Invalid authorization specificationSolutions :
- PostgreSQL : Vérifier
pg_hba.confutilisemd5(paspeer) - MySQL : Créer user avec wildcard :
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT ALL ON database.* TO 'user'@'%';Commandes Utiles
Vérifier Configuration Active
# Variables breakout
docker compose exec csweb env | grep BREAKOUT
# Variables PostgreSQL
docker compose exec csweb env | grep POSTGRESTester Connexions
docker compose exec csweb php bin/console csweb:check-database-drivers --test-connectionsChanger Mode à Chaud
# 1. Modifier .env
nano .env
# 2. Redémarrer CSWeb
docker compose restart csweb
# 3. Vérifier
docker compose exec csweb php bin/console csweb:check-database-driversRessources
- Installation Rapide - Setup en 5 minutes
- Breakout Sélectif - Innovation principale
- Configuration Multi-DB - Détails techniques
- Déploiement Docker - Docker Compose
Architecture par Bouna DRAME | Portfolio (opens in a new tab) | GitHub (opens in a new tab)