Aller au contenu

📚 Documentation de déploiement GLPI

Prérequis de déploiement CI/CD GitLab

# Prérequis Définition Détails
1 📘 Template globale Compte utilisateur avec permissions ✅ Compte créé sur GitLab
✅ Permissions pour gérer projet et pipelines CI/CD
✅ Accès aux paramètres du projet
2 📙 Projet CD Dépôt Git initialisé ✅ Projet créé sur GitLab
✅ Code source importé ou initialisé
✅ Structure de branches définie (ex: main, develop, feature)
3 Serveur de déploiement Serveur configuré pour déploiements ✅ Accès SSH configuré pour GitLab
✅ Dépendances installées (runtime, BDD, etc.)
✅ Variables d'environnement de production configurées
4 Runner GitLab Exécuteur de jobs CI/CD ✅ Runner installé (shared, specific, ou group)
✅ Runner enregistré et connecté au projet
✅ Tags configurés si nécessaire
5 Fichier .gitlab-ci.yml Configuration du pipeline CI/CD ✅ Fichier à la racine du projet
✅ Stages définis (build, test, deploy, etc.)
✅ Jobs configurés avec scripts
✅ Règles de déclenchement définies
6 Secrets et variables CI/CD Informations sensibles et variables ✅ Secrets (clés API, mots de passe) stockés sécurisément
✅ Variables d'environnement pour les stages
✅ Masquage configuré pour infos sensibles

⚠️ Note importante : Assurez-vous de vérifier chaque élément pour garantir un déploiement fluide et sécurisé de vos applications avec GitLab CI/CD.


📌 Légende : - ✅ : Élément essentiel à configurer - # : Numéro de l'étape dans le processus de configuration


📌 Légende : - ✅ : Élément essentiel à configurer - # : Numéro de l'étape dans le processus de configuration

🏗️ Structure du projet

Le projet GLPI est composé des fichiers clés suivants :

  • start.sh: Script d'initialisation
  • deploy.yml: Fichier de déploiement Docker Compose
  • .gitlab-ci.yml: Configuration GitLab CI/CD
  • hosts.yml: Configuration des hôtes Ansible

⚙️ Fichiers de configuration

🐳 docker-compose.yml

Ce fichier définit la configuration Docker Compose pour le déploiement de GLPI.

Voir le contenu de docker-compose.yml
version: "3.2"

networks:
  public:
    external: true
  glpi:
    driver: overlay
    attachable: true

services:
  mysql:
    image: mysql:8.0
    hostname: mysql
    command: --default-authentication-plugin=caching_sha2_password
    env_file:
      - ${GLPI_STACK_DIR}/.env
    volumes:
      - ${GLPI_VOLUMES_DIR}/glpidb:/var/lib/mysql
    networks:
      - glpi

  glpi:
    image: elestio/glpi:10.0.16
    hostname: glpi
    env_file:
      - ${GLPI_STACK_DIR}/.env
    ports:
      - "8899:80"
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ${GLPI_VOLUMES_DIR}/templates:/templates
      - ${GLPI_VOLUMES_DIR}/glpidata:/var/www/html/glpi
      - ${GLPI_VOLUMES_DIR}/glpiconfig/start.sh:/opt/start.sh
    environment:
      - TIMEZONE=Europe/Brussels
    depends_on:
      - mysql
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.glpi.rule=Host(`glpi.testing.kaisens.fr`)"
        - "traefik.http.routers.glpi.entrypoints=websecure"
        - "traefik.http.routers.glpi.service=glpi"
        - "traefik.http.services.glpi.loadbalancer.server.port=80"
    networks:
      - glpi
      - public

Points clés: - 🗃️ MySQL 8.0 comme base de données - 🖥️ GLPI version 10.0.16 - 🔒 Configuration Traefik pour le routage et HTTPS - 💾 Montages de volumes pour la persistance des données

🖥️ hosts.yml

Ce fichier Ansible définit la configuration des hôtes pour le déploiement.

