179 lines
5.3 KiB
Markdown
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` |
|