Contexte et besoins
Dans le cadre de mon alternance, j’installe une instance GLPI sur le lab interne pour donner à l’équipe un outil unique afin de tenir l’inventaire des postes et serveurs du périmètre administré et de tracer les tickets d’intervention quand on rejoue des scénarios de support ou qu’on intervient sur les machines de test.
L’objectif de cette intervention est de poser une installation simple et fonctionnelle : poser les paquets, configurer la base, déployer GLPI, faire passer l’assistant Web et obtenir un tableau de bord opérationnel. Les sujets de durcissement (HTTPS, séparation des dossiers, restrictions d’accès, politique de mot de passe) feront l’objet d’une intervention dédiée.
Rappel théorique sur GLPI
GLPI (Gestionnaire Libre de Parc Informatique) est une application web PHP open source maintenue par l’association GLPI Project et la société Teclib. Elle est largement utilisée en PME et en collectivités pour :
- la gestion de parc : matériels, logiciels, contrats, licences ;
- la gestion d’incidents et de demandes : tickets, SLA, files, suivi ;
- la gestion d’actifs : cycle de vie, affectation à des utilisateurs ou à des entités ;
- la base de connaissances, le planning, et tout un écosystème de plugins.
Architecture applicative
GLPI est une application PHP classique. Le code source vit dans /var/www/, la base de données dans MariaDB (ou MySQL), et un serveur web Apache ou Nginx sert le front. Les sessions utilisateurs sont stockées en base, le moteur de templates est natif PHP. Pas de framework JS lourd : l’interface est rendue côté serveur.
À partir de la version 11, GLPI expose uniquement le sous-dossier public/ comme DocumentRoot du VirtualHost. Le reste du code source n’est plus directement accessible par URL — c’est un changement important par rapport aux versions antérieures.
Prérequis GLPI 11
| Composant | Version minimale exigée |
|---|---|
| PHP | 8.1 (recommandé 8.3) |
| MariaDB / MySQL | 10.5 / 8.0 |
| Apache / Nginx | toute version récente |
| Extensions PHP | mysqli, curl, gd, intl, mbstring, zip, xml, bz2, ldap |
Topologie
GLPI tourne dans une VM dédiée du lab interne, derrière la passerelle du sous-réseau de service.
| Équipement | Rôle | Adresse |
|---|---|---|
| Passerelle du lab | Routeur / DHCP du sous-réseau | 192.168.10.254/24 |
VM glpi.lab.interne | Apache 2.4 + PHP 8.3 + MariaDB + GLPI 11.0.6 | 192.168.10.253/24 |
| Poste d’administration | Navigateur d’accès à GLPI | DHCP (192.168.10.0/24) |
Prérequis
- VM Ubuntu Server 25.04, 2 vCPU, 4 Go RAM, 20 Go disque, IP statique
192.168.10.253. - Accès SSH avec un compte
sudo. - Entrée dans le DNS interne ou dans le
/etc/hostsdu poste d’admin :192.168.10.253 glpi.lab.interne. - Connexion sortante autorisée vers les dépôts Ubuntu et
github.compour le téléchargement de l’archive GLPI.
Installation des paquets
# Mise à jour préalable du système
apt update && apt upgrade -y
# Stack web : Apache + PHP + MariaDB + extensions exigées par GLPI 11
apt install -y apache2 mariadb-server \
php php-mysql php-curl php-gd php-intl php-mbstring \
php-zip php-bz2 php-xml php-ldap php-apcu php-bcmath \
php-cli php-common php-soap libapache2-mod-php
# Outils pour récupérer et extraire l'archive GLPI
apt install -y wget tarExplications ligne par ligne :
apache2: serveur web. Sur Ubuntu 25.04, Apache 2.4.x.mariadb-server: SGBD par défaut sous Debian/Ubuntu. Compatible avec les pilotesmysqlide PHP.php php-*: PHP 8.3 et toutes les extensions exigées par GLPI 11 (la matrice est dans la doc officielle). Une extension manquante = écran blanc etphp-errors.logrempli au premier accès.libapache2-mod-php: module Apache qui exécute PHP en process Apache. Plus simple à configurer que PHP-FPM pour ce déploiement.
Configuration de la base MariaDB
Initialisation
# Importe les définitions de fuseaux horaires de l'OS dans la base mysql
mysql_tzinfo_to_sql /usr/share/zoneinfo | mariadb mysqlmysql_tzinfo_to_sql importe les fuseaux horaires de l’OS dans la base mysql. C’est requis par GLPI pour gérer correctement les dates et permettre le timezone par utilisateur.
Création de la base et de l’utilisateur GLPI
mariadb -u root-- Base dédiée à GLPI, en UTF-8 sur 4 octets
CREATE DATABASE glpi
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- Compte applicatif distinct de root
CREATE USER 'glpi'@'localhost'
IDENTIFIED BY 'MotDePasseGlpi';
-- Privilèges sur la base GLPI uniquement
GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';
-- Lecture sur la table des fuseaux pour que GLPI les propose dans l'UI
GRANT SELECT ON `mysql`.`time_zone_name` TO 'glpi'@'localhost';
FLUSH PRIVILEGES;
EXIT;Explications ligne par ligne :
utf8mb4: jeu de caractères qui supporte toute la plage UTF-8 sur 4 octets (y compris les emojis). C’est le standard moderne ; GLPI ne fonctionne plus avec l’ancienutf8(alias historique d’utf8mb3).CREATE USER ... IDENTIFIED BY: crée un compte applicatif distinct deroot. Si l’application est compromise, l’attaquant ne récupère qu’un compte qui ne voit que la baseglpi.GRANT SELECT ON mysql.time_zone_name: nécessaire après lemysql_tzinfo_to_sqlpour que GLPI puisse afficher la liste des fuseaux dans son interface (sinon le menu apparaît vide).
Téléchargement et déploiement de GLPI
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/11.0.6/glpi-11.0.6.tgz
# Extraction dans /var/www/html
tar -xzf glpi-11.0.6.tgz -C /var/www/html/
# Vérification
ls /var/www/html/glpiExplications ligne par ligne :
wget https://github.com/glpi-project/glpi/releases/...: récupère l’archive officielle publiée par le GLPI Project.tar -xzf: extrait l’archive (-xextract,-zgzip,-ffichier). Le dossier/var/www/html/glpiest créé.
Permissions
# Apache doit pouvoir lire et écrire dans le dossier GLPI
chown -R www-data:www-data /var/www/html/glpiConfiguration d’Apache
VirtualHost dédié
cat > /etc/apache2/sites-available/glpi.conf <<'EOF'
<VirtualHost *:80>
ServerName glpi.lab.interne
DocumentRoot /var/www/html/glpi/public
<Directory /var/www/html/glpi/public>
Require all granted
AllowOverride None
Options FollowSymLinks
RewriteEngine On
# Préserver l'en-tête Authorization (API REST, CalDAV)
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Front controller : tout ce qui n'est pas un fichier existant
# est routé vers index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
ErrorLog ${APACHE_LOG_DIR}/glpi_error.log
CustomLog ${APACHE_LOG_DIR}/glpi_access.log combined
</VirtualHost>
EOFExplications ligne par ligne :
DocumentRoot /var/www/html/glpi/public: GLPI 11 expose uniquement le sous-dossierpublic/. C’est le comportement par défaut depuis la version 11.RewriteRule .* - [E=HTTP_AUTHORIZATION:...]: conserve l’en-têteAuthorizationcôté PHP. Indispensable pour l’API REST de GLPI et pour CalDAV.RewriteCond %{REQUEST_FILENAME} !-f+RewriteRule ^(.*)$ index.php: front controller pattern : tout ce qui n’est pas un fichier statique existant est routé versindex.php, qui dispatche la requête en interne.
Activation
a2dissite 000-default.conf # On retire le site par défaut
a2enmod rewrite # On active le module mod_rewrite
a2ensite glpi.conf # On active le VirtualHost GLPI
systemctl restart apache2Ajustement des limites PHP
sed -i \
-e 's/^upload_max_filesize.*/upload_max_filesize = 20M/' \
-e 's/^post_max_size.*/post_max_size = 20M/' \
-e 's/^memory_limit.*/memory_limit = 256M/' \
-e 's/^max_execution_time.*/max_execution_time = 60/' \
-e 's/^;date.timezone.*/date.timezone = Europe\/Paris/' \
/etc/php/8.3/apache2/php.ini
systemctl restart apache2Important
Le chemin /etc/php/8.3/apache2/php.ini dépend de la version de PHP installée. Je vérifie avec php -v avant de copier-coller, sinon sed modifie le mauvais fichier sans le dire.
Assistant Web GLPI
J’ouvre http://glpi.lab.interne dans le navigateur du poste d’administration. L’assistant d’installation se lance.

