# Déployer GLPI avec Docker
Dans cet article, nous allons déployer GLPI à l'aide d'un conteneur Docker. Cette approche vise à créer des configurations légères, reproductibles et faciles à intégrer.
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">L'objectif est de favoriser la montée en compétences et les tests dans un environnement isolé. Ne pas reproduire en environnement de production.</span>
## Pourquoi Docker pour 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 [Centre Docker](https://hub.docker.com/r/glpi/glpi) et le [Registre des conteneurs GitHub](https://github.com/orgs/glpi-project/packages/container/package/glpi).
## Guide de déploiement
### Environnement de démonstration
Pour réaliser cette procédure, j'utilise 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 RAM libre recommandés.
### Configuration du fichier Docker Compose
> [!info] À savoir ! <span style="font-weight: normal; color: var(--text-normal)">Docker Compose permet de créer et de gérer des applications multi-conteneurs. Les services de votre application, les réseaux et les volumes sont définis dans un seul fichier.</span>
Nous allons configurer une instance GLPI en initialisant un fichier [docker-compose.yml](https://github.com/glpi-project/docker-images/blob/main/README.md#via-docker-compose). Pour cela, créez un dossier nommé `glpi-latest` à l'emplacement de votre choix.
Ajoutez un fichier nommé `docker-compose.yml`, puis insérez la configuration suivante.
```yml
name: glpi
services:
glpi:
image: "glpi/glpi:latest"
restart: "unless-stopped"
volumes:
# Using a named volume avoids permission issues on host (automatically managed by Docker)
- glpi_data:/var/glpi
# For GLPI 10.x, uncomment the following line to create a volume for plugins fetched from the marketplace.
# - "./storage/glpi_marketplace:/var/www/glpi/marketplace/:rw"
env_file: .env # Pass environment variables from .env file to the container
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:
```
> [!info] À savoir ! <span style="font-weight: normal; color: var(--text-normal)">Les images `latest` sont utilisées ici pour simplifier le déploiement en environnement de test. Pour un environnement stable et reproductible, fixer une version précise (ex : `glpi/glpi:11.0`, `mysql:8.0`)</span>
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
```
Par défaut, GLPI s'installe ou se met à jour automatiquement. Pour désactiver ce comportement, modifiez le fichier `.env`.
Si vous souhaitez gérer manuellement l'installation et la configuration de GLPI, positionnez les deux options ci-dessous sur `true` dans le fichier `.env` :
- `GLPI_SKIP_AUTOINSTALL` pour désactiver l'installation automatique.
- `GLPI_SKIP_AUTOUPDATE` pour désactiver les mises à jour automatiques.
Ensuite, démarrez l'application avec la commande suivante :
```
docker compose up -d
```
- `up` : démarre l'application multi-conteneurs
- `-d` : exécute les conteneurs en arrière-plan
> [!danger] Attention ! <span style="font-weight: normal; color: var(--text-normal)">Le mot de passe root MySQL est généré aléatoirement.</span>
Pour vérifier les journaux de la base de données MySQL, vous devez récupérer l'ID du conteneur `db`. Listez les conteneurs actifs :
```powershell
docker container ls
```
Dans mon cas, l'ID du conteneur `db` est `56122321eee1`.
![[_asset-tuto-glpi-docker-desktop.png]]
Consultez ensuite les logs de ce conteneur :
```
docker logs 56122321eee1
```
Recherchez le mot de passe root MySQL dans les logs :
![[_asset-tuto-glpi-docker-desktop-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.
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-desktop.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
> [!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>