Déployer GLPI et OCS en HTTPS avec Docker-compose en 2 minutes

docker-compose
docker ocs glpi mysql

Introduction

Aujourd’hui, je veux te parler d’un projet que j’ai créé récemment avec Docker-compose.

Si tu es comme moi et que tu gères plusieurs serveurs et applications, tu sais à quel point ça peut être fastidieux de tout installer et configurer manuellement.

C’est pourquoi j’ai créé ce projet pour te faciliter la vie en déployant automatiquement GLPI et OCS avec HTTPS.

GLPI et OCS, ce sont deux logiciels open-source très utiles pour gérer les actifs informatiques et les inventaires de ton réseau. Avec ce projet tu peux les installer en un rien de temps et bénéficier du chiffrement HTTPS pour une sécurité accrue. Et l’avantage c’est que tout est automatisé grâce à un script que j’ai écrit pour toi !

Dans cet article, je vais te montrer comment j’ai mis à jour ce projet en y ajoutant le support HTTPS pour GLPI et OCS.

Si tu veux juste le script c’est dispo sur mon Gitlab.

Si tu es prêt à simplifier ta vie de sysadmin, reste avec moi et découvrons ensemble comment déployer GLPI et OCS en HTTPS avec Docker-compose.

Présentation du projet

On le sait tous, GLPI et OCS sont deux outils incontournables pour gérer notre parc informatique et suivre l’inventaire de notre matériel.

Mais leur installation et configuration peuvent parfois être un peu longues et fastidieuses, n’est-ce pas ? 😅

Eh bien, j’ai une excellente nouvelle pour toi : avec ce projet Docker-compose, fini les prises de tête ! Tu vas pouvoir déployer GLPI et OCS en un rien de temps, le tout sécurisé grâce au protocole HTTPS.

Déployer ton projet docker GLPI/OCS en 1 instant

Simple :

git clone https://gitlab.com/babidi34/docker-compose-ocs-glpi-mysql
cd docker-compose-ocs-glpi-mysql
  • Si tu as un certificat et une clé ssl :
    • place les dans le dossier ssl et renomme-les respectivement ssl.crt et ssl.key.
  • Si tu n’as pas de certificat et clé SSL :
    • tu n’as rien à faire le script va générer un certificat auto-signé pour toi

Lance le script :

./setup.sh

En une ou 2 minutes le script aura déployer tes services OCS et GLPI en HTTPS (ainsi qu’une base de données MySQL)

Utiliser ses propres certificats SSL

Si tu veux utiliser tes propres certificats SSL, voici comment faire :

  1. Assure-toi d’avoir tes fichiers ssl.crt et ssl.key prêts. Ce sont les certificats SSL que tu souhaites utiliser pour sécuriser tes conteneurs GLPI et OCS.
  2. Dans le dossier du projet, tu trouveras un sous-dossier nommé ssl/. Place tes fichiers ssl.crt et ssl.key dans ce dossier.
  3. Lance le script :
./setup.sh

Utilisation des services GLPI et OCS avec HTTPS

Une fois les conteneurs créent (généralement 2-3 minutes), les services GLPI et OCS sont disponibles

Les identifiants par défaut

GLPI :

  • Username : glpi
  • Password : glpi

OCS Inventory :

  • Username : admin
  • Password : admin

Comprendre comment fonctionne le projet

Le docker-compose :


version: '3.3'

services:
  mysql :
    image : mysql:8-debian
    container_name : mysql
    hostname: mysql
    restart: always
    expose :
      - "3306"
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
    volumes :
      - ./sql/:/docker-entrypoint-initdb.d/
      - sqldata:/var/lib/mysql
    networks:
      glpi_project:
  glpi:
    image: debian:11
    container_name: glpi
    hostname: glpi
    restart: always
    ports:
      - 443:443
    env_file:
      - secrets.env
    volumes:
      - ./ssl/ssl.key:/etc/ssl/glpi.key
      - ./ssl/ssl.crt:/etc/ssl/glpi.crt
      - ./front/vhost_glpi.conf:/etc/nginx/sites-available/glpi.conf
      - ./scripts/glpi-setup.sh:/usr/local/bin/glpi-setup.sh
      - glpidata:/var/www/html/glpi/
    networks:
      glpi_project:
    depends_on:
      - mysql
    command: /usr/local/bin/glpi-setup.sh
  ocs:
    image: ocsinventory/ocsinventory-docker-image:2.10
    container_name: ocs
    hostname: ocs
    restart: always
    ports:
      - 8443:443
    env_file:
      - secrets.env
    volumes:
      - ./ssl/ssl.key:/etc/ssl/private/ocs.key
      - ./ssl/ssl.crt:/etc/ssl/certs/ocs.crt
      - ./front/vhost_ocs.conf:/etc/nginx/sites-available/ocs.conf
      - ./scripts/ocs-setup.sh:/usr/local/bin/ocs-setup.sh
      - ./front/ocs_nginx.conf:/root/nginx.conf
      - perlcomdata:/etc/ocsinventory-server
      - extensionsdata:/usr/share/ocsinventory-reports/ocsreports/extensions
      - varlibdata:/var/lib/ocsinventory-reports
      - httpdconfdata:/etc/httpd/conf.d
    networks:
      glpi_project:
    depends_on:
      - mysql
    command: /usr/local/bin/ocs-setup.sh

 