Voir le contenu de hosts.yml
all:
  children:
    glusterfs_nodes: &id001
      hosts:
        instance0: ''
        # instance1: ''
    swarm_managers: *id001
    swarm_nodes: *id001
    swarm_workers: *id001
    load_balancers: *id001
  hosts:
    instance0:
      ansible_host: 142.44.212.148
      ansible_user: ops
    #instance1:
      #ansible_host: 141.94.132.78
      #ansible_user: ops

Points clés: - 🌐 Groupes d'hôtes pour différents rôles (GlusterFS, Swarm, etc.) - 🖥️ Un hôte actif (instance0) - 🔗 Utilisation d'ancres YAML pour la réutilisation de configuration

🚀 deploy.yml

Ce fichier définit les variables d'environnement pour le déploiement de test.

Voir le contenu de deploy.yml
project_name: "glpi"
docker_compose_path: "testing/docker-compose.yml"
dns_zone: kaisens.fr

volume_dirs:
  - dir_name: templates
    fill_from: testing/templates/
  - dir_name: glpidata
  - dir_name: glpidb
  - dir_name: glpiconfig
    fill_from: testing/glpiconfig/

env_vars:
  MYSQL_TCP_PORT: 3306
  MYSQL_HOST: glpi_mysql

hashicorp_vault_secrets:
  - path: secret/data/test/apps/glpi
    mappings:
      MYSQL_DATABASE: MYSQL_DATABASE
      MYSQL_PASSWORD: MYSQL_PASSWORD
      MYSQL_USER: MYSQL_USER
      MYSQL_ROOT_PASSWORD: MYSQL_ROOT_PASSWORD

🔄 .gitlab-ci.yml

Ce fichier inclut un template pour le déploiement d'application:

Voir le contenu de .gitlab-ci.yml
include:
  - project: kaisensdata/devops/cicd-templates
    ref: master
    file:
      - templates/cd-deploy-app.yml

📜 Scripts

🏁 start.sh

Ce script Bash initialise et configure l'environnement GLPI.

Fonctionnalités principales:

  1. 📌 Définit la version de GLPI
  2. 🕰️ Configure le fuseau horaire
  3. 📥 Télécharge et installe GLPI si nécessaire
  4. 📄 Copie un fichier de ticket personnalisé si disponible
  5. 🛠️ Configure Apache en fonction de la version de GLPI
  6. ⏲️ Configure le cron pour GLPI
  7. 🗃️ Installe la base de données GLPI si elle n'existe pas
  8. 🚀 Démarre Apache

Points clés:

  • 🔍 Utilise l'API GitHub pour obtenir la dernière version de GLPI
  • 🔧 Gère différentes configurations Apache selon la version de GLPI
  • 🎨 Permet la personnalisation du formulaire de ticket

🎨 Personnalisation

➕ Ajout du bouton Redmine

Pour ajouter un bouton de création de ticket Redmine dans l'interface GLPI, modifiez le fichier ticket.form.php:

  1. Bouton HTML:
Voir le code du bouton HTML
<?php if (isset($_GET["id"]) && ($_GET["id"] > 0)): ?>
    <div class="redmine-action-buttons">
        <form method="post" action="<?php echo "https://ticketsynchronizer.testing.kaisens.fr/redmine/accept/" . $_GET["id"]; ?>">
            <button type="submit" class="redmine-button">
                <i class="fas fa-ticket-alt"></i>
                Créer le ticket Redmine
            </button>
        </form>
    </div>
<?php endif; ?>
  1. Style CSS:
Voir le code CSS
<style>
    .redmine-action-buttons {
        position: fixed;
        left: 240px;
        top: 67%;
        transform: translateY(-50%);
        z-index: 1000;
    }

    .redmine-button {
        background-color: #db6b57;
        color: white;
        border: none;
        padding: 10px 20px;
        font-size: 14px;
        font-weight: bold;
        border-radius: 4px;
        cursor: pointer;
        transition: all 0.3s ease;
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .redmine-button:hover {
        background-color: #c0392b;
    }

    .redmine-button i {
        margin-right: 8px;
    }
</style>
  1. Inclusion de Font Awesome:
Voir le code d'inclusion de Font Awesome
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">

Ces modifications ajoutent un bouton rouge fixe sur le côté gauche de l'interface GLPI, permettant de créer un ticket Redmine correspondant au ticket GLPI actuellement affiché.