FAQ (Foire Aux Questions)
Réponses aux 30+ questions les plus fréquentes sur CSWeb Community Platform v2.0.
Général
Qu'est-ce que CSWeb Community Platform ?
CSWeb Community Platform v2.0 est une extension open-source de CSWeb (Census and Survey Processing System) développée par Bouna DRAME.
Améliorations par rapport à CSWeb vanilla :
- Architecture flexible : Support PostgreSQL, MySQL, SQL Server
- Breakout sélectif : Par dictionnaire (innovation Assietou DIAGNE)
- Déploiement Docker : Installation en 5 minutes
- Multi-database : 2 bases distinctes (metadata + analytics)
- Local & Remote : Développement local ou serveurs distants
- Production-ready : Validé en production lors du RGPH5 Sénégal
Quelle est la différence avec CSWeb vanilla ?
| Aspect | CSWeb Vanilla | CSWeb Community v2.0 |
|---|---|---|
| Base de données | MySQL uniquement | PostgreSQL + MySQL + SQL Server |
| Breakout | Global (tous dictionnaires ensemble) | Sélectif (par dictionnaire) |
| Installation | Manuelle (2-3h) | Docker (5 minutes) |
| Architecture | 1 base MySQL | 2 bases (metadata + analytics) |
| Drivers | MySQL seulement | pdo_mysql + pdo_pgsql + pdo_sqlsrv |
| Performance (RGPH) | Heures voire jours | Fraction du temps (gain significatif) |
| Déploiement | Local uniquement | Local + Remote |
Est-ce gratuit / open-source ?
Oui, 100% gratuit et open-source.
- Licence : MIT License (permissive)
- Code source : GitHub - csweb-community (opens in a new tab)
- Contributions : Bienvenues (pull requests, issues)
Coûts éventuels :
- Infrastructure serveur (si production cloud)
- Licences SQL Server (si choix SQL Server en production)
- PostgreSQL et MySQL sont gratuits
Puis-je migrer de CSWeb vanilla vers CSWeb Community ?
Oui, migration bidirectionnelle possible.
De vanilla vers Community :
- Backup base MySQL vanilla
- Installer CSWeb Community (Docker)
- Restaurer backup dans container
mysql(metadata) - Lancer breakout sélectif vers PostgreSQL/MySQL/SQL Server
- Données analytiques séparées, metadata intacte
De Community vers vanilla :
- Base MySQL metadata compatible 100%
- Backup metadata restaurer sur CSWeb vanilla
- Perte du breakout sélectif (revenir au breakout global)
Installation
Quels sont les prérequis ?
Matériel :
- CPU : 2 cores minimum (4+ recommandés)
- RAM : 4 GB minimum (8+ recommandés)
- Disque : 10 GB minimum (+ espace données)
Logiciels :
- Docker Engine 20.10+
- Docker Compose 2.0+
- Git (pour cloner repository)
Système d'exploitation :
- Linux (Ubuntu 20.04+, Debian 11+, CentOS 8+)
- macOS 11+ (Big Sur+)
- Windows 10+ avec WSL2
L'installation prend combien de temps ?
Installation complète : 5-10 minutes
Détails :
- Clone repository : ~1 min
- Lancement
install.sh: ~30 secondes - Pull images Docker : ~3-5 min (selon connexion)
- Setup.php (interface) : ~2 min
- Premier breakout test : ~1 min
Total : 5-10 minutes pour installation production-ready.
Peut-on installer sans Docker ?
Oui, mais déconseillé.
Installation manuelle (sans Docker) :
- Installer PHP 8.1+ avec extensions (pdo_mysql, pdo_pgsql, pdo_sqlsrv)
- Installer MySQL 8.0+ pour metadata
- Installer PostgreSQL/MySQL/SQL Server pour breakout
- Configurer Apache/Nginx
- Configurer permissions
- Installer dépendances Composer
Temps estimé : 2-3 heures (vs 5 minutes avec Docker)
Documentation : Voir docs/INSTALLATION-CSWEB-VANILLA.md (non recommandé).
Comment désinstaller complètement ?
# Arrêter et supprimer containers
docker compose down -v # -v = supprimer volumes
# Supprimer images
docker rmi $(docker images 'pg_csweb8*' -q)
# Supprimer dossier projet
cd ..
rm -rf csweb-community
# (Optionnel) Nettoyer Docker
docker system prune -aBase de Données
Pourquoi 2 bases de données distinctes ?
Raisons techniques :
- Base MySQL Metadata (FIXE)
- Schéma imposé par CSWeb vanilla
- Compatibilité bidirectionnelle garantie
- Petit volume (< 100 MB)
- Performances suffisantes
- Base Breakout (FLEXIBLE)
- Structure dynamique (définie par dictionnaires CSPro)
- Gros volumes (millions de lignes)
- Besoin performances analytics (PostgreSQL)
- Indépendance des releases CSWeb vanilla
Avantage : Choisir le meilleur SGBD pour chaque usage.
Quel SGBD choisir pour le breakout ?
Recommandations :
| Use Case | SGBD Recommandé | Raison |
|---|---|---|
| Développement local | PostgreSQL | Gratuit, performant, riche en fonctionnalités |
| Analytics & BI | PostgreSQL | Meilleur pour requêtes complexes, analytics |
| Compatibilité existante | MySQL | Infrastructure MySQL déjà en place |
| Enterprise (Windows) | SQL Server | Intégration écosystème Microsoft, HA |
| RGPH / Recensement | SQL Server | Validé en production lors du RGPH5 Sénégal |
| INS Afrique | PostgreSQL ou SQL Server | Selon infrastructure existante |
Benchmark performances (50k cas) :
- PostgreSQL : ~45 min (5 threads)
- MySQL : ~50 min (5 threads)
- SQL Server : ~42 min (5 threads)
Différence négligeable. Choisir selon infrastructure/expertise.
Peut-on changer de SGBD après installation ?
Oui, migration à chaud possible.
Procédure :
- Modifier
.env:BREAKOUT_DB_TYPE=mysqlpostgresql - Arrêter container ancien SGBD
- Démarrer container nouveau SGBD
- Re-breakout des dictionnaires
Temps estimé : 30 min (+ temps re-breakout selon volume).
Documentation : Architecture - Flexible
La base metadata DOIT-elle être MySQL ?
Oui, actuellement.
Raison : Schéma metadata imposé par CSWeb vanilla (compatibility layer).
Possible future évolution :
- PostgreSQL metadata (perte compatibilité vanilla)
- Contributions bienvenues pour implémenter
Workaround actuel : MySQL metadata + PostgreSQL breakout (hybrid mode).
Breakout Sélectif
Qu'est-ce que le breakout sélectif ?
Définition : Processus de transformation de questionnaires CSPro en tables SQL par dictionnaire, au lieu d'un breakout global.
Innovation : Développé par Assietou DIAGNE (ANSD, Sénégal).
Avantages :
- Isolation : Tables séparées par dictionnaire (
eval_cases,kairos_cases) - Performance : Traitement parallèle, pas de contention
- Flexibilité : Breakout uniquement les dictionnaires nécessaires
- Scalabilité : Validé en production lors du RGPH5 Sénégal avec un gain de temps significatif
Pattern de nommage :
{label}_{table_name}
Exemples:
- EVAL_DICT eval_cases, eval_producteurs
- KAIROS_DICT kairos_cases, kairos_observationsQuelle est la différence entre breakout global et sélectif ?
| Aspect | Breakout Global (Vanilla) | Breakout Sélectif (Community) |
|---|---|---|
| Portée | Tous les dictionnaires ensemble | Un ou plusieurs dictionnaires choisis |
| Tables | Tables uniques pour tous | Tables préfixées par dictionnaire |
| Commande | csweb:process-cases | csweb:process-cases-by-dict |
| Performance | Traitement séquentiel | Traitement parallèle avec isolation |
| Exemple | cases, level_1 | eval_cases, kairos_cases |
| RGPH5 Sénégal | Traitement global | Traitement ciblé (flexible et rapide) |
Combien de temps prend un breakout ?
Dépend de :
- Nombre de questionnaires
- Complexité dictionnaires (levels, records)
- Nombre de threads
- Performances serveur
Benchmarks :
Le temps de breakout dépend du volume de données, du matériel et du driver SGBD. Le breakout sélectif (par dictionnaire) est significativement plus rapide que le breakout global car il traite un seul dictionnaire à la fois.
Facteurs principaux : nombre de cas, complexité du dictionnaire (niveaux, items), performances disque et réseau.
Peut-on annuler un breakout en cours ?
Oui.
# Trouver processus
docker compose exec csweb ps aux | grep process-cases
# Tuer processus (remplacer PID)
docker compose exec csweb kill -9 <PID>
# Ou Ctrl+C si lancé en foregroundConséquence : Tables partiellement remplies.
Nettoyage :
# Relancer avec --overwrite pour écraser
docker compose exec csweb php bin/console csweb:process-cases-by-dict \
dictionnaires=EVAL_DICT \
--overwriteDéploiement
Peut-on déployer en production ?
Oui, production-ready.
Validations :
- RGPH5 Sénégal : Validé en production (ANSD)
- Gambie, Guinée : Recensements nationaux
- Autres INS africains : En cours de déploiement
Recommandations production :
- Serveur dédié (4+ CPU, 16+ GB RAM)
- Backups automatisés (daily)
- Monitoring (Prometheus, Grafana)
- VPN pour accès distant
- SSL/TLS (Let's Encrypt)
Comment déployer sur serveur distant ?
Étapes :
- Sur serveur distant :
# Installer Docker
curl -fsSL https://get.docker.com | sh
# Cloner repository
git clone https://github.com/BOUNADRAME/csweb-community.git
cd csweb-community
# Lancer installation
./install.sh- Configurer .env (remote mode) :
BREAKOUT_MODE=remote
BREAKOUT_DB_TYPE=sqlserver # Exemple RGPH5
# SQL Server distant
SQLSERVER_HOST=172.16.0.50
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=RGPH5_Analytics
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=SecurePass!- Démarrer :
docker compose up -dAccès :
http://<IP_SERVEUR>:8080Comment sécuriser l'accès en production ?
1. Reverse Proxy (Nginx + SSL) :
server {
listen 443 ssl;
server_name csweb.example.org;
ssl_certificate /etc/letsencrypt/live/csweb.example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/csweb.example.org/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}2. Firewall :
# Bloquer accès direct port 8080
sudo ufw deny 8080/tcp
# Autoriser HTTPS uniquement
sudo ufw allow 443/tcp3. VPN :
- OpenVPN ou WireGuard
- Accès réservé aux IPs autorisées
4. Authentification forte :
- Mots de passe complexes (16+ caractères)
- JWT expiration courte (1h)
- Refresh tokens sécurisés
Performance
Comment optimiser les performances du breakout ?
1. Augmenter les threads :
# Optimal : Nb_CPU - 1
--threads=7 # Si serveur 8 CPU2. Augmenter mémoire PHP :
php -d memory_limit=2G bin/console csweb:process-cases-by-dict ...3. Désactiver logs debug :
# .env
CSWEB_PROCESS_CASES_LOG_LEVEL=error4. Indexes (PostgreSQL) :
CREATE INDEX idx_eval_cases_guid ON eval_cases(guid);
CREATE INDEX idx_eval_prod_parent ON eval_producteurs(parent_guid);5. Partitionnement (gros volumes) :
-- PostgreSQL 12+ : Partition par range (date)
CREATE TABLE eval_cases (
guid VARCHAR(255),
modified_date TIMESTAMP
) PARTITION BY RANGE (modified_date);
CREATE TABLE eval_cases_2025 PARTITION OF eval_cases
FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');Gain potentiel : 2-3x plus rapide avec optimisations complètes.
Le breakout consomme combien de RAM ?
Estimation :
La consommation RAM dépend du volume de données traité. Plus le nombre de cas est élevé, plus la RAM nécessaire augmente.
Recommandations serveur :
- Petit volume : 4 GB RAM minimum
- Volume moyen : 8 GB RAM recommandé
- Gros volume : 16+ GB RAM
Sécurité
Les mots de passe sont-ils stockés en clair ?
Non, jamais.
CSWeb utilise :
- Hachage bcrypt (
password_hash()PHP) - Salt automatique (unique par mot de passe)
- Coût 10 (par défaut, augmente temps brute-force)
Exemple :
// Mot de passe: "SecurePass123!"
// Stocké en DB:
$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWyImpossible de récupérer le mot de passe original (hachage unidirectionnel).
Comment changer le mot de passe admin ?
Via Interface Web :
- Login CSWeb (
admin / admin123par défaut) - Administration Users Edit admin
- Changer password
- Sauvegarder
Via MySQL Direct :
# Se connecter à MySQL metadata
docker compose exec mysql mysql -u csweb -p csweb
# Générer hash
# (Utiliser https://bcrypt-generator.com/ ou PHP)UPDATE cspro_users
SET password = '$2y$10$NEW_HASH_HERE'
WHERE username = 'admin';Support & Contributions
Comment obtenir de l'aide ?
1. Documentation :
2. GitHub Issues :
- https://github.com/BOUNADRAME/csweb-community/issues (opens in a new tab)
- Créer issue avec :
- Description problème
- Logs (
docker compose logs > debug.log) - Configuration (
.envsans mots de passe)
3. Community :
- Discord (lien dans README)
- Email : Voir profil GitHub
Comment contribuer au projet ?
Contributions bienvenues !
Types de contributions :
- Bug fixes
- Nouvelles fonctionnalités
- Documentation
- Traductions (EN, FR, ES, PT)
- Tests
Procédure :
- Fork repository
- Créer branche :
feature/ma-fonctionnalite - Commit changements
- Push vers fork
- Créer Pull Request
Guidelines : Voir CONTRIBUTING.md (racine projet).
Qui maintient le projet ?
Lead Developer : Bouna DRAME (opens in a new tab)
- GitHub : @BOUNADRAME (opens in a new tab)
- Portfolio : bounadrame.github.io (opens in a new tab)
Contributeurs clés :
- Assietou DIAGNE (ANSD, Sénégal) : Breakout sélectif, Transformation CSWeb PostgreSQL
- Community contributors : Voir Contributors
Licences & Légal
Quelle est la licence du projet ?
MIT License (permissive).
Vous pouvez :
- Utiliser commercialement
- Modifier le code
- Distribuer
- Sublicencier
Conditions :
- Inclure copyright notice
- Inclure copie de la licence
Garantie : AUCUNE (AS IS).
Texte complet : Voir LICENSE (racine projet).
Puis-je utiliser pour un projet commercial ?
Oui, absolument.
Exemples d'usage commercial :
- Institut national de statistique (INS)
- Cabinet de conseil en statistiques
- Entreprise SaaS (offrir CSWeb as a Service)
- Formation payante
Obligation : Inclure copyright notice (respect MIT License).
Recommandé : Mentionner CSWeb Community Platform + contribuer améliorations.
Cas d'Usage Réels
Qui utilise CSWeb Community Platform ?
Validations production :
- ANSD Sénégal (Agence Nationale de la Statistique et de la Démographie)
- RGPH5 (Recensement Général de la Population et de l'Habitat)
- Plusieurs millions de questionnaires
- SQL Server breakout
- Gain de temps significatif vs CSWeb vanilla
- Gambie
- Census national
- PostgreSQL breakout
- Guinée
- Recensement national
- SQL Server breakout
- Autres INS africains (en cours)
Le RGPH5 Sénégal a vraiment utilisé cette plateforme ?
Oui, validation production RGPH5 Sénégal 2025.
Chiffres :
- Plusieurs millions de questionnaires
- 10 threads parallèles
- SQL Server 2019 (serveur ANSD)
- Fraction du temps de breakout vs mode global
- Gain de performance significatif vs breakout global
Innovation : Breakout sélectif par dictionnaire (Assietou DIAGNE, ANSD).
Documentation : Voir Breakout Sélectif.
Autres Questions
Peut-on importer des données existantes ?
Oui, plusieurs méthodes :
1. Import CSV :
-- PostgreSQL
COPY eval_producteurs FROM '/path/data.csv' CSV HEADER;
-- MySQL
LOAD DATA INFILE '/path/data.csv'
INTO TABLE eval_producteurs
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;2. Import depuis autre DB :
# PostgreSQL
pg_dump -h old_server -U user source_db | psql -h localhost -U csweb_analytics csweb_analytics3. Re-breakout depuis CSPro :
- Upload dictionnaires CSPro
- Upload questionnaires (.dat)
- Lancer
csweb:process-cases-by-dict
Comment faire un backup complet ?
Backup automatisé (recommandé) :
#!/bin/bash
# backup.sh - Backup quotidien DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/csweb/$DATE"
mkdir -p $BACKUP_DIR
# 1. Backup MySQL metadata
docker compose exec mysql mysqldump -u csweb -p csweb > $BACKUP_DIR/metadata.sql
# 2. Backup PostgreSQL breakout
docker compose exec postgres pg_dump -U csweb_analytics csweb_analytics > $BACKUP_DIR/analytics.sql
# 3. Backup fichiers
tar -czf $BACKUP_DIR/files.tar.gz ./files
# 4. Backup .env
cp .env $BACKUP_DIR/.env.backup echo "Backup completed: $BACKUP_DIR"Cron daily :
# crontab -e
0 2 * * * /path/to/backup.shLa documentation est-elle à jour ?
Oui, documentation synchronisée avec le code.
Dernière mise à jour : 15 Mars 2026
Version documentée : CSWeb Community Platform v2.0.0
Comment vérifier :
# Version du code
git log -1 --format="%H %ci"
# Version de la documentation
cat docs-nextra/package.json | grep versionContributions : Pull requests bienvenues pour améliorer docs !
Vous n'avez pas trouvé votre réponse ?
- Troubleshooting : Common Issues
- GitHub Issues : Créer une issue (opens in a new tab)
- Discord : Lien dans README
- Email : Voir profil GitHub
CSWeb Community Platform v2.0 - FAQ Lead Developer : Bouna DRAME | Breakout Sélectif : Assietou DIAGNE