Ajouter Readme.md
This commit is contained in:
228
Readme.md
Normal file
228
Readme.md
Normal file
@@ -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 | `<expression>` | 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.
|
||||||
Reference in New Issue
Block a user