Gitea/lisezmoi.md

7.3 KiB

🟠 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

# 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

# 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é)

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

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 :

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 :
    echo ".env.gitea" >> .gitignore
    
  • Restreindre l'accès au dossier de sauvegardes :
    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

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

systemctl status gitea
journalctl -u gitea -n 50

Consulter les logs de sauvegarde

tail -f /var/log/gitea-backup.log

👤 Auteur

Johnny Fontainej.fontaine@h3campus.fr
H3 Campus — https://git.h3campus.fr/Johnny/Redmine


📄 Licence

Ce projet est distribué sous licence MIT. Voir le fichier LICENSE pour plus de détails.