Files
redmine/Readme.md
2026-02-27 09:04:20 +00:00

6.5 KiB

🔴 redmine-backup

Script Bash professionnel de sauvegarde et restauration complète de Redmine — base de données, fichiers, configuration, plugins — avec menu interactif et planification cron intégrée.


Fonctionnalités

Fonctionnalité Détail
💾 Sauvegarde complète DB + fichiers + config + plugins en une seule archive .tar.gz
🔄 Restauration interactive Menu de sélection avec 4 modes de restauration
🗄️ Multi-base de données PostgreSQL, MySQL/MariaDB, SQLite3 — auto-détection via database.yml
Planification cron Intégration cron avec fréquences prédéfinies ou expression personnalisée
📋 Manifest d'archive Version Redmine, plugins, gems, infos système archivés à chaque backup
🔁 Rotation automatique Conservation configurable des N dernières archives
📧 Notifications email MAILTO configurable pour les exécutions cron
🛡️ Sécurité set -euo pipefail, nettoyage automatique des fichiers temporaires
📝 Journal Logging horodaté dans /var/log/redmine-backup.log

📋 Prérequis

  • OS : Debian / Ubuntu / RHEL / CentOS
  • Bash ≥ 4.0
  • Droits : root (sudo)
  • Commandes requises : tar, gzip, awk, find, stat
  • Selon votre base de données :
    • PostgreSQL → pg_dump, pg_restore, psql
    • MySQL/MariaDB → mysqldump, mysql
    • SQLite3 → sqlite3

🚀 Installation

# Cloner le dépôt
git clone https://git.h3campus.fr/Johnny/Redmine.git /opt/scripts/redmine-backup
cd /opt/scripts/redmine-backup

# Rendre le script exécutable
chmod +x redmine-backup.sh

# Copier et configurer le fichier .env
cp .env.example .env
nano .env

⚙️ Configuration — fichier .env

# Répertoire racine de l'installation Redmine (obligatoire)
REDMINE_ROOT=/opt/redmine/redmine

# Dossier de stockage des archives de sauvegarde
BACKUP_DIR=/opt/Backups

# Environnement Rails (doit correspondre à une section dans database.yml)
RAILS_ENV=production

# Chemin personnalisé vers database.yml (optionnel, auto-détecté par défaut)
# DB_CONFIG=/usr/share/redmine/config/database.yml

# Forcer l'adaptateur de base de données (optionnel)
# Valeurs possibles : postgresql | mysql2 | sqlite3
# DB_TYPE=postgresql

# Nombre d'archives à conserver (les plus anciennes sont supprimées)
KEEP_BACKUPS=7

# Inclure le dossier log/ de Redmine dans la sauvegarde (true | false)
INCLUDE_LOG=false

📖 Utilisation

Menu interactif (recommandé)

sudo ./redmine-backup.sh
  [1]  Créer une sauvegarde   — Sauvegarde complète (DB + fichiers + config)
  [2]  Restaurer              — Menu interactif de restauration
  [3]  Lister les sauvegardes — Voir les archives disponibles
  [4]  Planification Cron     — Gérer les sauvegardes automatiques
  [5]  Afficher l'aide        — Documentation complète
  [0]  Quitter

Commandes directes

# Lancer une sauvegarde
sudo ./redmine-backup.sh backup

# Ouvrir le menu de restauration
sudo ./redmine-backup.sh restore

# Lister les archives disponibles
sudo ./redmine-backup.sh list

# Gérer la planification cron
sudo ./redmine-backup.sh cron

# Afficher l'aide
sudo ./redmine-backup.sh help

💾 Contenu d'une archive de sauvegarde

Chaque archive redmine_backup_YYYYMMDD_HHMMSS.tar.gz contient :

redmine_backup_20260227_020000.tar.gz
├── database.sql          ← dump complet de la base de données
├── manifest.txt          ← version Redmine, plugins, gems, infos système
├── config/
│   ├── database.yml
│   ├── configuration.yml
│   ├── email.yml
│   ├── secrets.yml
│   └── .env.backup
└── files_backup.tar.gz   ← arborescence complète de REDMINE_ROOT

🔄 Modes de restauration

Mode DB Fichiers Config
Complète
Base de données uniquement
Fichiers uniquement
Configuration uniquement

⚠️ Avant tout remplacement de fichiers, l'installation existante est automatiquement renommée en REDMINE_ROOT.pre_restore_TIMESTAMP comme filet de sécurité.


Planification automatique (Cron)

Via le menu interactif [4] ou la commande sudo ./redmine-backup.sh cron :

Option Expression Description
Quotidienne 0 2 * * * Tous les jours à 02h00
Biquotidienne 0 2,14 * * * À 02h00 et 14h00
Hebdomadaire 0 2 * * 1 Tous les lundis à 02h00
Mensuelle 0 2 1 * * Le 1er du mois à 02h00
Personnalisée <expression> Saisie manuelle avec validation

Exemple d'entrée installée dans crontab -u root -l :

MAILTO=admin@exemple.fr
0 2 * * * /opt/scripts/redmine-backup/redmine-backup.sh backup # redmine-backup-auto

📁 Structure du dépôt

redmine-backup/
├── redmine-backup.sh    ← script principal
├── .env.example         ← modèle de configuration
├── README.md            ← cette documentation
└── LICENSE              ← licence MIT

🔒 Sécurité

  • Le fichier .env contient potentiellement des mots de passe — ne jamais le committer.
  • Ajouter .env au .gitignore :
    echo ".env" >> .gitignore
    
  • Les archives de sauvegarde contiennent des données sensibles — sécuriser BACKUP_DIR avec des permissions restrictives :
    chmod 700 /opt/Backups
    

🐛 Dépannage

Le script quitte immédiatement Vérifier que .env est présent et que REDMINE_ROOT pointe vers un dossier existant.

Erreur unsafe mail lors de l'installation cron Mise à jour du script — la version corrigée gère proprement la directive MAILTO sur une ligne séparée sans commentaire.

Erreur de connexion DB Vérifier les credentials dans database.yml et que l'utilisateur DB dispose des droits SELECT, LOCK TABLES, SHOW VIEW.

Permissions après restauration

chown -R www-data:www-data /opt/redmine/redmine

Consulter les logs

tail -f /var/log/redmine-backup.log

Johnny Fontainej.fontaine@h3campus.fr
H3 Campus — https://git.h3campus.fr/Johnny/Redmine


📄 Licence

Ce projet est distribué sous licence MIT. Voir le fichier LICENSE pour plus de détails.