GLPI 11 en Docker : installation simple avec mon image personnalisée

Dans ce tutoriel, je vais vous montrer comment déployer GLPI 11 grâce à une image Docker que j’ai créée moi-même.

Habituellement, je déploie GLPI directement sur un serveur Linux Ubuntu en utilisant Apache et PHP depuis les dépôts PPA d’Ondřej, pour bénéficier des versions les plus récentes. Toute l’installation et la configuration de GLPI se font alors à la main. Pour gagner du temps, j’avais commencé par créer un script d’automatisation que vous pouvez retrouver ici : https://git.rdr-it.com/root/scripts/-/tree/master/Linux/Logiciels/GLPI/Installation

Mais comme je dois souvent installer GLPI pour réaliser des tests, recréer une VM à chaque fois devenait fastidieux. J’ai donc décidé de conteneuriser cette installation et de vous partager le résultat pour un déploiement rapide et pratique.

Présentation du conteneur

Pour commencer, vous trouverez les sources du conteneur ici : https://git.rdr-it.com/dockerfile/glpi

Si besoin vous pouvez analyser pour vous même le fichier dockerfile.

La partie le plus important est le fichier docker-entrypoint.sh qui va permettre toutes l’automatisation du déploiement de GLPI et sa configuration lors du démarrage.

En fonction des variables d’environnements que vous allez configurer avec le fichier docker-compose.yml, GLPI 11 sera complément installé et configuré pour être prêt à l’emploi.

Le stack présent dans le fichier docker-compose.yml va déployer les services suivants :

  • Base de données MariaDB
  • Conteneur GLPI (serveur Web Apache avec PHP)
  • Conteneur GLPI pour les tâches planifiées
  • Conteneur Redis pour le cache

Déployer GLPI 11 avec l’image Docker

Vous trouverez l’image GLPI 11 ici : https://hub.docker.com/r/rdrit/glpi

Pour faciliter le déploiement de GLPI, j’ai préparé un dépôt avec le fichier docker-compose et un fichier de variable qui est documenté que vous trouvez là : https://git.rdr-it.com/root/docker-compose/-/tree/main/GLPI

Avant de commencer, je vous invite à le lire fichier README qui va vous guider la configuration des différentes variables.

Sur votre serveur hôte Docker, commencer par créer un dossier pour cloner le dossier dépôt :

mkdir -p /containers/glpi11

Placer vous dans le dossier et cloner le dossier GLPI :

bash <(wget -qO- https://git.rdr-it.com/root/scripts/-/raw/master/Linux/rdr-it/get-docker-compse/get.sh) GLPI

Copier le sample.env en le nommant .env

cp sample.env .env

Editer le fichier .env

nano .env

La configuration terminée, démarrer les conteneurs :

docker compose up -d

Vous pouvez suivre les actions effectuées en regardant les logs :

docker compose logs -f

Depuis un navigateur, aller à l’URL configuré et connecter vous avec le compte glpi/glpi.

Publication derrière un reverse proxy

Il est possible de publier le conteneur GLPI derrière un reverse proxy :

Nginx :

# Specify the IP address of the Docker or GLPI 11 host server where it is installed, along with the port
upstream glpi11web{
    server 172.0.0.1:80;
}

server{
    listen 443 ssl;
    http2 on;
    server_name glpi.domain.tld;
    access_log /var/log/nginx/glpidomaintld_access.log;

    #more_clear_headers Server;
    #more_clear_headers X-Powered-By;

    client_max_body_size 0;

    ssl_certificate /etc/nginx/ssl/glpidomaintld.cer;
    ssl_certificate_key /etc/nginx/ssl/glpidomaintld.key

    location /{
        proxy_pass http://glpi11web;
        proxy_ssl_verify off;
        include proxy_params;
    }
}

server{
    listen 80;
    server_name glpi.domain.tld;
    return 301 https://$host$request_uri;
}

Les labels pour Traefik :

labels:
  - "traefik.enable=true"
  - "traefik.docker.network=proxy"
  - "traefik.http.routers.glpi11.rule=Host(`glpi.domain.tld`)"
  - "traefik.http.routers.glpi11.entrypoints=web"
  - "traefik.http.services.glpi11.loadbalancer.server.port=80"
  - "traefik.http.routers.glpi11.service=glpi11"
  - "traefik.http.routers.glpi11.middlewares=glpi11-headers"
  - "traefik.http.middlewares.glpi11-headers.headers.sslProxyHeaders.X-Forwarded-Proto=https"
  - "traefik.http.middlewares.glpi11-headers.headers.sslProxyHeaders.X-Forwarded-For=true"
  - "traefik.http.middlewares.glpi11-headers.headers.sslProxyHeaders.X-Real-Ip=true"
  - "traefik.http.middlewares.glpi11-headers.headers.sslProxyHeaders.X-Forwarded-Port=443"
  - "traefik.http.middlewares.glpi11-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
  - "traefik.http.middlewares.glpi11-headers.headers.customRequestHeaders.X-Forwarded-Port=443"

Vous disposez désormais de toutes les clés pour déployer GLPI 11 rapidement grâce au conteneur que j’ai conçu.

Si vous rencontrez des difficultés ou si vous avez des questions, n’hésitez pas à laisser un commentaire, je me ferai un plaisir d’y répondre.

Utilisez-vous déjà GLPI en conteneur ou sur une installation classique ?

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.

4 réflexions au sujet de “GLPI 11 en Docker : installation simple avec mon image personnalisée”

  1. Merci pour ton tuto ultra bien détaillé et clair avec toute les infos sur le git concernant les variables etc..
    J’ai mis en prod GLPI sur une VM Almalinux et çà fonctionne nickel..
    Par contre j’ai une migration a faire d’un autre GLPI 10.0.16 en direct sur une Debian classique, et il possible de copier les anciennes données et la base de donnée sur la version en docker ?
    Il y a des variables a modifier dans le fichier .env si j’ai bien compris.
    Merci d’avance.

    Répondre
    • Bonjour,

      Merci pour ton retour, concernant la migration que tu souhaites faire, voici comment je procèderai :
      – Monter de version 10.0.16 -> 11.x.y directement sur la version « Debian classique »
      – Déploiement d’un conteneur à la même vers en GLPI 11.
      – Sauvegarde la base de données SQL (classique)
      – Restauration de la base de données sur le conteneur
      – Copie des fichiers « classique » vers « conteneur »

      Dans le fichier .env, pour faciliter la « reconfiguration » de GLPI remettre les informations pour le comptes MariaDB/MySQL

      Romain

      Répondre
      • Bonsoir,
        Merci pour les conseils, pas de soucis sur le principe, j’ai fait un backup des fichiers a restaurer dans le nouveau GLPI en docker dans le dossier /data/glpi.
        J’ai fait une sauvegarde de la base de donnée avec mariadb-dump qui ma donné un fichier ******.sql que j’ai aussi déplacé sur le nouveau serveur, par contre je ne trouve pas comment faire une restore de la base sql dans le dossier /data/mariadb du conteneur.
        J’ai bien compris que il n’y a pas de base sur le serveur en lui même, c’est inclus dans le dossier du conteneur.

        Répondre
        • Bonjour,

          Le service de la base de données se trouve dans le fichier docker-compose.yml (glpi-db).

          Une fois les services démarrés (conteneur), il est possible de faire la restauration de la base de données : docker compose exec -T glpi-db ariadb -u -p < dump.sql

          Une alternative aussi, c'est de publier temporaire MariaDB avec un transfert de port et de le faire avec HeidiSQL par exemple.

          Romain

          Répondre

Laisser un commentaire