networks:
  glpi_project:

volumes:
  sqldata:
  glpidata:
  perlcomdata:
  extensionsdata:
  varlibdata:
  httpdconfdata:

Version :

La version de Docker Compose utilisée est ‘3.3’.

Services :

Le fichier décrit trois services : mysql, glpi et ocs.

mysql :

Ce service utilise l’image mysql:8-debian pour déployer un conteneur MySQL. Il expose le port 3306 et stocke les données dans un volume nommé sqldata. Le conteneur utilise le réseau glpi_project.

GLPI :

Ce service utilise l’image debian:11 pour déployer un conteneur GLPI. Il redirige le port 443 vers le port 443 du conteneur. Le conteneur utilise le réseau glpi_project et dépend du service mysql. Les certificats SSL, les configurations et les scripts nécessaires sont montés dans les volumes appropriés. Les données GLPI sont stockées dans le volume glpidata.

OCS :

Ce service utilise l’image ocsinventory/ocsinventory-docker-image:2.10 pour déployer un conteneur OCS Inventory. Il redirige le port 8443 vers le port 443 du conteneur. Le conteneur utilise le réseau glpi_project et dépend du service mysql. Les certificats SSL, les configurations et les scripts nécessaires sont montés dans les volumes appropriés. Les données OCS sont stockées dans les volumes perlcomdata, extensionsdata, varlibdata et httpdconfdata.

Réseau :

Un seul réseau est défini : glpi_project. Tous les services (mysql, glpi et ocs) sont connectés à ce réseau.

Volumes :

Plusieurs volumes sont définis pour stocker les données et les configurations :

sqldata :

Stocke les données de la base de données MySQL.

glpidata :

Stocke les données de GLPI.

perlcomdata, extensionsdata, varlibdata et httpdconfdata :

Stockent les données et les configurations d’OCS Inventory.

Dossier front :

Le dossier front contient les fichiers de configurations des serveurs web utilisé dans les conteneurs docker ocs et glpi.

Dossier sql :

Contient les fichiers SQL pour initialiser les bases de données de GLPI et OCS dans le conteneur docker mysql.

Dossier scripts :

Ce dossier contient les scripts glpi-setup.sh et ocs-setup.sh utilisé lors de la création de OCS et GLPI pour les configurer.

glpi-setup.sh :

Voici une explication rapide des différentes étapes du script :

  1. Le script vérifie si le fichier de configuration de la base de données GLPI (/var/www/html/glpi/config/config_db.php) existe déjà. Si ce n’est pas le cas, cela signifie que GLPI n’est pas encore installé et configuré et le script continue à exécuter les étapes suivantes.
  2. Le script met à jour les paquets et installe les paquets nécessaires pour le serveur web Nginx et PHP.
  3. Il télécharge la version 9.5.7 de GLPI depuis GitHub, l’extrait dans /var/www/html/ et change le propriétaire des fichiers GLPI pour l’utilisateur www-data (utilisé par nginx).
  4. Le script crée un lien symbolique pour activer la configuration Nginx de GLPI et supprime la configuration par défaut de Nginx. Il ajoute également la directive daemon off; à la configuration de Nginx pour empêcher le processus Nginx de devenir un démon.
  5. Le script installe GLPI en utilisant l’outil de console. Il spécifie les informations de connexion à la base de données (hôte, utilisateur, mot de passe et nom de la base de données) et la langue par défaut. L’option --no-interaction permet d’installer GLPI sans interaction utilisateur.
  6. Enfin, le script démarre le service PHP-FPM et lance le serveur Nginx.

En résumé, ce script installe et configure GLPI sur un serveur Debian avec Nginx si ce n’est pas déjà fait, et démarre ensuite les services PHP-FPM et Nginx pour servir l’application GLPI.

On l’utilise pour notre conteneur GLPI mais il peut aussi être utilisé sur un serveur Debian 11.

ocs-setup.sh :

Il est utilisé pour configurer OCS Inventory avec Nginx comme proxy inverse.

