#!/bin/bash
# --------------------------------------------------------------------------
# GLPI Backup Script adapté pour GLPI 10.0.1.17 et ta configuration
# --------------------------------------------------------------------------
# === Fichier de configuration ===
BACKUP_CONFIG="/opt/scripts/glpi-backup/glpi-backup.conf"
# === Fonction pour lire les variables du fichier de config ===
read_config() {
local key="$1"
grep "^${key}=" "$BACKUP_CONFIG" | cut -d'=' -f2- | tr -d '"'
}
# === Lecture des variables de configuration ===
GLPI_DIR=$(read_config "GLPI_DIR")
GLPI_DATA_DIR=$(read_config "GLPI_DATA_DIR")
DB_HOST=$(read_config "DB_HOST")
DB_NAME=$(read_config "DB_NAME")
DB_USER=$(read_config "DB_USER")
DB_PASS=$(read_config "DB_PASS")
BACKUP_RETENTION_DAYS=$(read_config "BACKUP_RETENTION_DAYS")
RSYNC_ENABLE=$(read_config "RSYNC_ENABLE")
RSYNC_USER=$(read_config "RSYNC_USER")
RSYNC_HOST=$(read_config "RSYNC_HOST")
RSYNC_KEY=$(read_config "RSYNC_KEY")
RSYNC_PATH=$(read_config "RSYNC_PATH")
# === Répertoire temporaire local pour backup ===
BACKUP_DIR="/tmp/glpi_backup"
# === Création du répertoire backup si besoin ===
mkdir -p "$BACKUP_DIR"
# === Date/heure pour nommer les fichiers
DATE=$(date +"%Y%m%d%H%M%S")
# === Fichiers de backup
GLPI_BACKUP_FILE="${BACKUP_DIR}/glpi_files_backup_${DATE}.tar.gz"
DB_BACKUP_FILE="${BACKUP_DIR}/glpi_db_backup_${DATE}.sql.gz"
# === Backup des fichiers GLPI ===
echo "[+] Sauvegarde du répertoire ${GLPI_DATA_DIR}..."
tar --exclude='_sessions' -czf "$GLPI_BACKUP_FILE" -C "$GLPI_DATA_DIR" .
# === Backup de la base de données ===
echo "[+] Sauvegarde de la base de données ${DB_NAME}..."
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DB_BACKUP_FILE"
# === Nettoyage des anciens backups locaux ===
echo "[+] Nettoyage des backups locaux de plus de ${BACKUP_RETENTION_DAYS} jours..."
find "$BACKUP_DIR" -type f -mtime +"$BACKUP_RETENTION_DAYS" -delete
# === Rsync vers NAS si activé ===
if [ "$RSYNC_ENABLE" = "yes" ]; then
echo "[+] Envoi des backups vers NAS ($RSYNC_HOST)..."
rsync -avz --no-times --no-perms --no-owner --no-group -e "ssh -i $RSYNC_KEY" "$BACKUP_DIR/" "$RSYNC_USER@$RSYNC_HOST:$RSYNC_PATH"
fi
echo "[✔] Sauvegarde GLPI terminée avec succès."
sudo apt update
sudo apt install -y git
sudo mkdir -p /opt/scripts/glpi-backup
sudo chown root:root /opt/scripts/glpi-backup
cd /opt/scripts
sudo git clone https://github.com/allanlopesprado/glpi-backup.git glpi-backup
sudo nano /opt/scripts/glpi-backup/glpi-backup.conf
GLPI_DIR="/var/www/html/glpi"
GLPI_DATA_DIR="/var/www/html/glpi/files"
DB_HOST="localhost"
DB_NAME="glpi"
DB_USER="glpi"
DB_PASS="glpi"
BACKUP_RETENTION_DAYS=5
RSYNC_ENABLE="yes"
RSYNC_USER="bck_user"
RSYNC_HOST="10.10.20.11"
RSYNC_KEY="/home/glpi/.ssh/backup_omv_key"
RSYNC_PATH="/srv/dev-disk-by-uuid-7e0f5dd9-bcc0-46b8-b3ea-f90ad5ccea67/GLPI_BACKUP"
sudo chown -R root:root /opt/scripts/glpi-backup
sudo chmod -R 700 /opt/scripts/glpi-backup
sudo chown glpi:glpi /home/glpi/.ssh/backup_omv_key*
sudo chmod 600 /home/glpi/.ssh/backup_omv_key*
sudo -u glpi crontab -e
0 2 * * * /opt/scripts/glpi-backup/glpi-backup.sh >> /var/log/glpi-backup.log 2>&1
Tableau récapitulatif Crontab
Position | Signification | Valeurs possibles | Exemple | Signification pratique |
---|
1ère ★ | Minute | 0 à 59 | 5 → à la 5e minute |
|
2ème ★ | Heure | 0 à 23 | 14 → 14h (2PM) |
|
3ème ★ | Jour du mois | 1 à 31 | 15 → le 15 du mois |
|
4ème ★ | Mois | 1 à 12 | 7 → juillet |
|
5ème ★ | Jour de la semaine | 0 à 7 (0 et 7 = dimanche) | 1 → lundi |
|
🚀 Exemples pratiques utiles
Crontab | Lecture humaine |
---|
* * * * * | Toutes les minutes |
*/5 * * * * | Toutes les 5 minutes |
0 * * * * | À chaque heure pile |
30 2 * * * | Tous les jours à 2h30 du matin |
0 0 * * 0 | Tous les dimanches à minuit |
0 8-18 * * 1-5 | Toutes les heures de 8h à 18h du lundi au vendredi |
15 14 1 * * | Le 1er de chaque mois à 14h15 |
0 0 1 1 * | Le 1er janvier à minuit (Nouvel an 🎉) |