LibreNMS : superviser son réseau avec Docker Compose ou en natif sur Ubuntu Server
Un switch qui sature Ă 3 h du matin, un lien fibre qui bascule en boucle, un onduleur qui ne le dit Ă personne⊠la supervision, c’est l’art d’apprendre les mauvaises nouvelles avant les utilisateurs. LibreNMS est une plateforme de supervision rĂ©seau libre (GPL-3) qui dĂ©couvre vos Ă©quipements en SNMP, trace des graphes, alerte et cartographie votre rĂ©seau. Ce guide vous emmĂšne de zĂ©ro Ă une instance reproductible, cloisonnĂ©e et maintenable, avec deux chemins au choix : Docker Compose (rapide, isolĂ©) ou installation native sur Ubuntu Server (contrĂŽle fin de l’OS).
Public et durĂ©e : administrateurs rĂ©seau / systĂšme Ă l’aise avec un terminal Linux. Comptez 1 h 30 pour Docker Compose, 2 h 30 pour l’installation native, hors intĂ©gration des Ă©quipements. Les adresses, noms et secrets sont des exemples Ă remplacer. Testez d’abord en prĂ©production.
Ce que vous allez construire
LibreNMS vit dans un VLAN de supervision dĂ©diĂ©. Il est joignable en HTTPS depuis le VLAN d’administration, et c’est lui qui initie les sondes (SNMPv3, ICMP) vers les Ă©quipements autorisĂ©s. Aucun accĂšs utilisateur direct aux Ă©quipements n’est induit, et les flux vers la zone OT sont filtrĂ©s au strict nĂ©cessaire.
Docker Compose ou installation native ?
| CritĂšre | Docker Compose | Installation native |
|---|---|---|
| Mise en route | Rapide : une pile versionnée (LibreNMS, MariaDB, Redis, dispatcher) | Plus longue : Nginx, PHP-FPM, MariaDB, RRDtool, Net-SNMP à installer un par un |
| Isolation | Forte : rien n’est installĂ© sur l’OS hĂŽte | Faible : tout vit sur l’OS |
| Mises Ă jour | docker compose pull puis up -d |
Mise Ă jour automatique quotidienne par LibreNMS (daily.sh) + paquets de l’OS |
| RĂ©glages fins | Via variables d’environnement et fichiers montĂ©s | ContrĂŽle total (PHP, SNMP, cron, systemd) |
| Surface de maintenance | Réduite, mais il faut protéger .env et les volumes |
Plus large : plus de composants Ă suivre |
| RecommandĂ© pour | Labo, PME, premiĂšre mise en production | Ăquipes qui veulent maĂźtriser chaque brique |
SĂ©curitĂ© et NIS2 : appliquez le principe du moindre privilĂšge, la traçabilitĂ© des actions d’administration, la gestion des vulnĂ©rabilitĂ©s, une restauration testĂ©e et la sĂ©paration IT/OT. SNMPv2c reste utile pour un diagnostic ponctuel, mais SNMPv3 authPriv (authentification + chiffrement) est le choix de production.
1. Architecture et prérequis
Dimensionnement
| Ressource | Labo | Production de départ |
|---|---|---|
| CPU / RAM | 2 vCPU / 4 Go | 4 vCPU / 8 Go |
| Disque | 40 Go | 100 Ă 200 Go, sur SSD (les fichiers RRD des graphes font beaucoup d’Ă©critures) |
| Réseau | 1 Gbit/s | IP fixe + DNS + NTP |
| PĂ©rimĂštre | Jusqu’Ă 25 Ă©quipements | Environ 100 Ă©quipements ; ajustez selon le nombre de ports et la rĂ©tention |
Plan d’adressage d’exemple
Hostname : librenms01
IP : 10.20.50.20/24
Gateway : 10.20.50.1
DNS : 10.20.10.10
FQDN : librenms01.infra.local
Timezone : Europe/Paris
Flux réseau à autoriser
| Flux | Source | Destination | Port / protocole |
|---|---|---|---|
| Administration | VLAN Admin | LibreNMS | TCP 443 (TCP 22 si nécessaire) |
| Polling | LibreNMS | Ăquipements IT/OT autorisĂ©s | UDP 161 SNMPv3 ; ICMP |
| Traps (optionnel) | Ăquipements | LibreNMS | UDP 162 |
| Alertes | LibreNMS | Relais SMTP | TCP 587 ou 465 |
| Services | LibreNMS | DNS / NTP | UDP/TCP 53 ; UDP 123 |
Un NTP fiable n’est pas un luxe : SNMPv3 tolĂšre mal les horloges dĂ©synchronisĂ©es, et un graphe datĂ© de travers ne sert Ă rien.
2. Déploiement via Docker Compose
Cette option regroupe LibreNMS, MariaDB, Redis, le dispatcher (polling) et un relais SMTP (msmtpd) dans une pile versionnĂ©e, Ă partir de l’exemple officiel du projet librenms/docker. Elle simplifie l’isolation, la mise Ă jour et la restauration, Ă condition de protĂ©ger le fichier .env et les volumes persistants.
2.1 Préparer Ubuntu et Docker
# Mise Ă jour de l'OS
sudo apt update
sudo apt full-upgrade -y
# Outils de base
sudo apt install -y ca-certificates curl wget unzip nano openssl
# Fuseau horaire
sudo timedatectl set-timezone Europe/Paris
# Docker et Compose v2 depuis les dépÎts Ubuntu
sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
# Autoriser le compte courant, puis ouvrir une NOUVELLE session
sudo usermod -aG docker "$USER"
docker --version
docker compose version
2.2 RĂ©cupĂ©rer l’exemple officiel et prĂ©parer les secrets
sudo mkdir -p /opt/librenms-docker
sudo chown "$USER":"$USER" /opt/librenms-docker
cd /opt/librenms-docker
wget https://github.com/librenms/docker/archive/refs/heads/master.zip
unzip master.zip
cp -a docker-master/examples/compose/. .
# Vérifier les fichiers présents : compose.yml, .env, librenms.env, msmtpd.env
ls -la
# Générer un secret long ; le conserver dans un coffre de mots de passe
openssl rand -base64 36
nano .env
chmod 600 .env
Dans .env, dĂ©finissez au minimum TZ=Europe/Paris, MYSQL_DATABASE=librenms, MYSQL_USER=librenms et un MYSQL_PASSWORD alĂ©atoire (remplacez la valeur d’exemple livrĂ©e avec le dĂ©pĂŽt). PUID/PGID doivent correspondre Ă l’utilisateur propriĂ©taire du dossier (id -u, id -g). Le relais mail se configure dans msmtpd.env.
Ne dĂ©posez jamais .env dans un dĂ©pĂŽt public, ni dans un ticket, ni dans une capture d’Ă©cran. C’est la clĂ© de votre base de donnĂ©es.
2.3 Valider puis démarrer la pile
# Vérification de la syntaxe et des variables Compose
docker compose config
# Télécharger les images avant le démarrage
docker compose pull
# Démarrer en arriÚre-plan
docker compose up -d
# Vérifier l'état des services
docker compose ps
# Suivre les journaux pendant le premier démarrage (Ctrl+C pour sortir)
docker compose logs -f

