Introduction
Cette procédure détaille l’installation de la suite de supervision Zabbix (version 7.0 LTS) en utilisant des conteneurs Docker. Elle inclut le serveur, l’interface web, la base de données et un agent.
Contexte et Justification
L’installation manuelle de Zabbix (cf. procédure Installation de Zabbix) nécessite de configurer manuellement Apache, PHP-FPM, et de compiler certains modules. Avec Docker :
- Modularité : Le « Frontend » (Web) et le « Backend » (Serveur) sont séparés proprement.
- Cohabitation : Zabbix peut tourner sur le même serveur que GLPI sans conflit de bibliothèques, car chacun a ses propres versions de PHP/DB isolées.
Concepts Clés
Contrairement à GLPI qui est souvent vu comme un bloc unique « Web + DB », Zabbix sous Docker est composé de 3 briques distinctes qui doivent communiquer (plus un agent optionnel) :
- Zabbix Server : Le cerveau. Il ne fait que traiter les données et lancer les alertes. Il n’a pas d’interface graphique.
- Zabbix Web (Frontend) : L’interface graphique (Nginx/PHP). C’est elle que nous afficherons dans le navigateur. Elle discute avec le serveur et la base.
- Database : Stocke la configuration et l’historique.
Prérequis
- Serveur Linux avec Docker Engine actif.
- Port 8081 libre (puisque le 80 est pris par GLPI).
- Avoir déjà déployé GLPI (pour la familiarité avec les commandes).
Configuration
Préparation de l’Environnement (Volumes)
Justification : Comme pour GLPI, nous préparons les dossiers pour stocker la base de données et les scripts d’alerte.
- Créez l’arborescence :
sudo mkdir -p /srv/docker/zabbix/database
sudo mkdir -p /srv/docker/zabbix/alertscripts
sudo mkdir -p /srv/docker/zabbix/mibs
- Permissions : Les images Zabbix utilisent l’utilisateur 1997. Appliquons les droits immédiatement pour éviter les crashs :
sudo chown -R 1997:1997 /srv/docker/zabbix

Figure 1 · Dossiers et permissions
Création de la Recette (Docker Compose)
Justification : Nous allons définir 4 services : la base de données, le serveur Zabbix, l’interface web et l’agent (pour que le serveur se surveille lui-même).
- Placez-vous dans le dossier :
cd /srv/docker/zabbix - Créez le fichier :
sudo nano docker-compose.yml - Copiez le contenu suivant (l’indentation YAML est stricte) :
services:
# --- 1. Base de données ---
zabbix-db:
image: mariadb:11.4
container_name: zabbix_db
environment:
- MARIADB_USER=zabbix
- MARIADB_PASSWORD=zabbix_pwd
- MARIADB_ROOT_PASSWORD=root_pwd_secure
- MARIADB_DATABASE=zabbix
volumes:
- ./database:/var/lib/mysql
restart: always
# Optimisation requise pour Zabbix 7.0
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_bin --transaction-isolation=READ-COMMITTED --log_bin_trust_function_creators=1
# --- 2. Serveur Zabbix (le cerveau) ---
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
container_name: zabbix_server
ports:
- "10051:10051"
environment:
- DB_SERVER_HOST=zabbix-db
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix_pwd
- MYSQL_DATABASE=zabbix
volumes:
- ./alertscripts:/usr/lib/zabbix/alertscripts
- ./mibs:/var/lib/zabbix/mibs
depends_on:
- zabbix-db
restart: always
# --- 3. Interface web (frontend) ---
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
container_name: zabbix_web
ports:
- "8081:8080" # Port 8081 externe vers 8080 interne
environment:
- DB_SERVER_HOST=zabbix-db
- MYSQL_USER=zabbix
- MYSQL_PASSWORD=zabbix_pwd
- MYSQL_DATABASE=zabbix
- ZBX_SERVER_HOST=zabbix-server
- PHP_TZ=Europe/Paris
depends_on:
- zabbix-server
restart: always
# --- 4. Agent Zabbix (auto-surveillance) ---
zabbix-agent:
image: zabbix/zabbix-agent:ubuntu-7.0-latest
container_name: zabbix_agent
environment:
- ZBX_HOSTNAME=Zabbix server
- ZBX_SERVER_HOST=zabbix-server
restart: always

Figure 2 · Fichier docker-compose.yml (début)

Figure 3 · Fichier docker-compose.yml (fin)
Lancement du Déploiement
- Lancez la stack :
sudo docker compose up -d

Figure 4 · Démarrage de la stack Zabbix
- Vérifiez les statuts :
sudo docker compose ps

Figure 5 · État des conteneurs
Le démarrage initial est plus long que celui de GLPI : le serveur Zabbix importe automatiquement tout le schéma SQL au premier lancement. Comptez 1 à 2 minutes.
Finalisation et Premier Accès
- Ouvrez votre navigateur :
http://IP_DU_SERVEUR:8081(attention à bien préciser:8081). - Vous arrivez directement sur la page de connexion (l’installation est automatique avec Docker, pas d’assistant « Suivant, Suivant » comme en manuel).

Figure 6 · Page de connexion Zabbix
- Identifiants par défaut :
- Utilisateur : Admin (avec A majuscule).
- Mot de passe : zabbix.
- Changez immédiatement le mot de passe du compte Admin.
Dépannage
Message « Database error » sur l’interface Web : Le serveur Zabbix n’a pas encore fini d’importer les tables. Attendez 60 secondes et rafraîchissez la page.
Conteneur zabbix_server qui redémarre en boucle : Vérifiez les logs : sudo docker compose logs zabbix-server. Souvent, c’est un problème de mémoire (RAM insuffisante sur la VM) ou de permissions sur les dossiers (étape « Préparation de l’Environnement » oubliée).
Conseils et Bonnes Pratiques
Par défaut, l’agent Zabbix installé ci-dessus est enfermé dans son conteneur. Il ne voit que son « petit monde » et pas l’utilisation réelle du CPU/RAM de votre serveur Ubuntu.
Pour surveiller le vrai serveur physique, modifiez le service zabbix-agent dans le fichier docker-compose.yml pour lui donner accès au système :
zabbix-agent:
image: zabbix/zabbix-agent:ubuntu-7.0-latest
# ... lignes existantes ...
privileged: true
network_mode: host # L'agent utilise directement le réseau du serveur
volumes:
- /:/hostfs:ro # On monte tout le disque du serveur en lecture seule
En network_mode: host, l’agent ne peut plus joindre le serveur par le nom zabbix-server : renseignez ZBX_SERVER_HOST avec l’IP du serveur Docker.
Procédures Liées
- Installation de Zabbix (Installation classique sans conteneur)
- Installation de Docker et Portainer sur Ubuntu (Socle Docker et Portainer)
- Centralisation des Journaux avec rsyslog (Centralisation des journaux en complément)
- Supervision avec l’Analyseur de Performances et le Transfert d’Événements (Supervision native côté Windows)
