# Exécuter GLPI sur docker

{% embed url="<https://www.youtube.com/watch?v=XhjlU2JzSQE>" %}

***

{% hint style="info" %}
**Pour obtenir un déploiement rapide, fiable et sécurisé sans le travail ni les coûts cachés liés à l'auto-hébergement, consultez** [**GLPI Network Cloud**](https://myaccount.glpi-network.cloud/register.php)**.**
{% endhint %}

GLPI fournit une image et une [pile Docker officielles via Dockerhub](https://hub.docker.com/r/glpi/glpi), utilisables pour les déploiements sur tout système exécutant Docker.

[Si vous souhaitez signaler un problème.](https://github.com/glpi-project/glpi/issues/new?template=bug_report.yml)

## Démarrage rapide de GLPI

***

Utilisez ce guide de démarrage rapide pour exécuter GLPI sur sa dernière version en local. Consultez ci-dessous les instructions pour exécuter GLPI en production. Si Docker est installé et opérationnel, téléchargez la dernière image Docker :

Afin de déployer GLPI et MySQL Stack, après l'installation de Docker, deux fichiers sont nécessaires avant de récupérer et d'exécuter l'image.

Un fichier [YAML Docker Compose](https://github.com/docker/compose) et un fichier `.env` contenant les variables d'environnement utilisées par Docker Compose pour une configuration correcte.

* Hôte de la base de données
* Port de l'hôte de la base de données
* Nom de la base de données GLPI
* Utilisateur de la base de données GLPI
* Mot de passe de la base de données GLPI

1. Choisissez le dossier de stockage de ces fichiers.
2. Créez un fichier nommé `docker-compose.yml`
3. Collez l'exemple de fichier YAML Docker Compose ci-dessous.
   1. Voici un exemple de fichier `docker-compose.yml` pour exécuter une pile de la dernière version stable de GLPI sur le port `80` avec une instance MySQL nommée `db` et une base de données nommée `glpi` on, port `3306`
   2. Les [volumes](#volumes) seront créés à l'emplacement où se trouve Docker Compose.

```sh
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:
     - "./storage/glpi:/var/glpi:rw"
   db_data:
    - "./storage/mysql:/var/lib/mysql"
```

{% hint style="success" %}
Il est possible d'ajouter des **configurations personnalisées de PHP**, si vous souhaitez par exemple augmenter la taille des upload, augmenter la limite de la mémoire PHP, modifier l'expiration du cache de session, etc.

* **Créer un fichier** (custom-config.ini for example) qui sera chargé par PHP avec les option que vous souhaitez modifier
* Ajouter dans la **section volume** de votre fichier de configuration Docker, une ligne supplémentaire pour que votre fichier PHP soit chargé :&#x20;

**`"/path/to/your/custom-config.ini:/usr/local/etc/php/conf.d/custom-config.ini:r"`**
{% endhint %}

4. Créez un fichier nommé `.env`
5. Collez les variables d'environnement ci-dessous.

{% hint style="warning" %}
Change the values to your needs if needed.
{% endhint %}

```
GLPI_DB_HOST=db
GLPI_DB_PORT=3306
GLPI_DB_NAME=glpi
GLPI_DB_USER=glpi
GLPI_DB_PASSWORD=glpi
```

6. Exécutez le *composer*

```sh
docker compose up -d
```

Une fois les conteneurs exécutés, vous pouvez accéder à GLPI à l'adresse `http://localhost`

{% hint style="success" %}
**GLPI s'installera ou se mettra à jour automatiquement si nécessaire.**
{% endhint %}

Vous pouvez désactiver ce comportement en définissant les variables d'environnement ci-dessous sur `true` dans le fichier `.env`&#x20;

* `GLPI_SKIP_AUTOINSTALL=true` – GLPI ne s'installe pas automatiquement et vous devez exécuter l'assistant ou les commandes de la console pour l'installer manuellement.
* `GLPI_SKIP_AUTOUPDATE=true` – GLPI ne se met pas à jour automatiquement et vous devez exécuter l'assistant ou les commandes de la console pour le mettre à jour manuellement.

{% hint style="info" %}
**Si vous désactivez l'installation et la mise à jour automatiques, vous pouvez utiliser les informations d'identification définies dans le fichier env, afin de configurer l'instance GLPI.**
{% endhint %}

* `GLPI_DB_HOST` – Nom d'hôte
* `GLPI_DB_NAME` – Base de données
* `GLPI_DB_USER` – Utilisateur
* `GLPI_DB_PASSWORD` – Mot de passe

## Trouver le mot de passe racine MySQL

{% hint style="info" %}
Veuillez noter que nous avons configuré un mot de passe root aléatoire pour la base de données MySQL, vous devrez donc vérifier les journaux du conteneur de base de données pour le trouver.
{% endhint %}

```sh
docker logs <db_container_id>
```

## Activer la prise en charge des fuseaux horaires

Pour initialiser la [prise en charge des fuseaux horaires pour GLPI](https://glpi-install.readthedocs.io/fr/latest/timezones.html), nous devons d'abord accorder à l'utilisateur glpi l'accès à la table `mysql.time_zone`.

1. Une fois le conteneur Docker en cours d'exécution, exécutez la commande suivante

```sh
docker exec -it <db_container_id> mysql -u root -p -e "GRANT SELECT ON mysql.time_zone_name TO 'glpi'@'%';FLUSH PRIVILEGES;"
```

{% hint style="info" %}
Le mot de passe root sera celui que vous avez trouvé précédemment dans les journaux du conteneur de base de données.

N'oubliez pas de remplacer le `<db_container_id>` par l'ID du conteneur de base de données.
{% endhint %}

2. Exécutez la commande suivante pour initialiser les fuseaux horaires sur le conteneur GLPI :

```sh
docker exec -it <glpi_container_id> /var/www/glpi/bin/console database:enable_timezones
```

{% hint style="info" %}
Remplacez le `<glpi_container_id_>` par l'ID du conteneur GLPI.
{% endhint %}

## Volumes

Par défaut, l'image `glpi/glpi` fournit un volume contenant ses répertoires `config`, `marketplace` et `files`. Pour la version GLPI 10.0.x, le répertoire marketplace n'est pas déclaré dans le volume car son chemin d'accès est différent. Vous pouvez créer manuellement un volume pour le chemin `/var/www/glpi/marketplace` si vous prévoyez de l'utiliser.

## Balises

Afin que les utilisateurs disposent de différentes options pour tester et déployer GLPI dans différentes versions, même si les dernières versions sont toujours recommandées, le Docker Composer officiel de GLPI vous permet de choisir entre [différentes balises](https://hub.docker.com/r/glpi/glpi/tags) contenant différentes versions de déploiement GLPI.

Les balises GLPI se trouvent dans le fichier Docker Compose, sur la ligne contenant le nom de l'image. Vous pouvez alors utiliser l'image suivante : `"glpi/glpi:11.0.0-nightly"` pour installer GLPI 11 version en dev sur Docker.

Voir plus de balises ici : <https://hub.docker.com/r/glpi/glpi/tags>
