#type/kb #theme/IT/tools/glpi #theme/IT/LNX/Debian # Comment sauvegarder GLPI ? L'outil GLPI dispose de configurations complexes et regroupe un grand nombre d'informations vitales pour la gestion de parc informatique. > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> Avant toute intervention majeure telle qu'une mise à jour par exemple, vous devez impérativement sauvegarder vos données.</span> Plusieurs approches sont envisageables et complémentaires. Par exemple : - Lancer une sauvegarde complète du système avec votre outil habituel (Veeam Agent For Linux par exemple). - Si vous travaillez sur une VM, arrêter la VM, créer un snapshot à froid (VM éteinte) afin de garantir l'intégrité des données. > [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> Un snapshot ne doit pas être considéré comme une sauvegarde mais il peut simplifier la procédure de retour arrière en cas de défaillance</span> Dans cette procédure, nous allons sauvegarder uniquement les données de l'application GLPI en local : dossiers de configurations et base de données. ## Présentation de l'environnement de travail Pour réaliser cette procédure, je dispose d'une VM Debian 12 avec GLPI v10.0.18 installé sur un socle LAMP : Apache2 v2.4.62, MariaDB v15.1 et PHP 8.2.28. La base de données GLPI se nomme "*glpidb*", elle est administrable avec l'utilisateur "*glpidb_admin*" qui dispose de l'ensemble des privilèges depuis "*localhost*" avec le mot de passe "`my_password`". # Sauvegarder l'application GLPI ## Sauvegarde de la base de données Pour commencer, nous allons sauvegarder la base de données de GLPI à l'aide de l'utilitaire mysqldump. > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> **mysqldump** est inclus nativement avec MySQL, et MariaDB.</span> Ouvrir une session non root et se connecter au Shell et exécuter la commande ci-dessous : ``` sudo mysqldump -u glpidb_admin -p'my_password' --databases glpidb > ~/backup_glpidb_$(date +"%Y%m%d").sql ``` La commande ci-dessus permet de : - `-u` : se connecter à l'instance MariaDB en tant que "*glpidb_admin*" - `-p` : demander la saisie du mot de passe pour le compte utilisateur spécifié. - `--databases` : spécifie le nom de la base de données à sauvegarder. - `>` : permet de spécifier le chemin du fichier de sortie `~/backup_glpidb_*.sql`. - `$(date +"%Y%m%d)` : est une variable qui contient la date au format YYYY-MM-DD. > [!info] À savoir !<span style="font-weight: normal; color: var(--text-normal)"> La sauvegarde sera plus ou moins longue en fonction de la quantité d'informations stockées dans votre base de données.</span> Vérifiez que le fichier de sauvegarde a bien été créé avec la commande : ``` ls -l ~/backup_glpidb_*.sql ``` La sortie de cette commande devrait afficher le fichier dump de sauvegarde de la base : ![[_img-kb-glpi-backup.png]] Afficher le contenu du fichier à l'aide de la commande : ``` less backup_glpidb_20250408.sql ``` En analysant le contenu de ce fichier, vous pourrez constater que les instructions SQL permettent de : - Créer la base de données "*glpidb*" si elle n'existe pas (cf `CREATE DATABASE IF NOT EXISTS`). - Si une table existe, elle sera supprimée et recréée (cf. `DROP TABLE IF EXISTS`) - Les données sont ensuite insérées dans chaque table. ## Sauvegarder les données L'application GLPI est composée de scripts PHP et d'autres fichiers relatifs au bon fonctionnement de l'application en elle-même. Elle contient également vos données : - Le répertoire "**files**" contient les documents ajoutés en tant que pièce jointe dans les tickets - Le répertoire "**plugins**" contient les extensions que vous avez ajoutées à votre GLPI. - En complément, les répertoires "**config**" et "**marketplace**" sont aussi importants. > [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> L'éditeur Glpi préconise de déplacer les dossiers "*files*", "*config*" et "*logs*" pour des raisons de sécurité. Cf. documentation GLPI [Files and directories locations](https://glpi-install.readthedocs.io/en/latest/install/index.html#files-and-directories-locations). </span> Dans cette procédure, nous partirons du principe qu'aucune directive particulière n'a été ajoutée pour déplacer les données GLPI. Il nous suffit de dupliquer le dossier GLPI dans votre dossier personnel : ``` sudo cp -Rf /var/www/glpi/ ~/backup_glpi/var/www/glpi/ ``` Par précaution, vérifiez que les répertoires suivants sont bien présents et qu'ils ne sont pas vides avec la commande : files, plugins, config et marketplace. Les fichiers "**config_db.php**" et "**glpicrypt.key**" du répertoire "**config**" sont particulièrement précieux. ``` ls -l /home/glpi_adm/backup_glpi/var/www/glpi/ ``` Si certains répertoires sont vides, vous avez certainement configuré des directives pour sécuriser l'accès aux données GLPI. Dans ce cas, référez-vous à votre procédure d'installation initiale pour vérifier l'emplacement des dossiers. # Restauration des données > [!danger] Attention !<span style="font-weight: normal; color: var(--text-normal)"> Si vous testez cette procédure pour la première fois, exécutez la procédure sur un clone de votre VM. Dans tous les cas, nous vous recommandons d'éteindre la VM et de créer un snapshot avant de commencer.</span> Cette procédure décrit les étapes de restauration de GLPI sur la même machine sans réinstaller le socle LAMP. ## Réinstaller GLPI Pour restaurer GLPI suite à une défaillance, nous allons commencer par supprimer la version défaillante : ``` sudo rm -Rf /var/www/glpi/ ``` Récupérer l'URL de l'archive d'installation depuis le GitHub officiel de GLPI correspondante à la **version que vous souhaitez installer**. Dans cet exemple, c'est la version 10.0.18 qui sera installée. Télécharger le fichier compressé : ``` wget https://github.com/glpi-project/glpi/releases/download/10.0.18/glpi-10.0.18.tgz ``` Décompresser l'archive .**tgz** dans le répertoire du site par défaut d’apache "**/var/www/**", ce qui donnera le chemin d'accès "**/var/www/glpi**" pour GLPI. ``` sudo tar -xzvf glpi-10.0.18.tgz -C /var/www ``` Nous allons définir l'utilisateur "**www-data**" correspondant au compte de service d’**Apache2**, en tant que **propriétaire** sur les fichiers GLPI. ``` sudo chown www-data /var/www/glpi -R ``` Quand c'est fait, vous pouvez passer à la suite. ## Restaurer la base de données Pour restaurer la base de donnée glpidb à partir du fichier `backup_glpidb_20250408103826.sql` exécuter la commande : ``` sudo mariadb -u glpidb_admin -p < backup_glpidb_20250408103826.sql ``` ## Restaurer les fichiers Voici les commandes à exécuter : ``` sudo cp -Rf ~/backup_glpi/var/www/glpi/files /var/www/glpi/ sudo cp -Rf ~/backup_glpi/var/www/glpi/plugins /var/www/glpi/ sudo cp -Rf ~/backup_glpi/var/www/glpi/config /var/www/glpi/ sudo cp -Rf ~/backup_glpi/var/www/glpi/marketplace /var/www/glpi/ ``` Puis, nous allons modifier les permissions sur les données du répertoire "**/var/www/glpi**" pour que l'utilisateur "**www-data**", utilisé par Apache2, soit propriétaire : ``` sudo chown -R www-data:www-data /var/www/glpi/ ``` # Conclusion À l’aide de cette procédure, vous êtes à présent capable de sauvegarder la base de données GLPI ainsi que ses dossiers vitaux. Pour compléter cette procédure, vous pourriez envisager de : - Rédiger un script automatisé via une tâche cron. - Rédiger et tester la procédure de restauration. ## Références - IT-CONNECT : - [Mettre à jour GLPI](https://www.it-connect.fr/tuto-mettre-a-jour-glpi/#IV_Sauvegarder_les_donnees). - [Sauvegarder et restaurer une base de données avec mysqldump](https://www.it-connect.fr/comment-sauvegarder-et-restaurer-une-base-de-donnees-avec-mysqldump/ "Comment sauvegarder et restaurer une base de données avec Mysqldump ?") %% # Créer un script de sauvegarde ``` #!/bin/bash # Configuration de base: datestamp e.g. YYYYMMDD DATE=$(date +"%Y-%m-%d") TIMESTAMP=$(date +"%Y%m%d%H%M%S") # Dossier où sauvegarder les backups BACKUP_DIR=~/BCKP_GLPI/$DATE # Identifiants MySQL MYSQL_USER="glpidb_admin" MYSQL_PASSWORD='my_password' GLPIDB="glpidb" # Commandes MySQL (aucune raison de modifier ceci) MYSQL=/usr/bin/maridb MYSQLDUMP=/usr/bin/mariadb-dump # Nombre de jours à garder les dossiers (seront effacés après X jours) RETENTION=3 # ---- NE RIEN MODIFIER SOUS CETTE LIGNE ------------------------------------------ # # Create a new directory into backup directory location for this date mkdir -p "$BACKUP_DIR" # Dumb the databases in seperate names and the .sql file $MYSQLDUMP --force --opt -u $MYSQL_USER -p$MYSQL_PASSWORD --databases $GLPIDB > "$BACKUP_DIR/$GLPIDB$TIMESTAMP.sql" # Remove files older than X days # find $BACKUP_DIR/* -mtime +$RETENTION -delete ``` Pour vérifier l'empalcement des fichiers Par exemple : - Vérifier l'emplacement du dossier "*config*" à l'aide de la commande : ``` sudo cat /var/www/glpi/inc/downstream.php ``` - Vérifier l'emplacement du dossier "*files*" et "*logs*" à l'aide de la commande : ``` sudo cat /etc/glpi/local_define.php ``` Dans mon cas le dossier "*config*" a été déplacé dans `/etc/glpi` et le dossier "*files*" a été déplacé dans `/var/lib/glpi`. Je dois donc les ajouter à mon dossier de sauvegarde : ``` sudo cp -Rf /etc/glpi/ ~/backup_glpi/etc/glpi/ sudo cp -Rf /var/lib/glpi ~/backup_glpi/var/lib/glpi ``` %%