📚 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'initialisationdeploy.yml: Fichier de déploiement Docker Compose.gitlab-ci.yml: Configuration GitLab CI/CDhosts.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:
- 📌 Définit la version de GLPI
- 🕰️ Configure le fuseau horaire
- 📥 Télécharge et installe GLPI si nécessaire
- 📄 Copie un fichier de ticket personnalisé si disponible
- 🛠️ Configure Apache en fonction de la version de GLPI
- ⏲️ Configure le cron pour GLPI
- 🗃️ Installe la base de données GLPI si elle n'existe pas
- 🚀 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:
- 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; ?>
- 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>
- 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é.