docker compose up -d, tous les services doivent ĂȘtre Up. Le port 8000 n’est publiĂ© que par le conteneur librenms. (Capture console reconstituĂ©e Ă partir des commandes du tutoriel â sortie d’exemple.)RepĂšre visuel : la pile de services
| Service | RÎle | Donnée à préserver |
|---|---|---|
librenms |
Interface web, API et application | Configuration et fichiers applicatifs (./librenms) |
db (MariaDB) |
Base de données | Dump SQL (./db) |
redis |
Cache et sessions | RecrĂ©able ; ce n’est pas une sauvegarde |
dispatcher |
Polling périodique | Configuration de la pile |
msmtpd |
Relais SMTP pour les alertes | msmtpd.env |
syslogng / snmptrapd |
Optionnels : journaux et traps | Journaux si activés |
2.4 PremiĂšre connexion et validation
Ouvrez http://10.20.50.20:8000 et crĂ©ez le compte administrateur. En production, publiez l’interface derriĂšre un reverse proxy HTTPS et limitez l’accĂšs au VLAN Admin.

# Validation applicative depuis le conteneur
docker compose exec --user librenms librenms php validate.php
# ContrÎles complémentaires
docker compose ps
docker compose logs --tail=100 librenms
docker compose logs --tail=100 db

