From 43e59828459bb530be5c5e8f0386b3dd6e9af124 Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 27 Feb 2026 09:04:20 +0000 Subject: [PATCH] Ajouter Readme.md --- Readme.md | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 Readme.md diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..8fdd559 --- /dev/null +++ b/Readme.md @@ -0,0 +1,228 @@ +# 🔮 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 + +```bash +# 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` + +```ini +# 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Ă©) + +```bash +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 + +```bash +# 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 | `` | Saisie manuelle avec validation | + +Exemple d'entrĂ©e installĂ©e dans `crontab -u root -l` : + +```cron +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` : + ```bash + echo ".env" >> .gitignore + ``` +- Les archives de sauvegarde contiennent des donnĂ©es sensibles — sĂ©curiser `BACKUP_DIR` avec des permissions restrictives : + ```bash + 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** +```bash +chown -R www-data:www-data /opt/redmine/redmine +``` + +**Consulter les logs** +```bash +tail -f /var/log/redmine-backup.log +``` + + + +**Johnny Fontaine** — [j.fontaine@h3campus.fr](mailto:j.fontaine@h3campus.fr) +H3 Campus — [https://git.h3campus.fr/Johnny/Redmine](https://git.h3campus.fr/Johnny/Redmine) + +--- + +## 📄 Licence + +Ce projet est distribuĂ© sous licence **MIT**. Voir le fichier [LICENSE](LICENSE) pour plus de dĂ©tails. \ No newline at end of file