Files
Gitea/README.md
2026-02-27 14:03:27 +00:00

248 lines
7.3 KiB
Markdown

# 🟠 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.