Dans l'écosystème moderne de la Data, DHIS2 (District Health Information System 2) s'impose comme la solution de référence pour la collecte, la structuration et la centralisation des données de santé publique. Utilisé dans plus de 100 pays, cet outil open-source permet aux Data Analysts, Managers IT et professionnels de la santé de :
- Centraliser les données provenant de multiples sources (terrain, laboratoires, registres)
- Structurer l'information selon des standards internationaux (WHO, PEPFAR, etc.)
- Analyser en temps réel les indicateurs de santé publique
- Visualiser les tendances via des dashboards interactifs
Ce guide vous accompagne pas à pas dans le déploiement d'une instance DHIS2 fonctionnelle sur Ubuntu 22.04.5 LTS, en respectant les bonnes pratiques d'architecture et de sécurité.
🎯 Prérequis
Spécifications Serveur Recommandées
| Composant | Minimum | Recommandé | Production |
|---|---|---|---|
| CPU | 2 cores | 4 cores | 8+ cores |
| RAM | 4 GB | 8 GB | 16+ GB |
| Stockage | 50 GB | 100 GB | 500+ GB (SSD) |
| OS | Ubuntu 22.04.5 LTS | Ubuntu 22.04.5 LTS | Ubuntu 22.04.5 LTS |
Accès Requis
✅ Accès SSH avec privilèges sudo
✅ Connexion Internet stable
✅ Ports ouverts : 8080 (Tomcat), 5432 (PostgreSQL - optionnel si local)
✅ Nom de domaine ou IP publique (pour accès distant)
💡 Note de l'expert : Pour un environnement de production, privilégiez un serveur dédié avec au moins 16 GB de RAM. DHIS2 peut gérer des millions d'enregistrements, mais les performances dépendent fortement de la configuration matérielle.
🏗️ Architecture de la Stack
Comprendre l'architecture technique est essentiel pour diagnostiquer les problèmes et optimiser les performances.
┌─────────────────────────────────────────┐
│ Navigateur Web (Client) │
└──────────────┬──────────────────────────┘
│ HTTP(S) - Port 8080/443
┌──────────────▼──────────────────────────┐
│ Apache Tomcat 9 (Serveur Web) │
│ - Héberge l'application DHIS2.war │
│ - Gère les requêtes utilisateurs │
└──────────────┬──────────────────────────┘
│ JDBC
┌──────────────▼──────────────────────────┐
│ PostgreSQL 14 + PostGIS │
│ - Stockage relationnel des données │
│ - Extensions géospatiales │
│ - Indexation optimisée (pg_trgm) │
└─────────────────────────────────────────┘
Rôle des Composants
| Composant | Rôle | Pourquoi ce choix |
|---|---|---|
| Java 11 (OpenJDK) | Machine virtuelle pour exécuter DHIS2 | Compatibilité officielle DHIS2 (versions 2.38-2.40) |
| PostgreSQL 14+ | Base de données relationnelle | Performance, robustesse, support des extensions |
| PostGIS | Extension géospatiale | Gestion des coordonnées GPS, cartes choroplèthes |
| Apache Tomcat 9 | Serveur d'applications Java | Standard pour déployer des fichiers .war |
| pg_trgm & btree_gin | Extensions d'indexation | Accélération des recherches textuelles |
🛠️ Déploiement Pas-à-Pas
Étape 1️⃣ : Préparation du Système
Connectez-vous à votre serveur via SSH et mettez à jour le système :
bashsudo apt update && sudo apt upgrade -y
Installez les utilitaires de base :
bashsudo apt install -y vim software-properties-common curl wget
⚠️ Warning : Le redémarrage peut être nécessaire si le kernel a été mis à jour. Vérifiez avec
ls /var/run/reboot-required.
Étape 2️⃣ : Installation de Java 11
DHIS2 2.38 à 2.40 nécessite Java 11 (pas Java 17 ou 21).
bashsudo apt install -y openjdk-11-jdk-headless
Vérifiez l'installation :
bashjava -version
Sortie attendue :
openjdk version "11.0.x" 2023-xx-xx
OpenJDK Runtime Environment (build 11.0.x+x-Ubuntu-...)
Nettoyage : Supprimer les Versions Concurrentes
Si vous avez Java 17 ou d'autres versions installées :
bash# Lister les versions JDK installées dpkg --list | grep -i jdk
Exemple pour supprimer Java 17 :
bashsudo apt purge openjdk-17-* -y sudo apt autoremove -y
💡 Note de l'expert : DHIS2 2.41+ supportera Java 17. Vérifiez toujours la matrice de compatibilité officielle avant d'installer.
Étape 3️⃣ : Installation de PostgreSQL et PostGIS
bashsudo apt install -y postgresql postgresql-contrib postgis
Vérifiez que PostgreSQL est actif :
bashsudo systemctl status postgresql
Étape 4️⃣ : Configuration de la Base de Données
Création de l'utilisateur et de la base DHIS2
bash# Créer l'utilisateur 'dhis' (sans privilèges SUPERUSER, CREATEDB, CREATEROLE) sudo -u postgres createuser -S -D -R dhis # Créer la base de données 'dhis2' appartenant à 'dhis' sudo -u postgres createdb -O dhis dhis2 # Définir un mot de passe sécurisé sudo -u postgres psql -c "ALTER USER dhis WITH PASSWORD 'votre_mot_de_passe_securise';"
🔐 Warning : Remplacez
votre_mot_de_passe_securisepar un mot de passe fort (min. 16 caractères, alphanumérique + symboles). Stockez-le dans un gestionnaire de mots de passe.
Activation des Extensions PostgreSQL
bash# Extension géospatiale sudo -u postgres psql -d dhis2 -c "CREATE EXTENSION postgis;" # Extensions d'indexation pour les performances sudo -u postgres psql -d dhis2 CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE EXTENSION IF NOT EXISTS btree_gin;
Vérification :
bashsudo -u postgres psql -d dhis2 -c "\dx"
💡 Note :
pg_trgmaméliore considérablement les performances des recherches de type "LIKE '%texte%'", essentielles dans les formulaires DHIS2.
Étape 5️⃣ : Installation et Configuration de Tomcat 9
Téléchargement et Installation
bash# Créer le répertoire d'installation sudo mkdir /opt/tomcat # Télécharger Tomcat 9.0.80 (version stable) sudo wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz # Extraire l'archive sudo tar xzvf apache-tomcat-9.0.80.tar.gz -C /opt/tomcat --strip-components=1 # Installer les dépendances graphiques (nécessaires pour certains modules DHIS2) sudo apt-get install -y libfontconfig1
Configuration du Mode Headless
Tomcat doit fonctionner en mode "headless" (sans interface graphique) :
bashsudo nano /opt/tomcat/bin/setenv.sh
Ajoutez cette ligne :
bashexport CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"
Sauvegardez : Ctrl+O, Entrée, Ctrl+X
Étape 6️⃣ : Configuration des Variables d'Environnement
Définir les Variables Système
Éditez le fichier de profil de votre utilisateur (ou créez /etc/profile.d/dhis2.sh pour un scope global) :
bashsudo nano ~/.bashrc
Ajoutez à la fin du fichier :
bashexport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export JAVA_OPTS="-Duser.timezone=UTC -Xms2048m -Xmx4096m" export DHIS2_HOME=/home/dhis/config
Rechargez la configuration :
bashsource ~/.bashrc
Explication des Paramètres JVM
| Paramètre | Valeur | Signification |
|---|---|---|
-Duser.timezone=UTC | UTC | Timezone universelle (évite les décalages horaires) |
-Xms2048m | 2 GB | Mémoire JVM initiale (heap minimum) |
-Xmx4096m | 4 GB | Mémoire JVM maximale (heap maximum) |
⚙️ Note de l'expert : Pour un serveur avec 16 GB RAM, configurez
-Xms4096m -Xmx8192m. Laissez ~4-6 GB pour PostgreSQL et l'OS.
Étape 7️⃣ : Configuration DHIS2
Créer le Répertoire de Configuration
bashsudo mkdir -p /home/dhis/config sudo nano /home/dhis/config/dhis.conf
Ajoutez la configuration suivante :
properties# Configuration de la connexion à PostgreSQL connection.dialect = org.hibernate.dialect.PostgreSQLDialect connection.driver_class = org.postgresql.Driver connection.url = jdbc:postgresql:dhis2 connection.username = dhis connection.password = votre_mot_de_passe_securise # Configuration de l'encryption (optionnel mais recommandé) # encryption.password = VotreClefEncryption32Caracteres! # Configuration du serveur server.base.url = http://votre-ip-ou-domaine:8080 server.https = off
🔐 Warning : Remplacez
votre_mot_de_passe_securisepar le mot de passe défini à l'étape 4. En production, activez HTTPS (server.https = on).
Ajuster les Permissions
bashsudo chown -R $USER:$USER /home/dhis/config sudo chmod 600 /home/dhis/config/dhis.conf # Lecture/écriture pour le propriétaire uniquement
Étape 8️⃣ : Déploiement de l'Application DHIS2
Supprimer les Applications Tomcat par Défaut
bashrm -rf /opt/tomcat/webapps/*
💡 Note de l'expert : Les applications exemples de Tomcat (manager, host-manager) représentent un risque de sécurité. Supprimez-les systématiquement.
Télécharger DHIS2 (Version Stable 2.40)
bashsudo wget https://releases.dhis2.org/2.40/dhis2-stable-latest.war -O /opt/tomcat/webapps/ROOT.war
Pourquoi ROOT.war ?
Cela déploie DHIS2 à la racine (http://votre-ip:8080/) plutôt que sur un sous-chemin (/dhis2).
Étape 9️⃣ : Démarrage de Tomcat
bash/opt/tomcat/bin/startup.sh
Sortie attendue :
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
...
Tomcat started.
Surveiller les Logs en Temps Réel
bashsudo tail -f /opt/tomcat/logs/catalina.out
Recherchez ces lignes clés :
INFO: Starting ProtocolHandler ["http-nio-8080"]
INFO: Server startup in [xxxxx] milliseconds
* INFO DHIS2 instance '2.40.x' initialized successfully
⏱️ Note : Le premier démarrage prend 2-5 minutes (création des tables, indexation). Soyez patient !
✅ Vérification de l'Installation
Test 1 : Accès Web
Ouvrez votre navigateur et accédez à :
http://localhost:8080
Ou depuis une machine distante :
http://VOTRE_IP_PUBLIQUE:8080
Page attendue :
Écran de connexion DHIS2 avec le logo et les champs Username / Password.

Identifiants par défaut :
- Username :
admin - Password :
district
🔐 Warning : Changez immédiatement le mot de passe admin après la première connexion (
Menu > Utilisateurs > Modifier l'utilisateur admin).
Test 2 : Vérification des Logs
Aucune Erreur Critique
bashsudo tail -f /opt/tomcat/logs/catalina.out
Sortie normale : Aucune ligne ou erreurs mineures non bloquantes.
Connexion PostgreSQL Réussie
bashgrep -i "connection.*established" /opt/tomcat/logs/catalina.out
Test 3 : Vérification PostgreSQL
bashsudo -u postgres psql -d dhis2 -c "SELECT COUNT(*) FROM datavalue;"
Après connexion initiale : La table datavalue doit exister (même vide).
Erreurs Courantes et Solutions
| Symptôme | Cause Probable | Solution |
|---|---|---|
| Erreur 404 après démarrage | DHIS2 non déployé | Vérifiez que /opt/tomcat/webapps/ROOT.war existe |
| OutOfMemoryError | Heap JVM insuffisant | Augmentez -Xmx dans JAVA_OPTS |
| Connection refused (PostgreSQL) | Service arrêté | sudo systemctl start postgresql |
| Extension PostGIS introuvable | PostGIS non installé | sudo apt install postgis |
| Java version incompatible | Java 17+ installé | Utilisez Java 11 (voir Étape 2) |
Félicitations ! Vous avez déployé une instance DHIS2 fonctionnelle sur Ubuntu 22.04.5 LTS.
Prochaines Étapes
-
Configuration Métier :
- Créer votre hiérarchie organisationnelle (pays > régions > districts)
- Définir les Data Elements et Indicators
- Concevoir vos formulaires de collecte
-
Sécurisation Avancée :
- Implémenter HTTPS avec Nginx
- Configurer des backups incrémentaux
- Mettre en place une stratégie de monitoring (Prometheus + Grafana)
-
Intégration Data Pipeline :
- Connecter DHIS2 à votre Data Warehouse
- Automatiser l'extraction via l'API REST
- Construire des dashboards Power BI / Tableau