Je sélectionne Français et clique sur OK.

GLPI est sous licence GNU GPLv3+. Je coche pour accepter et continuer.

Je choisis Installation (nouvelle base).

GLPI vérifie :
- la version de PHP ;
- la présence de chaque extension nécessaire (
mysqli,gd,mbstring…) ; - les permissions des dossiers de configuration, de données et de logs ;
- la disponibilité des fonctions sensibles (
exec,unlink…).
Si une seule case est rouge, l’assistant refuse de continuer. Je règle le problème (paquet manquant, droit de fichier) avant de cliquer sur Continuer.

Serveur SQL : localhost
Utilisateur : glpi
Mot de passe : (celui défini dans MariaDB plus haut)
Je sélectionne la base glpi créée plus haut.

GLPI crée environ 200 tables et y insère ses données initiales (référentiels, types d’objets, comptes par défaut). Compter quelques secondes.

Je décoche tout : je ne veux pas remonter de télémétrie depuis l’environnement du lab.

L’assistant me rappelle les comptes par défaut :
glpi / glpi (super-administrateur)
post-only / postonly (interface limitée à la création de tickets)
tech / tech (technicien support)
normal / normal (utilisateur final)
Je me connecte avec glpi/glpi et je tombe sur le tableau de bord. L’instance est opérationnelle.
Vérifications
# Apache et MariaDB up
systemctl status apache2 mariadb --no-pager
# Pas d'erreurs PHP au premier accès
tail -50 /var/log/apache2/glpi_error.logSortie attendue :
- les deux services
active (running); - aucun
PHP Fatal errordans les logs.
Tests
Deux scénarios pour valider la mise en service :
- Création d’un ticket : je me connecte avec
glpi/glpi, j’ouvre un ticket fictif sur un poste de test, je vérifie qu’il apparaît dans la file et que la date de création est cohérente avec le fuseau Europe/Paris. - Inventaire d’un actif : je crée un ordinateur dans Parc → Ordinateurs, je l’affecte à mon compte, je vérifie que l’historique trace bien la création et l’affectation.
Problèmes rencontrés et solutions
| Symptôme | Cause probable | Correction |
|---|---|---|
| Page blanche au premier accès | Extension PHP manquante (souvent mysqli ou gd) | Installer l’extension, redémarrer Apache, vérifier avec php -m |
Failed to connect to database | Mauvais mot de passe ou utilisateur sans privilèges sur glpi | Refaire le GRANT ALL PRIVILEGES ON glpi.* côté MariaDB |
Timezone database not loaded | mysql_tzinfo_to_sql non exécuté | L’exécuter, puis donner GRANT SELECT ON mysql.time_zone_name à l’utilisateur GLPI |
403 Forbidden sur /glpi/ | DocumentRoot pas sur public/ ou Require all granted manquant | Corriger le VirtualHost, recharger Apache avec systemctl reload apache2 |
Compétences du bloc 1 mobilisées
| Compétence officielle | Mobilisation concrète |
|---|---|
| Mettre à disposition aux utilisateurs un service informatique | Service web GLPI accessible aux techniciens du lab via http://glpi.lab.interne. |
| Installer et configurer des éléments d’infrastructure | Stack Apache 2.4 + PHP 8.3 + MariaDB sur Ubuntu Server 25.04, déploiement de GLPI 11.0.6. |
| Gérer le patrimoine informatique | Mise en place de l’outil de référence pour l’inventaire des postes et serveurs du périmètre. |
| Réaliser les tests d’intégration et d’acceptation d’un service | Tests de création de ticket et d’actif après installation. |
Bilan
L’instance GLPI 11.0.6 est en ligne sur le lab interne. L’équipe a un outil pour suivre son parc et tracer ses tickets, l’installation est posée proprement et fonctionne. Trois enseignements :
- la stack Apache + MariaDB + PHP se monte rapidement quand on prépare bien la liste des extensions PHP en amont — c’est la première cause de page blanche au premier accès ;
- l’usage du sous-dossier
public/commeDocumentRootest un changement majeur de GLPI 11 par rapport aux versions antérieures, à bien respecter ; - l’assistant Web valide point par point les prérequis et donne des messages d’erreur clairs, ce qui rend le diagnostic facile en cas de souci.
Pour la suite, je veux brancher l’agent d’inventaire (glpi-agent) sur les VM du lab pour qu’elles remontent automatiquement, configurer l’authentification LDAP vers l’annuaire interne, et mettre en place un VirtualHost HTTPS ainsi que les durcissements applicatifs (changement des comptes par défaut, restriction d’accès au LAN du lab) avant d’ouvrir l’instance plus largement.
Sources
- GLPI Documentation — Installation guide , GLPI Project.
- GLPI Project — INSTALL.md (branche 11.0) , GLPI Project.
- GLPI Project — Releases on GitHub , GLPI Project.
- Apache HTTPD — mod_rewrite , Apache Software Foundation.
- MariaDB Knowledge Base — CREATE USER , MariaDB Foundation.