Files
docker-stack-template/README-gitea-scripts.md
T

179 lines
5.3 KiB
Markdown

# Scripts Gitea — Auto-Update, Backup & Déploiement Cron
Trois scripts pour la maintenance automatisée de Gitea Docker.
---
## 🚀 Installation rapide
```bash
# Cloner les scripts
git clone https://git.dracodev.net/Outils/gitea-scripts.git ~/scripts
# Installer dans le cron (interactif)
bash ~/scripts/install_cron.sh
# Ou forcer sans confirmation
bash ~/scripts/install_cron.sh --force
```
---
## 📋 Prérequis
- Docker + Docker Compose
- `curl`, `tar`, `gzip`, `mysqldump` (dans le conteneur MySQL)
- Droits d'écriture sur `/NFS/BACKUP/DOCKER/dev-prod/gitea/` (backup)
- Droits sudo si les volumes sont protégés
---
## 🔄 gitea-auto-update.sh
Vérifie quotidiennement si une nouvelle image Docker Gitea est disponible et applique la mise à jour.
### Paramètres configurables
| Variable | Défaut | Description |
|----------|--------|-------------|
| `COMPOSE_DIR` | `~/dev/git/outils/docker/gitea` | Dossier du docker-compose |
| `COMPOSE_FILE` | `docker-compose.yml` | Nom du fichier compose |
| `CONTAINER_NAME` | `gitea_server` | Conteneur Gitea |
| `IMAGE_NAME` | `gitea/gitea` | Image Docker |
| `IMAGE_TAG` | `latest` | Tag (version) |
| `HEALTH_CHECK_URL` | `http://localhost:3000` | URL vérification santé |
| `HEALTH_CHECK_TIMEOUT` | `30` | Timeout attente (secondes) |
### Cron recommandé
```cron
# Tous les jours à 4h du matin
0 4 * * * /home/openclaw/scripts/gitea-auto-update.sh
```
### Fonctionnement
1. Récupère le digest SHA256 de l'image actuelle
2. `docker compose pull` pour télécharger la dernière version
3. Compare les digests → si identique, rien à faire
4. Si différent : backup rapide DB → `docker compose up -d` → vérification santé
5. Nettoie les vieilles images Docker (`image prune`)
---
## 💾 gitea-backup.sh
Backup complet et portable de Gitea : DB MySQL + volumes Docker + config.
### Paramètres configurables
| Variable | Défaut | Description |
|----------|--------|-------------|
| `BACKUP_DIR` | `/NFS/BACKUP/DOCKER/dev-prod/gitea` | Destination backups |
| `COMPOSE_DIR` | `~/dev/git/outils/docker/gitea` | Dossier docker-compose |
| `DB_CONTAINER` | `gitea_db` | Conteneur MySQL |
| `DB_NAME` | `gitea` | Nom base de données |
| `DB_ROOT_PASSWORD` | `gitea` | Mot de passe root MySQL |
| `VOLUME_DATA` | `/DOCKER_CONFIG/gitea/data` | Volume data Gitea |
| `VOLUME_MYSQL` | `/DOCKER_CONFIG/gitea/mysql` | Volume MySQL |
| `RETENTION_DAYS` | `30` | Rétention jours |
| `RETENTION_WEEKLY` | `4` | Backups dimanche conservés |
| `RETENTION_MONTHLY` | `6` | Backups 1er du mois conservés |
| `COMPRESS` | `true` | Compression gzip |
| `VERIFY_BACKUP` | `true` | Vérifier intégrité après backup |
| `STOP_CONTAINERS` | `false` | Arrêter conteneurs (plus sûr) |
### Cron recommandé
```cron
# Tous les jours à 2h du matin
0 2 * * * /home/openclaw/scripts/gitea-backup.sh
```
### Structure d'un backup
```
/NFS/BACKUP/DOCKER/dev-prod/gitea/
└── gitea-backup-20260626-020000/
├── gitea-db.sql.gz ← Dump MySQL (compressé)
├── gitea-data.tar.gz ← Volume /data (repos, config, thèmes)
├── gitea-mysql.tar.gz ← Volume MySQL (fichiers DB bruts)
├── docker-compose.yml ← Stack Docker
├── app.ini ← Configuration Gitea
├── restore.sh ← ⭐ Script de restauration automatique
└── backup-info.txt ← Métadonnées
```
### Restauration
```bash
cd /NFS/BACKUP/DOCKER/dev-prod/gitea/gitea-backup-20260626-020000/
# Dry-run (vérifier sans exécuter)
bash restore.sh --dry-run
# Restauration réelle
bash restore.sh --force
```
Le script `restore.sh` est **auto-généré** à chaque backup et contient TOUT ce qu'il faut pour restaurer sur n'importe quel hôte Docker.
---
## 🚀 install_cron.sh — Déploiement automatisé
Installe (ou désinstalle) les crons d'un seul coup.
### Commandes
```bash
bash install_cron.sh # Installation interactive
bash install_cron.sh --force # Sans confirmation
bash install_cron.sh --uninstall # Retirer du cron
bash install_cron.sh --status # Vérifier l'état
```
### Paramètres configurables
| Variable | Défaut | Description |
|----------|--------|-------------|
| `SCRIPTS_DIR` | `$HOME/scripts` | Dossier des scripts |
| `CRON_BACKUP_SCHEDULE` | `0 2 * * *` | Horaire backup |
| `CRON_UPDATE_SCHEDULE` | `0 4 * * *` | Horaire update |
| `BACKUP_LOG` | `/var/log/gitea-backup-cron.log` | Log backup |
| `UPDATE_LOG` | `/var/log/gitea-update-cron.log` | Log update |
### Gestion propre
Le script ajoute un **bloc marqué** dans la crontab :
```cron
# >>> GITEA SCRIPTS (managed by install_cron.sh) <<<
0 2 * * * /home/bruno/scripts/gitea-backup.sh >> /var/log/gitea-backup-cron.log 2>&1
0 4 * * * /home/bruno/scripts/gitea-auto-update.sh >> /var/log/gitea-update-cron.log 2>&1
# >>> END GITEA SCRIPTS <<<
```
Le `--uninstall` retire uniquement ce bloc, sans toucher au reste de la crontab.
---
## 🔧 Surcharger les paramètres
```bash
# Exemple : changer le dossier de backup
BACKUP_DIR=/mnt/big-disk/gitea /home/openclaw/scripts/gitea-backup.sh
# Exemple : backup avec arrêt des conteneurs
STOP_CONTAINERS=true /home/openclaw/scripts/gitea-backup.sh
```
---
## 📊 Logs
| Script | Log |
|--------|-----|
| Auto-update | `/var/log/gitea-update.log` |
| Backup | `/var/log/gitea-backup.log` |