Déploiement Remote
Guide de déploiement avec serveurs de bases de données distants.
Concept
Mode Remote = Container CSWeb (avec MySQL métadonnées) + Bases de données breakout sur des serveurs distants existants.
En mode remote, CSWeb ne crée aucune base de données breakout localement. Il se connecte simplement aux bases déjà existantes sur le réseau. Les seuls prérequis sont les drivers PHP installés (pdo_mysql, pdo_pgsql, pdo_sqlsrv) — tous sont pré-installés dans l'image Docker.
┌───────────────────┐ ┌─────────────────────┐
│ Serveur CSWeb │ │ Serveur(s) Distant │
│ (Docker) │ │ │
│ │ │ ┌────────────────┐ │
│ ┌─────────────┐ │ réseau │ │ PostgreSQL │ │
│ │ CSWeb │──┼──────────┼──│ OU MySQL │ │
│ │ (Apache) │ │ │ │ OU SQL Server │ │
│ └─────────────┘ │ │ └────────────────┘ │
│ │ │ │
│ ┌─────────────┐ │ └─────────────────────┘
│ │ MySQL │ │
│ │ (Metadata) │ │ Chaque dictionnaire peut pointer
│ └─────────────┘ │ vers un serveur/driver différent
└───────────────────┘Cas d'usage :
- Production avec base analytics sur un serveur dédié
- Mix de drivers (PostgreSQL pour un dict, SQL Server pour un autre)
- Séparation metadata/analytics pour la performance
Fonctionnement
En mode remote, la configuration se fait en deux temps :
-
.env: DéfinirBREAKOUT_MODE=remoteet le pilote par défaut (BREAKOUT_DB_TYPE)postgresql: utilise le driverpdo_pgsqlmysql: utilise le driverpdo_mysqlsqlserver: utilise le driverpdo_sqlsrv
-
Interface CSWeb : Au moment du breakout, renseigner les informations de connexion au serveur distant (host, port, database, user, password) pour chaque dictionnaire
Le pilote par défaut est important car il détermine quel driver PDO sera utilisé pour se connecter au serveur distant.
Configuration
Étape 1 : Modifier le .env
# Passer en mode remote
BREAKOUT_MODE=remote
# Pilote par défaut selon votre serveur distant
BREAKOUT_DB_TYPE=postgresql # ou mysql, ou sqlserver
# MySQL Metadata reste LOCAL (container Docker)
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DATABASE=csweb_metadata
MYSQL_USER=csweb_user
MYSQL_PASSWORD=VotreMotDePasse
MYSQL_ROOT_PASSWORD=VotreMotDePasseRootÉtape 2 : Démarrer sans conteneur breakout
# Démarrer SEULEMENT CSWeb et MySQL (pas de DB breakout locale)
docker compose up -d csweb mysql
# Vérifier les conteneurs
docker compose psSortie attendue :
NAME STATUS PORTS
csweb-app Up (healthy) 0.0.0.0:8080->80/tcp
csweb-mysql-metadata Up (healthy) 0.0.0.0:3306->3306/tcpÉtape 3 : Vérifier les drivers
# Vérifier que le driver correspondant est installé
docker compose exec csweb php bin/console csweb:check-database-driversLes 3 drivers (PostgreSQL, MySQL, SQL Server) sont installés par défaut dans l'image Docker.
Étape 4 : Configurer le breakout dans CSWeb
- Se connecter à
http://localhost:8080 - Aller dans Settings > Data, onglet Data Configuration
- Cliquer Add Configuration et sélectionner un dictionnaire
- Renseigner les informations du serveur distant :
- Database name : Nom de la base breakout (doit être différente de la base métadonnées)
- Hostname : IP ou hostname du serveur distant
- Port : Port du SGBD (5432, 3306, 1433)
- Username / Password : Credentials du serveur distant
Chaque dictionnaire peut pointer vers un serveur et un driver différent.
Étape 5 : Lancer le breakout
Depuis l'onglet Breakout Scheduler : ajouter un schedule ou utiliser Run Now pour un breakout immédiat.
Ou en CLI :
# Breakout sélectif vers le serveur distant
docker compose exec csweb php bin/console csweb:process-cases-by-dict NOM_DICTIONNAIRELes tables seront créées directement sur le serveur distant.
Prérequis Serveur Distant
Connectivité Réseau
Depuis le conteneur CSWeb, le serveur distant doit être joignable :
# Tester depuis le conteneur CSWeb
docker compose exec csweb bash
php -r "echo @fsockopen('192.168.1.100', 5432, \$e, \$m, 5) ? 'OK' : 'FAIL: '.\$m;"Configuration SGBD
postgresql.conf :
listen_addresses = '*'pg_hba.conf :
# Autoriser les connexions depuis le serveur CSWeb
host all all 0.0.0.0/0 md5
# OU restreindre à une IP (recommandé production)
host all all 192.168.1.50/32 md5Firewall :
sudo ufw allow from [IP_SERVEUR_CSWEB] to any port 5432
sudo systemctl restart postgresqlBasculer entre Local et Remote
Local vers Remote
# 1. Modifier .env : BREAKOUT_MODE=remote
# 2. Arrêter le conteneur breakout local
docker compose stop postgres
# 3. Relancer CSWeb
docker compose up -d csweb mysqlRemote vers Local
# 1. Modifier .env : BREAKOUT_MODE=local
# 2. Relancer avec le profil local
docker compose --profile local-postgres up -dExemples Production
RGPH5 Sénégal (SQL Server)
BREAKOUT_MODE=remote
BREAKOUT_DB_TYPE=sqlserverConnexion configurée dans CSWeb :
- Host :
172.16.0.50 - Port :
1433 - Database :
RGPH5_Analytics
Résultat : L'ensemble des questionnaires traités en une fraction du temps initialement prévu.
Institut National de Statistique (PostgreSQL)
BREAKOUT_MODE=remote
BREAKOUT_DB_TYPE=postgresqlConnexion configurée dans CSWeb :
- Host :
10.0.0.100 - Port :
5432 - Database :
census_analytics
Troubleshooting
Connection Refused
Symptôme :
SQLSTATE[HY000] [2002] Connection refusedSolutions :
- Vérifier que le serveur distant est démarré
- Vérifier le firewall (
ufw status,iptables -L) - Vérifier
listen_addressesdans la configuration SGBD - Tester la connectivité depuis le conteneur
Authentication Failed
Symptôme :
SQLSTATE[28000] Invalid authorizationSolutions :
- Vérifier les credentials
- Créer l'utilisateur avec host wildcard (
'%') - Vérifier
pg_hba.confpour PostgreSQL - Activer l'authentification SQL pour SQL Server
Timeout
Symptôme :
SQLSTATE[HYT00]: Login timeout expiredSolutions :
- Serveur distant non joignable (réseau)
- Firewall bloque le port
- VPN requis mais non connecté
Ressources
- Installation - Guide d'installation complet
- Variables d'Environnement - Référence .env
- Architecture - Architecture Local vs Remote
- Troubleshooting - Problèmes courants