GLPI
GLPI (Gestion Libre de Parc Informatique) est une solution open source de gestion des services IT (ITSM) et de gestion de parc informatique. Elle permet aux équipes IT de centraliser l'inventaire, le support et la gestion des ressources informatiques d'une organisation.
Présentation
Origines et positionnement
GLPI (Gestion Libre de Parc Informatique) est né en France au début des années 2000, développé initialement par une équipe de l'INDIE (Lyon). Le projet est aujourd'hui porté principalement par Teclib', société française qui assure le développement, le support commercial et l'hébergement cloud (GLPI Network), tout en maintenant le cœur du logiciel sous licence libre (GPL v2+).
GLPI se positionne à la croisée de deux mondes :
- L'ITAM (IT Asset Management) : gestion du parc matériel et logiciel
- L'ITSM (IT Service Management) : gestion des services, incidents, changements, dans une logique inspirée d'ITIL
C'est cette double casquette qui en fait un outil particulièrement adapté aux structures de taille moyenne (collectivités, PME, établissements publics) qui veulent un outil tout-en-un plutôt que de multiplier les solutions spécialisées.
Architecture technique
Stack technique
- Backend en PHP (GLPI 10/11 nécessite PHP 8.1+)
- Base de données MySQL/MariaDB (PostgreSQL supporté depuis GLPI 10)
- Serveur web Apache ou Nginx
- Peut être déployé en bare metal, VM, ou conteneur Docker (image officielle disponible)
GLPI Agent
- Agent multiplateforme (Windows, Linux, macOS) installable via GPO/MDT dans un contexte AD
- Réalise l'inventaire automatique : matériel, logiciels installés, configuration réseau
- Communique avec le serveur via un protocole HTTP(S), avec authentification par certificat possible
- Peut aussi déployer des actions à distance (inventaire forcé, exécution de scripts)
Système de plugins
C'est un des points forts majeurs de GLPI : une architecture de hooks permet d'étendre presque toutes les fonctionnalités sans toucher au core.
samlSSO: authentification SAML 2.0 (ex. avec Keycloak)- Plugin OIDC (payant chez Teclib pour l'officiel) : authentification OpenID Connect
Order,Fields,Datainjection,Webhooks, etc.- API REST native pour intégrations tierces (scripts PowerShell, automatisations)
Modules fonctionnels en détail
Gestion de parc (Assets)
- Inventaire matériel : ordinateurs, moniteurs, périphériques réseau, imprimantes, téléphonie
- Inventaire logiciel : détection automatique, rapprochement avec les licences possédées (alerte en cas de sous/sur-licensing)
- Gestion du cycle de vie : statuts (en stock, en prod, en maintenance, hors service), affectation utilisateur/lieu/groupe
- CMDB (Configuration Management Database) : relations entre éléments (un serveur héberge telle application, dépend de telle baie, etc.)
Helpdesk / Tickets
- Création de tickets via interface web, email (ticket par email), ou formulaire simplifié
- Workflow de validation, SLA avec échéances et escalades automatiques
- Catégorisation, priorités, assignation à des techniciens ou groupes
- Base de connaissances liée aux tickets pour la résolution rapide
- Notifications personnalisables (templates HTML, variables dynamiques comme
##FOREACH##que tu utilises déjà pour LCC)
Processus ITIL
- Gestion des incidents vs gestion des problèmes (distinction claire, recherche de cause racine)
- Gestion des changements : workflow d'approbation
- Catalogue de services : exposition des demandes standardisées aux utilisateurs
Gestion administrative et financière
- Contrats (maintenance, garantie, location)
- Fournisseurs, commandes, factures
- Amortissement et TCO (coût total de possession) du parc
Autres modules notables
- Réservation de matériel (salles, vidéoprojecteurs, véhicules)
- Rapports : tableaux de bord personnalisables, exports
- Gestion des droits : profils granulaires par entité (utile en multi-sites avec héritage)
Architecture multi-entités
GLPI gère nativement le multi-tenant via les "entités" : une arborescence hiérarchique permettant de cloisonner ou de partager des données entre différentes structures (sites, services, clients). C'est pertinent à la fois pour LCC (communes membres) et pour Rakouns (séparation entre clients).
Authentification et SSO
- LDAP/Active Directory natif (synchronisation des comptes, mapping des groupes)
- SAML 2.0 via plugin communautaire
samlSSO(gratuit) — fonctionne avec Keycloak - OpenID Connect uniquement via plugin payant de Teclib (pas d'implémentation native ni communautaire mature équivalente à samlSSO)
- Authentification multiple : possibilité de cumuler plusieurs sources (locale + LDAP + SSO)
Installation
Installation classique
Prérequis de GLPI
Avant d'évoquer l'installation, parlons des prérequis. GLPI a besoin d'un serveur Web, de PHP et d'une base de données pour fonctionner. Bien que l'installation de GLPI soit possible sur Windows Server via IIS, l'installation sur Linux est recommandée. D'une façon générale, GLPI supporte plusieurs serveurs Web : Apache2, Nginx, lighttpd et IIS.
Pour le reste, voici ce que vous devez savoir avant de procéder à l'installation de GLPI 11 :
- Version de PHP : au minimum PHP 8.2 pour GLPI 11.
- Base de données
- MySQL 8.0 minimum
- MariaDB 10.6 minimum
Il y aura également plusieurs extensions PHP à installer pour que GLPI puisse fonctionner. Pour cette démonstration, nous allons utiliser une machine sous Debian 13 et nous allons installer dessus Apache2, PHP 8.4 ainsi que MariaDB (dernière version disponible dans les dépôts Debian).
Si vous avez besoin de précisions supplémentaires, vous pouvez consulter la documentation officielle :
Note : GLPI est aussi disponible sous la forme d'images Docker, ouvrant la porte à l'exécution sous la forme de conteneurs. Ces images représentent une nouveauté 2025 et elles sont disponibles pour les versions GLPI 10 et GLPI 11. À ce sujet, vous pouvez consulter le Docker Hub.
Préparer le serveur pour installer GLPI
Commençons par l'installation par une mise à jour des paquets sur la machine Debian 13. Pensez également à lui attribuer une adresse IP, un nom d'hôte (avec un enregistrement DNS pour votre application) et à effectuer la configuration du système.
La suite des opérations s'effectue directement depuis le Terminal :
sudo apt-get update && sudo apt-get upgrade
Installer le socle LAMP
La première grande étape consiste à installer les paquets du socle LAMP : Linux Apache2 MariaDB PHP. Sous Debian 13 Trixie, qui est la dernière version majeure stable de Debian, PHP 8.4 est distribué par défaut dans les dépôts officiels. Il est à noter que l'intégration de PHP sera effectuée via PHP-FPM plutôt que l'extension PHP pour Apache, pour des raisons de performance.
Commençons par installer les trois paquets principaux :
sudo apt-get install apache2 php8.4-fpm mariadb-server
Puis, nous allons installer toutes les extensions nécessaires au bon fonctionnement de GLPI et qui ne sont pas intégrées au paquet php8.4-common.
sudo apt install php8.4-{curl,gd,intl,mysql,zip,bcmath,mbstring,xml,bz2}
En comparaison de GLPI 10, la version 11 impose des extensions PHP supplémentaires : bcmath, mbstring et openssl
Voici, à titre d'information, le rôle de chaque extension installée :
curl: utilisée pour accéder à des ressources distantes (marketplace, flux RSS, etc.).gd: permet la manipulation et la génération d’images.intl: fournit les fonctions d’internationalisation (formats, locale, conversions…).mysql: gère la connexion et les opérations avec une base de données MySQL/MariaDB.zlib: nécessaire pour la compression/décompression, notamment pour les paquets gzip du marketplace et la génération de PDF.bcmath: utilisé pour générer des QR codes (calculs de précision arbitraire).mbstring: indispensable pour la gestion des chaînes de caractères multioctets (UTF-8, conversions, compatibilité internationale).xml(inclutdom,simplexml,xmlreader,xmlwriter) : fournit les outils nécessaires au traitement XML utilisés par diverses fonctions de l’application.openssl: permet la communication chiffrée (connexion HTTPS, authentification OAuth 2.0, etc.).bz2: pour le bon fonctionnement de la marketplace.
Ces commandes vont permettre de récupérer les versions de ces extensions pour PHP 8.4.
Si vous envisagez d'associer GLPI avec un annuaire LDAP comme l'Active Directory, vous devez installer l'extension LDAP de PHP. Sinon, ce n'est pas nécessaire et vous pouvez le faire par la suite, si besoin.
sudo apt install php8.4-ldap
Note : l'extension exif est également recommandée pour améliorer la sécurité du processus de validation des images. Elle est directement intégrée au paquet php8.4-common. Aucune action supplémentaire n'est requise.
Nous venons d'installer Apache2, MariaDB, PHP et un ensemble d'extensions.
Préparer une base de données pour GLPI
Nous allons préparer MariaDB pour qu'il puisse héberger la base de données de GLPI. La première action à effectuer, c'est d'exécuter la commande ci-dessous pour effectuer le minimum syndical en matière de sécurisation de MariaDB.
sudo mariadb-secure-installation
# Si vous utilisez MySQL :
sudo mysql_secure_installation
Vous serez invité à changer le mot de passe root, mais aussi à supprimer les utilisateurs anonymes, désactiver l'accès root à distance, etc... Tout est bien expliqué. Voici un exemple sur mon serveur pour vous guider :
Ensuite, nous allons créer une base de données dédiée pour GLPI et celle-ci sera accessible par un utilisateur dédié. Hors de question d'utiliser le compte root de MariaDB : appliquons le principe de moindre privilège. Donc : une base de données = un utilisateur.
Connectez-vous à votre instance MariaDB :
sudo mysql -u root -p
Saisissez le mot de passe root de MariaDB, que vous venez de définir à l'étape précédente.
Puis, nous allons exécuter les requêtes SQL ci-dessous pour créer la base de données db25_glpi ainsi que l'utilisateur glpi_adm avec le mot de passe MotDePasseRobuste (que vous personnalisez, bien sûr). Cet utilisateur aura tous les droits sur cette base de données (et uniquement sur celle-ci).
CREATE DATABASE db25_glpi;
GRANT ALL PRIVILEGES ON db25_glpi.* TO glpi_adm@localhost IDENTIFIED BY "MotDePasseRobuste";
FLUSH PRIVILEGES;
EXIT
Ce qui donne :
Voilà, la base de données est prête.
Télécharger GLPI
La prochaine étape consiste à télécharger l'archive ".tgz" qui contient les sources d'installation de GLPI. À partir du GitHub de GLPI, récupérez le lien vers la dernière version. Ici, c'est la version GLPI 11.0.4 qui est installée.
Note : je vous encourage vivement à prendre systématiquement la dernière version, et donc à consulter le GitHub de GLPI pour récupérer le lien de la dernière version, et ainsi, adapter la commande wget spécifiée ci-dessous (URL).
L'archive sera téléchargée dans le répertoire /tmp :
cd /tmp
wget https://github.com/glpi-project/glpi/releases/download/11.0.4/glpi-11.0.4.tgz
Puis, nous allons exécuter la commande ci-dessous pour décompresser l'archive .tgz dans le répertoire /var/www/, ce qui donnera le chemin d'accès /var/www/glpi pour GLPI.
sudo tar -xzvf glpi-11.0.4.tgz -C /var/www/
Préparer l'installation
Désormais, nous allons préparer l'installation de GLPI 11 via la création de plusieurs répertoires et la personnalisation des permissions.
Tout d'abord, nous allons définir l'utilisateur www-data correspondant à Apache2 (sur Debian/Ubuntu), en tant que propriétaire sur les fichiers GLPI.
sudo chown www-data /var/www/glpi/ -R
Ensuite, nous allons devoir créer plusieurs dossiers et sortir des données de la racine Web (/var/www/glpi) de manière à les stocker dans les nouveaux dossiers que nous allons créer. Ceci va permettre de faire une installation sécurisée de GLPI, qui suit les recommandations de l'éditeur.
- Le répertoire
/etc/glpi
Commencez par créer le répertoire /etc/glpi qui va recevoir les fichiers de configuration de GLPI. Nous donnons des autorisations à www-data sur ce répertoire car il a besoin de pouvoir y accéder.
sudo mkdir /etc/glpi
sudo chown www-data /etc/glpi/
Puis, nous allons déplacer le répertoire sensible config de GLPI vers ce nouveau dossier :
sudo mv /var/www/glpi/config /etc/glpi
- Le répertoire
/var/lib/glpi
Répétons la même opération avec la création du répertoire /var/lib/glpi :
sudo mkdir /var/lib/glpi
sudo chown www-data /var/lib/glpi/
Dans lequel nous déplaçons également le dossier files qui contient la majorité des fichiers de GLPI : CSS, plugins, etc.
sudo mv /var/www/glpi/files /var/lib/glpi
- Le répertoire
/var/log/glpi
Terminons par la création du répertoire /var/log/glpi destiné à stocker les journaux de GLPI. Toujours sur le même principe :
sudo mkdir /var/log/glpi
sudo chown www-data /var/log/glpi
Nous n'avons rien à déplacer dans ce répertoire.
- Créer les fichiers de configuration
Nous devons configurer GLPI pour qu'il sache où aller chercher les données. Autrement dit, nous allons déclarer les nouveaux répertoires fraichement créés. Nous allons créer ce premier fichier :
sudo nano /var/www/glpi/inc/downstream.php
Afin d'ajouter le contenu ci-dessous qui indique le chemin vers le répertoire de configuration :
<?php
define('GLPI_CONFIG_DIR', '/etc/glpi/');
if (file_exists(GLPI_CONFIG_DIR . '/local_define.php')) {
require_once GLPI_CONFIG_DIR . '/local_define.php';
}
Ensuite, nous allons créer ce second fichier :
sudo nano /etc/glpi/local_define.php
Afin d'ajouter le contenu ci-dessous permettant de déclarer deux variables permettant de préciser les chemins vers les répertoires files et log. Pour rappel, ces deux répertoires ont été préparés précédemment.
<?php
define('GLPI_VAR_DIR', '/var/lib/glpi/files');
define('GLPI_LOG_DIR', '/var/log/glpi');
GLPI prend en charge de nombreuses variables pour personnaliser l'emplacement des répertoires, bien au-delà des deux variables spécifiées ci-dessus. Par exemple, la variable GLPI_CACHE_DIR sert à spécifier un emplacement personnalisé pour le stockage du cache.
Voilà, cette étape est terminée.
Configurer Apache2 pour GLPI
Passons à la configuration du serveur web Apache2. Nous allons créer un nouveau fichier de configuration qui va permettre de configurer le VirtualHost dédié à GLPI. Dans mon cas, le fichier s'appelle support.it-connectlab.fr.conf en référence au nom de domaine choisi pour accéder à GLPI : support.it-connectlab.fr. L'idéal étant d'avoir un nom de domaine (même interne) pour accéder à GLPI afin de pouvoir positionner un certificat TLS/SSL par la suite.
sudo nano /etc/apache2/sites-available/support.conf
Ce qui donne la configuration suivante (selon le modèle officiel de la documentation) :
<VirtualHost *:80>
ServerName support.domain.tld
DocumentRoot /var/www/glpi/public
# If you want to place GLPI in a subfolder of your site (e.g. your virtual host is serving multiple applications),
# you can use an Alias directive. If you do this, the DocumentRoot directive MUST NOT target the GLPI directory itself.
# Alias "/glpi" "/var/www/glpi/public"
<Directory /var/www/glpi/public>
Require all granted
RewriteEngine On
# Ensure authorization headers are passed to PHP.
# Some Apache configurations may filter them and break usage of API, CalDAV, ...
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect all requests to GLPI router, unless file exists.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</Directory>
</VirtualHost>
Quand la configuration est prête, enregistrez le fichier.
Puis, nous allons activer ce nouveau site dans Apache2 :
sudo a2ensite support.conf
Nous en profitons également pour désactiver le site par défaut car il est inutile :
sudo a2dissite 000-default.conf
Nous allons aussi activer le module rewrite (nécessaire pour activer la prise en charge des règles de réécriture) car nous l'avons utilisé dans le fichier de configuration du VirtualHost (via les directives RewriteCond / RewriteRule).
sudo a2enmod rewrite
Il ne reste plus qu'à redémarrer le service Apache2 :
sudo systemctl restart apache2
Utiliser PHP8.4-FPM avec Apache2
Pour utiliser PHP en tant que moteur de scripts avec Apache2, il y a deux possibilités : utiliser le module PHP pour Apache2 (libapache2-mod-php8.4) ou utiliser PHP-FPM. Il est recommandé d'utiliser PHP-FPM car il est plus performant et se présente comme un service indépendant. Dans l'autre mode, chaque processus Apache2 exécute son propre moteur de scripts PHP.
Pour rappel, nous avons déjà fait le choix d'utiliser PHP-FPM : le paquet php8.4-fpm a été installé précédemment, au même moment que ceux pour Apache2 et MariaDB. Néanmoins, nous devons configurer l'intégration de PHP-FPM avec Apache.
Commençons par activer deux modules dans Apache et la configuration de PHP-FPM, avant de recharger Apache2 :
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.4-fpm
sudo systemctl reload apache2
Pour configurer PHP-FPM pour Apache2, nous n'allons pas éditer le fichier /etc/php/8.4/apache2/php.ini. À la place, le fichier que vous devez éditer est celui-ci :
sudo nano /etc/php/8.4/fpm/php.ini
Dans ce fichier, recherchez l'option session.cookie_httponly (CTRL+W avec nano) et indiquez la valeur on pour l'activer, afin de protéger les cookies de GLPI.
; Whether or not to add the httpOnly flag to the cookie, which makes it
; inaccessible to browser scripting languages such as JavaScript.
; https://php.net/session.cookie-httponly
session.cookie_httponly = on
Toujours pour renforcer la sécurité, configurez la directive session.cookie_samesite avec la valeur Lax conseillée par la documentation de GLPI. Elle contrôle la façon dont le navigateur envoie le cookie de session, ce qui bloque notamment certaines attaques CSRF (Cross-Site Request Forgery).
; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF)
; Current valid values are "Strict", "Lax" or "None". When using "None",
; make sure to include the quotes, as `none` is interpreted like `false` in ini files.
; https://tools.ietf.org/html/draft-west-first-party-cookies-07
session.cookie_samesite = Lax
Enregistrez le fichier quand c'est fait. Par la suite, vous pourriez être amené à effectuer d'autres modifications, notamment pour augmenter la taille des uploads sur GLPI (upload_max_filesize limité à 2 Mo par défaut), etc. Je pense aussi à la directive session.cookie_secure que nous passerons sur on une fois GLPI accessible en HTTPS.
Pour appliquer les modifications, nous devons redémarrer PHP-FPM :
sudo systemctl restart php8.4-fpm.service
Pour finir, nous devons modifier notre VirtualHost pour préciser à Apache2 que PHP-FPM doit être utilisé pour les fichiers PHP. Cette configuration vise à pointer vers le socket de PHP-FPM pour traiter les fichiers avec l'extension .php. Editez le fichier support.it-connectlab.fr.conf pour ajouter ceci :
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost/"
</FilesMatch>
Quand c'est fait, relancer Apache2 :
sudo systemctl restart apache2
Voilà, tout est prêt ! Il ne reste plus qu'à installer GLPI !
Installation de GLPI
Pour effectuer l'installation de GLPI, nous devons utiliser un navigateur Web afin d'accéder à l'adresse du GLPI. Il s'agit de l'adresse déclarée dans le fichier de configuration Apache2 (ServerName).
Si vous avez suivi toutes les étapes correctement, vous devriez obtenir la page visible ci-dessous. Cliquez simplement sur le bouton au centre.
Nous allons commencer par choisir la langue.
Puisqu'il s'agit d'une nouvelle installation, nous cliquons sur "Installer".
Étape importante : GLPI vérifie la configuration de notre serveur pour déterminer si tous les prérequis sont respectés. Tout est bon, donc nous pouvons continuer. Référez-vous à la colonne des résultats.
À l'étape suivante, nous devons renseigner les informations pour se connecter à la base de données. Nous indiquons localhost en tant que serveur SQL puisque MariaDB est installé en local, sur le même serveur que GLPI. Puis, nous indiquons notre utilisateur glpi_adm et le mot de passe associé.
Après avoir cliqué sur "Continuer", nous devons choisir la base de données db25_glpi créée précédemment.
Patientez...
Si l'initialisation s'est correctement déroulée, vous devriez obtenir ce résultat :
Suivez les dernières étapes qui n'ont pas de réel impact. Le plus dur est fait !
Félicitations, vous venez d'installer GLPI ! Comme le précise la dernière étape, le compte administrateur par défaut est "glpi/glpi" !
Nous allons donc nous connecter avec le compte "glpi" et le mot de passe "glpi".
Bienvenue sur votre nouveau serveur GLPI ! Il y a déjà des informations issues des données de démonstration, vous n'avez qu'à cliquer sur le bouton bleu nommé "Désactiver les données de démonstration" pour que toutes les sections soient vierges comme attendu.
Même si l'installation est terminée, nous avons encore quelques actions indispensables à réaliser pour la finaliser :
- Changer le mot de passe de tous les comptes par défaut (cliquez sur les liens situés dans l'encadré orange)
- Supprimer le fichier
install.phppuisqu'il n'est plus nécessaire et représente un risque (possibilité de relancer l'installation)
sudo rm /var/www/glpi/install/install.php
Voilà, c'est fait. Désormais, votre GLPI est prêt à être utilisé et configuré (création d'utilisateurs, de catégories, de tickets, etc...).
Installation Docker
Cette approche Docker présente un avantage majeur par rapport à l'installation classique LAMP : pas besoin de gérer manuellement Apache, PHP-FPM et leurs extensions — tout est packagé dans l'image. C'est aussi l'approche la plus cohérente avec ton infra Rakouns, où GLPI tourne déjà sous Docker.
Prérequis
Avant de commencer, voici ce dont tu as besoin :
- Docker Engine et Docker Compose (plugin
docker compose, pas l'ancien binairedocker-composeen Python) - Un nom de domaine ou une entrée DNS pointant vers ton hôte
- Suffisamment d'espace disque pour les volumes (fichiers GLPI + base de données)
Vérifie rapidement que Docker est bien installé :
docker --version
docker compose version
Si ce n'est pas le cas : Installation de Docker
Note : le dépôt GitHub officiel glpi-project/docker-images fournit des fichiers prêts à l'emploi docker-compose.example.yml et .env.example, que nous allons utiliser comme base.
Préparer l'arborescence
Comme pour tes autres stacks Rakouns, nous allons tout ranger sous /Docker/ :
sudo mkdir -p /Docker/glpi
cd /Docker/glpi
Récupérer les fichiers officiels
Plutôt que de tout écrire à la main, le plus fiable est de récupérer directement les fichiers d'exemple maintenus par le projet GLPI :
curl --fail https://raw.githubusercontent.com/glpi-project/docker-images/main/docker-compose.example.yml --output docker-compose.yml
curl --fail https://raw.githubusercontent.com/glpi-project/docker-images/main/.env.example --output .env
Le fichier .env
Ouvre le fichier .env :
nano .env
Il contient les variables minimales nécessaires à la connexion à la base de données :
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=glpi
Personnalise impérativement le mot de passe (GLPI_DB_PASSWORD). Ici, génère un mot de passe robuste de type 40 caractères et évite les caractères $ et # qui peuvent poser des soucis d'échappement dans les fichiers .env Docker Compose.
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi_adm
GLPI_DB_PASSWORD=MotDePasseRobuste40Caracteres
Le fichier docker-compose.yml
Voici le contenu officiel récupéré, à adapter légèrement :
name: glpi
services:
glpi:
image: "glpi/glpi:latest"
restart: "unless-stopped"
volumes:
# Volume nommé : évite les soucis de permissions sur l'hôte
- glpi_data:/var/glpi
env_file: .env
depends_on:
- db
ports:
- "80:80"
db:
image: "mysql"
restart: "unless-stopped"
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_DATABASE: ${GLPI_DB_NAME}
MYSQL_USER: ${GLPI_DB_USER}
MYSQL_PASSWORD: ${GLPI_DB_PASSWORD}
volumes:
glpi_data:
db_data:
Quelques remarques importantes sur cette stack :
- Le volume
/var/glpi: l'image glpi/glpi fournit par défaut un volume contenant les répertoires config, marketplace et files. C'est l'équivalent Docker des répertoires/etc/glpi,/var/lib/glpiet/var/log/glpiqu'on créait manuellement en installation classique — ici, tout est regroupé sous/var/glpidans le conteneur. MYSQL_RANDOM_ROOT_PASSWORD: "yes": le mot de passe root de MySQL est généré aléatoirement et stocké dans les logs du conteneur. Comme tu n'as pas besoin du compte root pour GLPI (seulement de l'utilisateur dédié), c'est volontairement opaque.- Le port
80:80: à adapter selon ton organisation. Tu pourrais vouloir mapper sur un port interne dédié (ex.8089:80) plutôt que d'exposer le 80 directement sur l'hôte.
Si tu prévois d'utiliser des plugins du marketplace en GLPI 10.x, il faudrait ajouter un volume supplémentaire — mais en GLPI 11, ce n'est plus nécessaire, le répertoire marketplace étant déjà inclus dans le volume principal /var/glpi.
Lancer la stack
Une fois les fichiers prêts, démarre les conteneurs :
docker compose up -d
Vérifie que tout tourne correctement :
docker compose ps
docker compose logs -f glpi
Tu dois voir GLPI terminer son initialisation et le service Apache interne démarrer. La base MySQL doit également apparaître comme saine.
Installation de GLPI via le navigateur
Si tout s'est bien déroulé, tu arrives directement sur l'assistant d'installation de GLPI :
Le processus d'installation est très similaire à la version classique, déjà vue ici : Installation Classique.
Plugins
Personnalisation
Branding
Pourquoi personnaliser le logo ?
Changer le logo de GLPI peut sembler purement esthétique au premier abord, mais ça va plus loin : ça renforce le sentiment d'appartenance des utilisateurs à leur structure, en évitant l'impression d'utiliser un outil générique et impersonnel.
Où intervenir
Rends-toi dans Administration > Entités > [Nom de l'entité concernée] > Personnalisation de l'interface.
Active l'option CSS personnalisé, qui permet d'injecter le code suivant.
/* Logo menu */
.page .glpi-logo {
background: url('/pics/logos/custom/Support-Rakouns-title-white.png') no-repeat;
background-size: contain;
width: 200px;
}
/* Logo menu compact (sidebar réduite) */
body.navbar-collapsed .navbar-brand .glpi-logo {
background: url("/pics/logos/custom/Support-Rakouns-2.png") no-repeat;
background-size: contain;
width: 40px;
height: 40px;
}
/* Logo page de connexion */
.page-anonymous .glpi-logo {
--logo: url("https://cloud.rakouns.bzh/public.php/dav/files/BgyTpJFo5yoTsB2/Support-Rakouns-title-grey.png");
content: var(--logo);
width: 400px;
height: 100px;
}
.py-4 {
padding-top: 0rem !important;
}
Ce que fait chaque bloc
| Sélecteur CSS | Élément ciblé | Source de l'image |
|---|---|---|
.page .glpi-logo |
Logo du menu principal | URL interne GLPI (/pics/logos/custom/...) |
body.navbar-collapsed .navbar-brand .glpi-logo |
Logo du menu compact (sidebar réduite) | URL interne GLPI |
.page-anonymous .glpi-logo |
Logo de la page de connexion | URL publique externe (ici, un partage Nextcloud) |
Les deux approches — URL interne GLPI ou URL publique externe — fonctionnent indifféremment selon où sont hébergées tes images.
Résultat
Le résultat est à la fois plus cohérent visuellement et plus engageant pour les utilisateurs — sans compter que ça reste tout simplement plus agréable à regarder au quotidien.
Les notifications
Pourquoi personnaliser les notifications ?
GLPI envoie une quantité importante de mails aux utilisateurs, techniciens et valideurs (création de ticket, changement de statut, validation, etc.). Or, par défaut, ces notifications sont sobres et peu engageantes : beaucoup d'utilisateurs ne les lisent simplement pas. On ne peut pas vraiment leur en vouloir.
L'objectif ici est de rendre ces notifications plus claires et plus attractives à la lecture, pour améliorer le taux de consultation et la compréhension côté utilisateur final.
Accéder aux modèles de notification
Rends-toi dans GLPI, dans Configuration > Notifications > Modèles de notification.
Créer un nouveau modèle
Clique sur « + Ajouter » en haut de la page
Renseigne les champs suivants :
- Nom du modèle
- Type (ici, Ticket)
- Commentaire (facultatif)
- Style CSS (facultatif, si tu veux harmoniser le rendu)
Valide avec « + Ajouter ». Tu es alors redirigé vers la page de configuration du modèle.
Comprendre les onglets du modèle
Une fois sur cette page, quatre onglets sont disponibles :
| Onglet | Rôle |
|---|---|
| Traduction | Les différentes versions linguistiques de la notification. L'utilisateur reçoit la version correspondant à la langue définie dans son profil si elle existe, sinon la version par défaut. |
| Notification | La ou les notifications qui utilisent ce modèle (configuré plus tard). |
| Historique | Le suivi des modifications du modèle (qui a modifié quoi, et quand). |
| Tous | Regroupe l'ensemble des onglets précédents sur une seule vue. |
C'est l'onglet Traduction du modèle qui nous intéresse pour la personnalisation. Rends-toi dessus et clique sur « Ajouter » pour créer une traduction.
Construire le contenu du mail
Trois éléments sont à renseigner :
Le sujet
C'est l'objet du mail. GLPI ajoute automatiquement un préfixe du type [GLPI #<Ticket_ID>].
Le corps du mail (texte et HTML)
Le corps existe en deux versions :
- Version texte : peut être générée automatiquement à partir de la version HTML
- Version HTML : c'est celle qu'on va personnaliser
Les variables GLPI
GLPI met à disposition ses propres variables (tags) à insérer dans le modèle. Par exemple, le titre du ticket se note ##ticket.title##.
On peut s'en servir directement dans l'objet du mail, ce qui est bien plus parlant qu'un simple ID :
##ticket.title##
Ce qui donnera par exemple : [GLPI #0000018] Impossible de se connecter
L'ensemble des variables disponibles est consultable via le bouton « Voir la liste des balises disponibles » :
Exemple appliqué : la notification de création de ticket
Voici le modèle que j'ai mis en place pour la notification « Création de ticket », reçue par l'utilisateur en confirmation de l'ouverture de sa demande :
Pour intégrer le code HTML directement, il faut basculer l'éditeur WYSIWYG en mode « code source » (icône <>), puis y coller le code suivant :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
</head>
<body style="margin:0;padding:20px;background:#f0f2f5;font-family:Arial,sans-serif;">
<table width="100%" cellpadding="0" cellspacing="0" style="max-width:640px;margin:0 auto;">
<tr>
<td style="background:#1a56a0;padding:22px 28px;border-radius:10px 10px 0 0;">
<p style="margin:0;color:#ffffff;font-size:17px;font-weight:bold;">✅ Votre demande a bien été enregistrée</p>
<p style="margin:5px 0 0;color:rgba(255,255,255,0.75);font-size:13px;">Ticket ##ticket.id## · Rakouns</p>
</td>
</tr>
<tr>
<td style="background:#ffffff;border:1px solid #e5e5e5;border-top:none;border-radius:0 0 10px 10px;padding:24px 28px;">
<p style="margin:0 0 12px;font-size:13px;color:#888888;">Ouvert le ##ticket.creationdate## par <strong style="color:#555;">##ticket.openbyuser##</strong></p>
<p style="margin:0 0 14px;font-size:22px;font-weight:bold;color:#111111;">##ticket.title##</p>
<p style="margin:0 0 18px;">
<span style="display:inline-block;font-size:12px;font-weight:bold;padding:4px 12px;border-radius:99px;background:#e6f1fb;color:#185fa5;">##ticket.status##</span>
<span style="display:inline-block;font-size:12px;font-weight:bold;padding:4px 12px;border-radius:99px;background:#faeeda;color:#854f0b;">##ticket.priority##</span>
</p>
<table width="100%" cellpadding="0" cellspacing="0" style="margin:0 0 18px;">
<tr>
<td width="50%" style="padding:0 6px 0 0;vertical-align:top;">
<div style="background:#f7f7f7;border-radius:7px;padding:12px 14px;">
<p style="margin:0 0 3px;font-size:12px;color:#888888;text-transform:uppercase;letter-spacing:0.05em;">Catégorie</p>
<p style="margin:0;font-size:15px;font-weight:bold;color:#111111;">##ticket.category##</p>
</div>
</td>
<td width="50%" style="padding:0 0 0 6px;vertical-align:top;">
<div style="background:#f7f7f7;border-radius:7px;padding:12px 14px;">
<p style="margin:0 0 3px;font-size:12px;color:#888888;text-transform:uppercase;letter-spacing:0.05em;">Technicien assigné</p>
<p style="margin:0;font-size:15px;font-weight:bold;color:#111111;">##ticket.assigntousers##</p>
</div>
</td>
</tr>
</table>
<hr style="border:none;border-top:1px solid #eeeeee;margin:0 0 18px;">
<p style="margin:0 0 8px;font-size:12px;color:#888888;text-transform:uppercase;letter-spacing:0.05em;">Votre message</p>
<div style="background:#f7f7f7;border-radius:7px;padding:12px 14px;font-size:15px;color:#333333;line-height:1.7;">##ticket.content##</div>
<p style="margin:18px 0 0;font-size:14px;color:#555555;line-height:1.7;">Notre équipe informatique prend en charge votre demande. Vous serez notifié(e) par e-mail à chaque mise à jour.</p>
<div style="text-align:center;margin:22px 0 0;">
<a href="##ticket.url##" style="display:inline-block;background:#1a56a0;color:#ffffff;font-size:14px;font-weight:bold;padding:12px 28px;border-radius:7px;text-decoration:none;">Suivre mon ticket →</a>
</div>
</td>
</tr>
<tr>
<td style="text-align:center;padding:14px 0 0;font-size:12px;color:#aaaaaa;">
Rakouns · Ne pas répondre directement à cet e-mail
</td>
</tr>
</table>
</body>
</html>
Au moment de cliquer sur « + Ajouter », GLPI génère automatiquement la version texte du modèle à partir de cette version HTML.