Ajouter lisezmoi.md
This commit is contained in:
parent
ca9ac58c22
commit
89e13118bf
|
|
@ -0,0 +1,248 @@
|
|||
# 🟠 gitea-backup
|
||||
|
||||
> Script Bash professionnel de **sauvegarde et restauration complète de Gitea** — base de données, dépôts Git, LFS, avatars, attachments, configuration `app.ini`, clés SSH — avec menu interactif et planification cron intégrée.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
| Fonctionnalité | Détail |
|
||||
|---|---|
|
||||
| 💾 **Sauvegarde complète** | DB + dépôts Git + LFS + avatars + attachments + config |
|
||||
| 🔄 **Restauration interactive** | Menu avec 5 modes de restauration ciblée |
|
||||
| 🗄️ **Multi-base de données** | PostgreSQL, MySQL/MariaDB, SQLite3 — auto-détection via `app.ini` |
|
||||
| 🧰 **`gitea dump` natif** | Intégration optionnelle de la commande officielle Gitea en complément |
|
||||
| ⏰ **Planification cron** | Fréquences prédéfinies ou expression personnalisée + notifications email |
|
||||
| 📋 **Manifest d'archive** | Version Gitea, stats dépôts, taille LFS, extrait `app.ini` |
|
||||
| 🔁 **Rotation automatique** | Conservation configurable des N dernières archives |
|
||||
| 🛡️ **Arrêt/relance automatique** | Gitea est stoppé proprement avant restauration, relancé après |
|
||||
| 🔑 **Clés SSH incluses** | Sauvegarde du répertoire `.ssh` de l'utilisateur Gitea |
|
||||
| 📝 **Journal** | Logging horodaté dans `/var/log/gitea-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`
|
||||
- Optionnel : binaire `gitea` accessible pour le dump natif
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Installation
|
||||
|
||||
```bash
|
||||
# Cloner le dépôt
|
||||
git clone https://git.h3campus.fr/Johnny/Redmine.git /opt/scripts/gitea-backup
|
||||
cd /opt/scripts/gitea-backup
|
||||
|
||||
# Rendre le script exécutable
|
||||
chmod +x gitea-backup.sh
|
||||
|
||||
# Copier et configurer le fichier .env
|
||||
cp .env.gitea.example .env.gitea
|
||||
nano .env.gitea
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Configuration — fichier `.env.gitea`
|
||||
|
||||
```ini
|
||||
# Utilisateur système Gitea
|
||||
GITEA_USER=git
|
||||
|
||||
# Répertoire d'installation du binaire
|
||||
GITEA_ROOT=/opt/gitea
|
||||
|
||||
# Répertoire de travail (repositories, data, log...)
|
||||
GITEA_WORK_DIR=/var/lib/gitea
|
||||
|
||||
# Chemin vers app.ini (obligatoire)
|
||||
GITEA_CONF=/etc/gitea/app.ini
|
||||
|
||||
# Chemin vers le binaire gitea
|
||||
GITEA_BINARY=/usr/local/bin/gitea
|
||||
|
||||
# Dossier de stockage des archives
|
||||
BACKUP_DIR=/opt/Backups/gitea
|
||||
|
||||
# Nombre d'archives à conserver
|
||||
KEEP_BACKUPS=7
|
||||
|
||||
# Inclure les logs dans la sauvegarde
|
||||
INCLUDE_LOG=false
|
||||
|
||||
# Activer le dump natif "gitea dump" en complément
|
||||
USE_NATIVE_DUMP=true
|
||||
|
||||
# Surcharge DB optionnelle (auto-détectée depuis app.ini par défaut)
|
||||
# DB_TYPE=postgresql
|
||||
# DB_HOST=localhost
|
||||
# DB_PORT=5432
|
||||
# DB_NAME=gitea
|
||||
# DB_USER=gitea
|
||||
# DB_PASS=motdepasse
|
||||
```
|
||||
|
||||
> Les valeurs `DB_*` sont **auto-détectées** depuis `app.ini`. Ne les renseigner que pour surcharger ou si la détection échoue.
|
||||
|
||||
---
|
||||
|
||||
## 📖 Utilisation
|
||||
|
||||
### Menu interactif (recommandé)
|
||||
|
||||
```bash
|
||||
sudo ./gitea-backup.sh
|
||||
```
|
||||
|
||||
```
|
||||
[1] Créer une sauvegarde — Sauvegarde complète (DB + dépôts + données + 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
|
||||
sudo ./gitea-backup.sh backup # Lancer une sauvegarde
|
||||
sudo ./gitea-backup.sh restore # Menu de restauration
|
||||
sudo ./gitea-backup.sh list # Lister les archives
|
||||
sudo ./gitea-backup.sh cron # Gérer la planification cron
|
||||
sudo ./gitea-backup.sh help # Aide
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💾 Contenu d'une archive de sauvegarde
|
||||
|
||||
Chaque archive `gitea_backup_YYYYMMDD_HHMMSS.tar.gz` contient :
|
||||
|
||||
```
|
||||
gitea_backup_20260227_030000.tar.gz
|
||||
├── database.sql ← dump complet de la base de données (PostgreSQL/MySQL)
|
||||
├── database.db ← copie binaire (SQLite uniquement)
|
||||
├── manifest.txt ← version Gitea, stats dépôts, extrait app.ini
|
||||
├── config/
|
||||
│ ├── app.ini ← configuration principale Gitea
|
||||
│ ├── ssh_keys/ ← clés SSH de l'utilisateur Gitea
|
||||
│ └── .env.gitea.backup ← copie du fichier .env
|
||||
├── repositories.tar.gz ← tous les dépôts Git (bare repos)
|
||||
├── data.tar.gz ← avatars, attachments, LFS, tokens
|
||||
└── native_dump/ ← archive gitea dump officielle (si USE_NATIVE_DUMP=true)
|
||||
└── gitea_native_dump.zip
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Modes de restauration
|
||||
|
||||
| Mode | DB | Dépôts | Données | Config |
|
||||
|---|:---:|:---:|:---:|:---:|
|
||||
| **Complète** | ✅ | ✅ | ✅ | ✅ |
|
||||
| **Base de données uniquement** | ✅ | ❌ | ❌ | ❌ |
|
||||
| **Dépôts Git uniquement** | ❌ | ✅ | ❌ | ❌ |
|
||||
| **Données uniquement** (avatars, LFS...) | ❌ | ❌ | ✅ | ❌ |
|
||||
| **Configuration uniquement** (app.ini + SSH) | ❌ | ❌ | ❌ | ✅ |
|
||||
|
||||
> ⚠️ Le service Gitea est **automatiquement arrêté** avant la restauration et **redémarré** à la fin (modes 1 à 4).
|
||||
> ⚠️ Les dossiers remplacés sont renommés `.pre_restore_TIMESTAMP` comme filet de sécurité.
|
||||
|
||||
---
|
||||
|
||||
## ⏰ Planification automatique (Cron)
|
||||
|
||||
Via le menu `[4]` ou `sudo ./gitea-backup.sh cron` :
|
||||
|
||||
| Option | Expression | Description |
|
||||
|---|---|---|
|
||||
| Quotidienne | `0 3 * * *` | Tous les jours à 03h00 |
|
||||
| Biquotidienne | `0 3,15 * * *` | À 03h00 et 15h00 |
|
||||
| Hebdomadaire | `0 3 * * 1` | Tous les lundis à 03h00 |
|
||||
| Mensuelle | `0 3 1 * *` | Le 1er du mois à 03h00 |
|
||||
| Personnalisée | `<expression>` | Saisie manuelle validée |
|
||||
|
||||
Exemple d'entrée installée :
|
||||
|
||||
```cron
|
||||
MAILTO=admin@exemple.fr
|
||||
0 3 * * * /opt/scripts/gitea-backup/gitea-backup.sh backup # gitea-backup-auto
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Structure du dépôt
|
||||
|
||||
```
|
||||
gitea-backup/
|
||||
├── gitea-backup.sh ← script principal
|
||||
├── .env.gitea.example ← modèle de configuration
|
||||
├── README.md ← cette documentation
|
||||
└── LICENSE ← licence MIT
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
- Le fichier `.env.gitea` contient des mots de passe — **ne jamais le committer**.
|
||||
- Ajouter au `.gitignore` :
|
||||
```bash
|
||||
echo ".env.gitea" >> .gitignore
|
||||
```
|
||||
- Restreindre l'accès au dossier de sauvegardes :
|
||||
```bash
|
||||
chmod 700 /opt/Backups/gitea
|
||||
```
|
||||
- `app.ini` peut contenir des secrets (clés JWT, mots de passe SMTP) — les archives sont sensibles.
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Dépannage
|
||||
|
||||
**Erreur `gitea dump` échoue**
|
||||
Le script bascule automatiquement sur la méthode manuelle. Vérifier que `GITEA_BINARY` est correct et que l'utilisateur `GITEA_USER` a les droits nécessaires.
|
||||
|
||||
**La détection DB échoue**
|
||||
Forcer manuellement `DB_TYPE`, `DB_NAME`, `DB_USER`, `DB_PASS` dans `.env.gitea`.
|
||||
|
||||
**Permissions après restauration**
|
||||
```bash
|
||||
chown -R git:git /var/lib/gitea
|
||||
chmod 750 /etc/gitea
|
||||
chmod 640 /etc/gitea/app.ini
|
||||
```
|
||||
|
||||
**Gitea ne redémarre pas après restauration**
|
||||
```bash
|
||||
systemctl status gitea
|
||||
journalctl -u gitea -n 50
|
||||
```
|
||||
|
||||
**Consulter les logs de sauvegarde**
|
||||
```bash
|
||||
tail -f /var/log/gitea-backup.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 👤 Auteur
|
||||
|
||||
**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.
|
||||
Loading…
Reference in New Issue