validate.php : connexion MariaDB valide, schĂ©ma correct, aucun [FAIL]. Un [WARN] sur IPv6 est normal si vous ne supervisez pas d’Ă©quipements IPv6. (Capture console reconstituĂ©e d’aprĂšs la sortie documentĂ©e par le projet.)
3. Installation native sur Ubuntu Server
L’installation native place Nginx, PHP-FPM, MariaDB, RRDtool, Net-SNMP et les tĂąches LibreNMS directement sur l’OS. Elle facilite certains rĂ©glages systĂšme mais augmente la surface de maintenance. Les commandes ci-dessous suivent la procĂ©dure officielle (onglet Ubuntu 24.04 / NGINX) et s’exĂ©cutent en root.
Version de PHP : Ubuntu 24.04 ne fournit pas une version de PHP assez rĂ©cente pour LibreNMS, d’oĂč le dĂ©pĂŽt tiers Sury. Au moment de la rĂ©daction, la documentation officielle indique PHP 8.5 recommandĂ© (8.4 minimum). VĂ©rifiez la version attendue sur docs.librenms.org avant de figer les commandes : adaptez 8.5 partout ci-dessous si nĂ©cessaire.
3.1 Paquets et PHP
sudo -i
apt update
apt full-upgrade -y
apt install -y lsb-release ca-certificates curl
# DépÎt Sury (PHP récent pour Ubuntu 24.04)
curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb
dpkg -i /tmp/debsuryorg-archive-keyring.deb
echo "deb [signed-by=/usr/share/keyrings/debsuryorg-archive-keyring.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update
apt install -y acl curl fping git mariadb-client mariadb-server mtr-tiny nginx-full nmap \
php8.5-cli php8.5-curl php8.5-fpm php8.5-gd php8.5-gmp php8.5-mbstring php8.5-mysql \
php8.5-snmp php8.5-xml php8.5-zip python3-command-runner python3-dotenv python3-pip \
python3-psutil python3-pymysql python3-redis python3-setuptools python3-systemd \
rrdtool snmp snmpd traceroute unzip whois
php -v
3.2 Utilisateur, code et permissions
useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
cd /opt
git clone https://github.com/librenms/librenms.git
chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache /opt/librenms/storage
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache /opt/librenms/storage
# Dépendances PHP, en tant qu'utilisateur librenms
su - librenms
./scripts/composer_wrapper.php install --no-dev
exit
DerriĂšre un proxy d’entreprise, le composer wrapper peut Ă©chouer : installez alors Composer manuellement (wget https://getcomposer.org/composer-stable.phar, puis dĂ©placez-le dans /usr/bin/composer et rendez-le exĂ©cutable).
3.3 Fuseau horaire, MariaDB et PHP-FPM
# Fuseau horaire : dans les deux php.ini, régler date.timezone = Europe/Paris
nano /etc/php/8.5/fpm/php.ini
nano /etc/php/8.5/cli/php.ini
timedatectl set-timezone Europe/Paris
# MariaDB : ajouter sous [mysqld] dans /etc/mysql/mariadb.conf.d/50-server.cnf
# innodb_file_per_table=1
# lower_case_table_names=0
nano /etc/mysql/mariadb.conf.d/50-server.cnf
systemctl enable mariadb
systemctl restart mariadb
mysql -u root
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'MOT_DE_PASSE_COMPLEXE';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
exit
# PHP-FPM : un pool dédié
cp /etc/php/8.5/fpm/pool.d/www.conf /etc/php/8.5/fpm/pool.d/librenms.conf
nano /etc/php/8.5/fpm/pool.d/librenms.conf
# [librenms] (Ă la place de [www])
# user = librenms
# group = librenms
# listen = /run/php-fpm-librenms.sock
systemctl restart php8.5-fpm
3.4 Nginx, ligne de commande lnms et tùches planifiées
nano /etc/nginx/conf.d/librenms.conf
server {
listen 80;
server_name librenms01.infra.local;
root /opt/librenms/html;
index index.php;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/run/php-fpm-librenms.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi.conf;
}
location ~ /\.(?!well-known).* { deny all; }
}
# Désactiver le site par défaut, tester puis recharger
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl restart nginx
# Commande lnms + complétion
ln -s /opt/librenms/lnms /usr/bin/lnms
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
# Cron, scheduler systemd et rotation des journaux
cp /opt/librenms/dist/librenms.cron /etc/cron.d/librenms
cp /opt/librenms/dist/librenms-scheduler.service /opt/librenms/dist/librenms-scheduler.timer /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now librenms-scheduler.timer
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
Terminez l’assistant sur http://10.20.50.20/install (base de donnĂ©es, compte administrateur). Si l’assistant vous demande de crĂ©er config.php, copiez le contenu affichĂ© puis chown librenms:librenms /opt/librenms/config.php. VĂ©rifiez ensuite la configuration gĂ©nĂ©rĂ©e, les droits et l’Ă©tat du timer : systemctl status librenms-scheduler.timer, puis sudo -u librenms php /opt/librenms/validate.php.
4. SNMPv3 Cisco et ajout d’Ă©quipements
RĂšgle d’or : testez le SNMP depuis le serveur LibreNMS avant de soupçonner l’application. L’identitĂ© SNMPv3, les algorithmes et les secrets doivent correspondre exactement entre l’Ă©quipement et LibreNMS.
4.1 Configuration Cisco IOS-XE de référence
configure terminal
ip access-list standard ACL-SNMP-LIBRENMS
permit host 10.20.50.20
deny any log
exit
snmp-server view LIBRENMS-VIEW iso included
snmp-server group LIBRENMS-GRP v3 priv read LIBRENMS-VIEW access ACL-SNMP-LIBRENMS
snmp-server user librenms LIBRENMS-GRP v3 auth sha AUTHENTICATION_SECRET priv aes 128 CHIFFREMENT_SECRET
end
write memory
En production : conservez les secrets dans un coffre, limitez la vue SNMP au besoin rĂ©el si votre politique l’impose, et vĂ©rifiez que l’ACL est appliquĂ©e sur l’interface ou le VRF appropriĂ©. Notez que snmp-server user n’apparaĂźt pas dans show running-config : c’est normal, utilisez show snmp user.
4.2 Tester SNMPv3 depuis LibreNMS
snmpwalk -v3 -l authPriv -u librenms \
-a SHA -A 'AUTHENTICATION_SECRET' \
-x AES -X 'CHIFFREMENT_SECRET' \
10.20.10.21 1.3.6.1.2.1.1

