# Déployer un lab GLPI avec Docker Compose
Dans cet article, nous allons déployer un environnement GLPI fonctionnel à l’aide de Docker Compose. Si vous souhaitez installer GLPI de façon plus traditionnel dans une VM Debian, consultez le tutoriel dédié [[tuto-glpi-debian-install|Installer GLPI sous Debian]].
Ce tutoriel s’appuie sur les bases vues dans [[tuto-docker-compose|prise en main Docker Compose]] et propose une configuration prête à l’emploi pour un lab.
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">Cet environnement est conçu pour des tests rapides et jetables afin de favoriser la montée en compétences. Ne pas utiliser en production.</span>
## Pourquoi utiliser Docker pour un lab GLPI ?
L’exécution de GLPI dans Docker apporte plusieurs avantages :
- **Flexibilité** : changez de version ou testez de nouvelles fonctionnalités en quelques étapes.
- **Gain de temps** : concentrez-vous sur l'utilisation de GLPI plutôt que sur le dépannage de l’environnement.
Les images officielles sont disponibles sur [Docker Hub](https://hub.docker.com/r/glpi/glpi) et le [Dépôt glpi-project sur GitHub](https://github.com/orgs/glpi-project/packages/container/package/glpi).
## Guide de déploiement
### Environnement de démonstration
L'environnement de démonstration est basé sur une machine sous Windows 11 avec Docker Desktop installé. La procédure de déploiement de [[tuto-docker-desktop-windows|Docker Desktop sous Windows 11]] n'est pas décrite ici.
### Prérequis
- Docker Desktop installé et opérationnel
- Port 80 disponible sur la machine hôte
- 2 Go de RAM libre recommandés
- Avoir pris en main [[tuto-docker-compose|Docker Compose]]
### Configuration du fichier Docker Compose
Nous allons déployer GLPI à l’aide d’un fichier `docker-compose.yml`.
- Créez un dossier nommé `glpi-lab` à l’emplacement de votre choix.
- Ajoutez un fichier nommé `docker-compose.yml`, puis insérez la configuration suivante :
```yml
services:
glpi:
image: glpi/glpi:11.0
restart: unless-stopped
volumes:
- glpi_data:/var/glpi
env_file: .env
depends_on:
- db
ports:
- "80:80"
db:
image: mysql:8.0
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:
```
### Comprendre le fichier docker-compose.yml
- `services` : définit les conteneurs à lancer
- `glpi` : service de l’application web
- `db` : service de base de données MySQL
- `image` : image Docker utilisée pour créer le conteneur
- `ports` : expose le service sur la machine hôte (`http://localhost:80`)
- `volumes` : permet de conserver les données même après suppression des conteneurs
- `glpi_data` : fichiers de GLPI
- `db_data` : base de données MySQL
- `env_file` : charge les variables définies dans le fichier `.env`
- `depends_on` : démarre le service `db` avant `glpi`
### Créer le fichier .env
Créez un fichier nommé `.env` (les fichiers qui commencent par `.` sont des fichiers cachés sous Linux).
```dotenv
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpidb
GLPI_DB_USER=glpidb_admin
GLPI_DB_PASSWORD=glpidb_admin_password
GLPI_SKIP_AUTOINSTALL=false
GLPI_SKIP_AUTOUPDATE=false
```
### Comprendre le fichier .env
Ce fichier permet de définir les variables utilisées par GLPI pour se connecter à la base de données et gérer son comportement au démarrage.
- `GLPI_DB_HOST` : nom du service MySQL (ici `db`)
- `GLPI_DB_PORT` : port utilisé par le service MySQL (3306 par défaut)
- `GLPI_DB_NAME` : base de données utilisée par GLPI
- `GLPI_DB_USER` / `GLPI_DB_PASSWORD` : identifiants de connexion
- `GLPI_SKIP_AUTOINSTALL=false` : GLPI s’installe automatiquement au premier démarrage
- `GLPI_SKIP_AUTOUPDATE=false` : GLPI se met à jour automatiquement si nécessaire
> [!info] À savoir ! <span style="font-weight: normal; color: var(--text-normal)">Pour gérer manuellement l'installation et les mises à jour de GLPI, positionnez les options `GLPI_SKIP_AUTOINSTALL` et `GLPI_SKIP_AUTOUPDATE` sur `true` dans le fichier `.env`.</span>
### Démarrer votre application GLPI
Ensuite, démarrez l'application avec la commande :
```
docker compose up -d
```
- `up` : démarre l'application multi-conteneurs
- `-d` : exécute les conteneurs en arrière-plan
Confirmez le statut des conteneurs `db` et `glpi` en utilisant la commande :
```powershell
docker compose ps
```
Les deux services doivent apparaître avec l’état `running`.
![[_asset-tuto-glpi-docker-install.png]]
Si un conteneur est en erreur, consultez ses logs avec `docker compose logs <service>`.
### Récupérer le mot de passe root MySQL
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">Le mot de passe root MySQL est généré aléatoirement.</span>
Consultez les logs du conteneur `db` pour récupérer le mot de passe root MySQL :
```powershell
docker compose logs db
```
Recherchez le mot de passe root MySQL dans les logs :
![[_asset-tuto-glpi-docker-install-2.png]]
## Première connexion sur GLPI
Une fois les conteneurs en cours d'exécution, accédez à GLPI via `http://localhost`. Par défaut, vous arriverez directement sur l'interface d'authentification.
Vous pouvez vous connecter avec les identifiants par défaut :
- Utilisateur : `glpi`
- Mot de passe : `glpi`
> [!warning] Rappel ! <span style="font-weight: normal; color: var(--text-normal)">Il est recommandé de modifier ces identifiants après la première connexion.</span>
Si l'option `GLPI_SKIP_AUTOINSTALL` est positionnée sur `true` dans le fichier `.env`, vous devrez finaliser l'installation de GLPI manuellement en spécifiant les informations de base de données :
- Nom d'hôte : `db`
- Base de données : `glpidb`
- Utilisateur : `glpidb_admin`
- Mot de passe : `glpidb_admin_password`
![[_asset-tuto-glpi-docker-install.mp4]]
## Supprimer les conteneurs
Pour supprimer les conteneurs, les volumes et les réseaux créés par ce `docker-compose`, exécutez la commande :
```powershell
docker compose down -v
```
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">Cette commande supprime l'ensemble des données et des paramètres de personnalisation.</span>
## Conclusion
Avec Docker, vous disposez en quelques minutes d'un environnement de test complet avec la dernière version de GLPI.
Cette configuration est personnalisable. Pour en savoir plus, consultez le [README officiel](https://github.com/glpi-project/docker-images/blob/main/README.md) et le [Registre des conteneurs GitHub](https://github.com/orgs/glpi-project/packages/container/package/glpi). Vous pouvez par exemple :
- Gérer les fuseaux horaires
- Optimiser les volumes Docker utilisés
- Ajouter des configurations PHP personnalisées
- Gérer les tâches planifiées
Ce type de déploiement constitue une base simple et reproductible pour expérimenter GLPI et comprendre le fonctionnement d’une application multi-conteneurs avec Docker Compose.
> [!info] À savoir ! <span style="font-weight: normal; color: var(--text-normal)">L'image du conteneur GLPI est mise à jour de façon hebdomadaire. Elle contient la dernière version prise en charge de GLPI et intègre les derniers correctifs de sécurité.</span>
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">Le code de l'application GLPI n'est jamais modifié lors de ces reconstructions. Seuls le système d'exploitation, le runtime PHP et les bibliothèques système sont mis à jour.</span>
Pour aller plus loin, vous pouvez adapter cette configuration ou créer vos propres services en vous appuyant sur [[tuto-docker-compose|Docker Compose]].