Installation de GLPI

Installation de GLPI

Installation d'une instance GLPI 11.0.6 sur le lab interne ANSSI pour gérer l'inventaire et les tickets de l'équipe : VM Ubuntu Server 25.04, stack Apache + MariaDB + PHP 8.3, déploiement de l'archive officielle, parcours de l'assistant Web.
Publié le
Statut
Terminé

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

ComposantVersion minimale exigée
PHP8.1 (recommandé 8.3)
MariaDB / MySQL10.5 / 8.0
Apache / Nginxtoute version récente
Extensions PHPmysqli, 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.

ÉquipementRôleAdresse
Passerelle du labRouteur / DHCP du sous-réseau192.168.10.254/24
VM glpi.lab.interneApache 2.4 + PHP 8.3 + MariaDB + GLPI 11.0.6192.168.10.253/24
Poste d’administrationNavigateur d’accès à GLPIDHCP (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/hosts du poste d’admin : 192.168.10.253 glpi.lab.interne.
  • Connexion sortante autorisée vers les dépôts Ubuntu et github.com pour le téléchargement de l’archive GLPI.

Installation des paquets

BASH
# 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 tar
Cliquez pour développer et voir plus

Explications 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 pilotes mysqli de 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 et php-errors.log rempli 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

BASH
# Importe les définitions de fuseaux horaires de l'OS dans la base mysql
mysql_tzinfo_to_sql /usr/share/zoneinfo | mariadb mysql
Cliquez pour développer et voir plus

mysql_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

BASH
mariadb -u root
Cliquez pour développer et voir plus
SQL
-- 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;
Cliquez pour développer et voir plus

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’ancien utf8 (alias historique d’utf8mb3).
  • CREATE USER ... IDENTIFIED BY : crée un compte applicatif distinct de root. Si l’application est compromise, l’attaquant ne récupère qu’un compte qui ne voit que la base glpi.
  • GRANT SELECT ON mysql.time_zone_name : nécessaire après le mysql_tzinfo_to_sql pour 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

BASH
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/glpi
Cliquez pour développer et voir plus

Explications 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 (-x extract, -z gzip, -f fichier). Le dossier /var/www/html/glpi est créé.

Permissions

BASH
# Apache doit pouvoir lire et écrire dans le dossier GLPI
chown -R www-data:www-data /var/www/html/glpi
Cliquez pour développer et voir plus

Configuration d’Apache

VirtualHost dédié

BASH
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>
EOF
Cliquez pour développer et voir plus

Explications ligne par ligne :

  • DocumentRoot /var/www/html/glpi/public : GLPI 11 expose uniquement le sous-dossier public/. C’est le comportement par défaut depuis la version 11.
  • RewriteRule .* - [E=HTTP_AUTHORIZATION:...] : conserve l’en-tête Authorization cô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é vers index.php, qui dispatche la requête en interne.

Activation

BASH
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 apache2
Cliquez pour développer et voir plus

Ajustement des limites PHP

BASH
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 apache2
Cliquez pour développer et voir plus

Assistant Web GLPI

J’ouvre http://glpi.lab.interne dans le navigateur du poste d’administration. L’assistant d’installation se lance.

Étape 1 — Choix de la langue d’installation GLPI

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

Étape 2 — Acceptation de la licence GPL

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

Étape 3 — Choix entre nouvelle installation et mise à jour

Je choisis Installation (nouvelle base).

Étape 4 — Vérification automatique des prérequis

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.

Étape 5 — Connexion à la base de données MariaDB

TEXT
Serveur SQL  : localhost
Utilisateur  : glpi
Mot de passe : (celui défini dans MariaDB plus haut)
Cliquez pour développer et voir plus

Étape 6 — Sélection de la base à initialiser

Je sélectionne la base glpi créée plus haut.

Étape 7 — Initialisation des tables GLPI dans la base

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.

Étape 8 — Choix d’envoyer ou non des données anonymisées à l’éditeur

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

Étape 9 — Fin de l’installation

L’assistant me rappelle les comptes par défaut :

TEXT
glpi / glpi          (super-administrateur)
post-only / postonly (interface limitée à la création de tickets)
tech / tech          (technicien support)
normal / normal      (utilisateur final)
Cliquez pour développer et voir plus

Étape 10 — Tableau de bord GLPI après première connexion

Je me connecte avec glpi/glpi et je tombe sur le tableau de bord. L’instance est opérationnelle.

Vérifications

BASH
# 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.log
Cliquez pour développer et voir plus

Sortie attendue :

  • les deux services active (running) ;
  • aucun PHP Fatal error dans les logs.

Tests

Deux scénarios pour valider la mise en service :

  1. 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.
  2. 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ômeCause probableCorrection
Page blanche au premier accèsExtension PHP manquante (souvent mysqli ou gd)Installer l’extension, redémarrer Apache, vérifier avec php -m
Failed to connect to databaseMauvais mot de passe ou utilisateur sans privilèges sur glpiRefaire le GRANT ALL PRIVILEGES ON glpi.* côté MariaDB
Timezone database not loadedmysql_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 manquantCorriger le VirtualHost, recharger Apache avec systemctl reload apache2

Compétences du bloc 1 mobilisées

Compétence officielleMobilisation concrète
Mettre à disposition aux utilisateurs un service informatiqueService web GLPI accessible aux techniciens du lab via http://glpi.lab.interne.
Installer et configurer des éléments d’infrastructureStack Apache 2.4 + PHP 8.3 + MariaDB sur Ubuntu Server 25.04, déploiement de GLPI 11.0.6.
Gérer le patrimoine informatiqueMise 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 serviceTests 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/ comme DocumentRoot est 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

Commencer la recherche

Saisissez des mots-clés pour rechercher des articles

↑↓
ESC
⌘K Raccourci