sysDescr, sysObjectID, sysUpTime et sysName. Un timeout indique presque toujours un problĂšme de routage, d’ACL, d’UDP 161, de VRF, de secret ou d’horloge. (Capture console reconstituĂ©e â sortie d’exemple.)4.3 Ajouter l’Ă©quipement dans LibreNMS
Chemin : Devices > Add Device. Renseignez :
| Champ | Valeur d’exemple |
|---|---|
| Hostname / IP | 10.20.10.21 |
| Version SNMP | v3 |
| Niveau | authPriv |
| Utilisateur | librenms |
| Auth / Priv | SHA / AES |
| Port | 161/UDP |

v2c avec une communautĂ© : choisissez v3 dans la liste pour faire apparaĂźtre les champs utilisateur, niveau authPriv, algorithmes et secrets. Laissez Force add sur OFF : LibreNMS vĂ©rifie d’abord la joignabilitĂ© ping/SNMP. Capture issue de la documentation officielle LibreNMS â licence GPL-3.0AprĂšs l’ajout, attendez le premier polling (5 minutes par dĂ©faut), puis vĂ©rifiez l’Ă©tat de disponibilitĂ©, les ports, les graphes et les alertes.
5. Exploitation : validation, sauvegarde, mise Ă jour
5.1 Checklist de validation
- DNS / NTP â rĂ©solution du FQDN et heure synchronisĂ©e (
timedatectl) - Services â
docker compose psousystemctl --failed - Web â connexion HTTPS depuis le VLAN Admin uniquement
- Base â
validate.phpsans erreur - SNMP â
snmpwalkv3 rĂ©ussi depuis LibreNMS - Polling â derniĂšre collecte rĂ©cente sur chaque Ă©quipement
- Alertes â test d’une rĂšgle et rĂ©ception d’un e-mail via le relais SMTP
- Restauration â dump restaurĂ© dans un environnement isolĂ©, au moins une fois