Voici une explication rapide des différentes étapes du script :

  1. Le script vérifie si le fichier de configuration d’OCS Inventory pour Nginx (/etc/nginx/sites-enabled/ocs.conf) existe déjà. Si ce n’est pas le cas alors ça signifie qu’OCS Inventory n’est pas encore configuré et le script continue à exécuter les étapes suivantes.
  2. Le script installe le paquet iproute2 (j’ai oublié de le retirer, à la base c’était pour faire du debug 😅) et télécharge le paquet Nginx pour Ubuntu.
  3. Il télécharge et installe le paquet Nginx.
  4. Le script copie un fichier de configuration Nginx spécifique pour OCS Inventory (/root/nginx.conf) dans le répertoire de configuration de Nginx (/etc/nginx/nginx.conf). Il supprime également le fichier de configuration par défaut de Nginx.
  5. Il crée les répertoires /etc/nginx/auth et /etc/nginx/sites-enabled, puis crée un lien symbolique pour activer la configuration Nginx d’OCS Inventory.
  6. Le script crée un fichier de mot de passe pour l’authentification HTTP basique avec les informations d’identification ocsapi et un mot de passe chiffré.
  7. Enfin, le script démarre le serveur Apache (apachectl start) et lance le serveur Nginx.

Le script configure OCS Inventory avec Nginx comme proxy inverse, si ce n’est pas déjà fait et démarre ensuite les services Apache et Nginx pour servir l’application OCS Inventory.

Le fichier secrets.env :

Le fichier contient les user et mot de passe des base de données des services, tu peux les modifier si besoin.

Le fichier setup.sh

C’est le fichier qui lances pour toi le docker-compose avec tous ce qu’il faut.

#!/bin/bash


source secrets.env

sql_final_file="sql/initdb.sql"

# Lisez le fichier SQL d'origine et remplacez les variables par les valeurs définies
sed -e "s|\${glpi_database_name}|${glpi_database_name}|g" \
    -e "s|\${glpi_database_user}|${glpi_database_user}|g" \
    -e "s|\${glpi_database_password}|${glpi_database_password}|g" \
    -e "s|\${OCS_DB_NAME}|${OCS_DB_NAME}|g" \
    -e "s|\${OCS_DB_USER}|${OCS_DB_USER}|g" \
    -e "s|\${OCS_DB_PASS}|${OCS_DB_PASS}|g" \
    sql/initdb.sql.template > "$sql_final_file"

if [ ! -f ssl/ssl.crt ] || [ ! -f ssl/ssl.key ]; then
    echo "Les fichiers ssl.crt et ssl.key sont manquants dans le dossier ssl/. Génération d'un certificat auto-signé..."
    mkdir -p ssl
    openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout ssl/ssl.key -out ssl/ssl.crt -subj "/C=FR/ST=France/L=Paris/O=entreprise/CN=localhost" 
fi

docker-compose build && docker-compose up -d
  1. Le script commence par charger les variables d’environnement depuis le fichier secrets.env.
  2. Ensuite, le script lit le fichier SQL modèle (sql/initdb.sql.template) et remplace les variables par les valeurs définies dans secrets.env. Le fichier final est enregistré sous sql/initdb.sql.
  3. Le script vérifie si les fichiers de certificat SSL (ssl/ssl.crt) et de clé SSL (ssl/ssl.key) existent dans le dossier ssl/. Si ces fichiers n’existent pas, le script génère un certificat SSL auto-signé avec la commande openssl.
  4. Enfin, le script construit et démarre les services définis dans le fichier docker-compose.yml en utilisant la commande docker-compose build && docker-compose up -d.

En gros ce script prépare les fichiers de configuration nécessaires, génère un certificat SSL auto-signé si nécessaire et déploie les services GLPI et OCS Inventory à l’aide de Docker Compose.

Conclusion

Dans cet article, nous avons vu comment déployer GLPI et OCS en HTTPS avec Docker-compose.

Nous avons ajouté le support HTTPS pour sécuriser les communications entre les clients et les serveurs GLPI et OCS et avons automatisé le processus de déploiement avec un script.

Ce projet facilite grandement l’installation et la configuration de ces deux outils indispensables pour gérer ton parc informatique et suivre l’inventaire de ton matériel.

Je t’encourage vivement à essayer ce projet mis à jour et à partager tes commentaires et tes suggestions pour l’améliorer encore davantage.

Besoin d’aide ?

Si jamais tu te retrouves coincé(e) en sauvegardant ou en restaurant ton site WordPress, n’hésite pas à me joindre pour un coup de main ==> page de contact.

Je suis là pour toi si tu as des questions ou des soucis avec ton serveur ou tes scripts en général.

Je mets à profit mon savoir-faire pour t’épauler dans la prise en charge de ton site et de ton infrastructure.

Le bouche-à-oreille est notre meilleur ami, merci de partager autour de toi 🫀

Laisser un commentaire