5.2 Sauvegarde (Docker)
sudo mkdir -p /backup/librenms
cd /opt/librenms-docker
# Dump SQL (adapter le nom du conteneur si docker compose ps affiche autre chose)
docker exec librenms_db sh -c 'mariadb-dump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE"' \
> /backup/librenms/librenms-$(date +%F).sql
# Données persistantes, configuration et RRD
sudo tar -czf /backup/librenms/librenms-data-$(date +%F).tar.gz /opt/librenms-docker
# Vérifier taille et présence des archives
ls -lh /backup/librenms
Chiffrez les sauvegardes au repos, copiez-les vers un emplacement sĂ©parĂ©, appliquez une rĂ©tention et testez rĂ©guliĂšrement une restauration. Les RRD sont volumineux mais prĂ©cieux (tout l’historique des graphes) ; Redis est recrĂ©able. Relisez au besoin la rĂšgle 3-2-1.
5.3 Mise Ă jour (Docker)
cd /opt/librenms-docker
# 1. Vérifier qu'une sauvegarde récente existe
# 2. Récupérer les nouvelles images
docker compose pull
# 3. Recréer les services
docker compose up -d
# 4. Vérifier l'état et la validation
docker compose ps
docker compose exec --user librenms librenms php validate.php
Ăvitez docker compose down hors fenĂȘtre de maintenance et sans sauvegarde vĂ©rifiĂ©e. Lisez les notes de version et validez d’abord sur une instance de test lorsque la version majeure change.
5.4 Mise Ă jour (native)
Par dĂ©faut, LibreNMS se met Ă jour tout seul chaque nuit via le script daily.sh lancĂ© par le cron installĂ© Ă l’Ă©tape 3.4 (dĂ©sactivable avec lnms config:set update false). Pour forcer une mise Ă jour manuelle :
su - librenms
cd /opt/librenms
./daily.sh
php validate.php
exit
N’oubliez pas les paquets de l’OS (apt update && apt full-upgrade) et redĂ©marrez php8.5-fpm et nginx aprĂšs une mise Ă jour de PHP.
6. Dépannage rapide
| SymptÎme | Vérifications prioritaires |
|---|---|
| Page web inaccessible | IP, DNS, port publié, nginx -t ou docker compose ps, pare-feu local |
| Timeout SNMP | Route, ACL, UDP 161, VRF, IP source, secrets et heure NTP |
| Polling absent | Dispatcher actif, timer/cron, logs LibreNMS, taille de file et charge CPU |
| Erreur base | Ătat MariaDB, variables .env, droits, espace disque, journaux db |
| Graphes vides | RRD accessibles en écriture, polling exécuté, fuseau horaire cohérent |
| Alertes non reçues | Configuration SMTP, relais, DNS, journaux et test vers une boßte de test |
| Disque plein | du -xh, rétention des logs, RRD, sauvegardes externes et rotation |
Commandes de diagnostic
# Docker
docker compose ps
docker compose logs --tail=200 librenms
docker compose logs --tail=200 dispatcher
docker system df
df -h
# Natif
systemctl --failed
systemctl status nginx php8.5-fpm mariadb librenms-scheduler.timer snmpd
journalctl -u librenms-scheduler.timer --since today
tail -n 100 /opt/librenms/logs/librenms.log
df -h
# Réseau et SNMP
ip route
ss -lntup
snmpwalk -v3 -l authPriv -u librenms -a SHA -A 'AUTH' -x AES -X 'PRIV' 10.20.10.21 1.3.6.1.2.1.1

Ne partagez jamais les secrets dans la sortie d’un ticket : masquez mots de passe, jetons et chaĂźnes de communautĂ© avant tout partage (y compris dans les captures de debug ci-dessus).
7. Checklist de mise en production
- RĂ©seau â VLAN supervision dĂ©diĂ© ; ACL par Ă©quipement ; aucun any/any IT-OT
- IdentitĂ© â compte admin nominatif, MFA ou contrĂŽle Ă©quivalent si disponible, droits minimaux
- Chiffrement â HTTPS ; SNMPv3 authPriv ; secrets dans un coffre
- Journalisation â logs applicatifs et d’administration conservĂ©s et surveillĂ©s
- RĂ©silience â sauvegarde SQL + donnĂ©es + configuration ; copie sĂ©parĂ©e ; restauration testĂ©e
- Maintenance â fenĂȘtre de mise Ă jour, notes de version, procĂ©dure de retour arriĂšre
- ConformitĂ© â inventaire, analyse de risque, gestion des vulnĂ©rabilitĂ©s et preuves de contrĂŽle, en cohĂ©rence avec NIS2

Sources
- Documentation officielle â Install LibreNMS (versions de PHP, paquets, permissions, Nginx, scheduler)
- DĂ©pĂŽt librenms/docker â image officielle, exemple Compose, commande de validation
- Documentation officielle â Updating
- Documentation officielle â SNMP Configuration Examples