Files
wiki/Catalogue-Self-Hosted/apps/app-git-sync.md
T
2026-06-09 18:40:21 +02:00

142 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Git-Sync
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, backups, git, github, gitlab, typescript, mit]
confidence: high
contested: false
sources: [https://selfh.st/apps/?tag=Backups, https://github.com/AkashRajpurohit/git-sync]
---
# 💾 Git-Sync
> **Le « cron + git push » clé en main** : sauvegardez automatiquement vos dépôts GitHub, GitLab, Gitea sur un intervalle régulier, sans script maison.
## 📋 Informations Générales
| Champ | Valeur |
| :--- | :--- |
| **Site web** | (GitHub) |
| **GitHub** | [AkashRajpurohit/git-sync](https://github.com/AkashRajpurohit/git-sync) |
| **License** | MIT |
| **Langage** | TypeScript (Node.js) |
| **Étoiles GitHub** | 696 ⭐ |
| **Dernière MAJ** | 2026-06-07 |
| **Catégorie** | [[cat-backups|Backups]] |
## 📝 Description
**Git-Sync** est un **service léger qui clone et met à jour périodiquement une liste de dépôts Git** vers un dossier local ou un volume. C'est volontairement simple : pas d'UI, pas de base de données, juste un fichier de configuration et un cron interne qui fait `git clone` / `git pull` en boucle.
L'idée : vous avez des dépôts critiques (configs, dotfiles, wikis, code personnel) hébergés sur GitHub, GitLab.com ou un **GitLab self-hosted** / **Gitea** et vous voulez une **copie locale à jour** sur votre NAS, en cas de :
- ✅ Perte d'accès au compte GitHub (compte suspendu, 2FA perdu, org supprimée)
- ✅ Suppression accidentelle d'un dépôt (le `git push --force` de trop)
- ✅ Besoin d'un miroir local pour restaurer rapidement sans dépendre d'Internet
- ✅ Archivage d'archives d'un projet avant qu'il ne disparaisse
-**Multi-comptes** : vous pouvez mixer GitHub.com + GitLab self-hosted + Gitea
-**Notifications** sur échec (Discord, Telegram, Slack via webhook)
-**Mode miroir** : `git clone --mirror` pour préserver toutes les branches et tags
-**Schedules** : intervalle configurable par dépôt
-**Léger** : conteneur Node minimal (~50 Mo RAM)
-**Logs structurés** en JSON
**Public cible** : développeurs, admins système, **homelabbers** qui veulent un **miroir local automatisé** de leurs dépôts critiques sans écrire de cron maison.
## 🚀 Installation
### Docker Compose
```yaml
# docker-compose.yml
version: '3.8'
services:
git-sync:
image: ghcr.io/akashrajpurohit/git-sync:latest
container_name: git-sync
restart: unless-stopped
volumes:
- ./repos:/repos # Miroirs locaux
- ./config.yaml:/app/config.yaml:ro
environment:
- TZ=Europe/Paris
- CONFIG_PATH=/app/config.yaml
labels:
- "traefik.enable=false" # Pas d'UI : pas besoin d'exposer en HTTPS
volumes:
repos:
```
> ️ Git-Sync **n'expose pas d'UI web** : tout se passe via le fichier `config.yaml` et les logs. Pas besoin de le mettre derrière Traefik.
## ⚙️ Configuration Initiale
1. **Préparer un fichier `config.yaml`** listant vos dépôts :
```yaml
repos:
- name: mon-dotfiles
url: https://github.com/Velli/dotfiles.git
interval: 3600 # sync toutes les heures
mirror: true
- name: wiki
url: https://gitlab.example.com/root/wiki.git
interval: 86400 # sync quotidienne
```
2. **Générer un token** (GitHub PAT, GitLab token) si vos dépôts sont privés.
3. **Monter le dossier `repos/`** sur un volume persistant (sinon tout part au reboot).
4. **Démarrer** : `docker compose up -d` puis `docker logs -f git-sync` pour vérifier le premier clone.
5. **Ajouter une notification** (optionnel) : webhook Discord/Slack dans la config pour être alerté en cas d'échec.
6. **Programmer un test** : simuler un repo supprimé en local et vérifier que le miroir contient bien les derniers commits.
## 🔄 Alternatives
### Open Source
- **Gitea mirror** — fonctionnalité native de Gitea, plus complet mais nécessite Gitea.
- **git-mirror** (gogs/gogs) — script Python minimaliste.
- **GitLab Pull Mirror** — natif si vous avez une instance GitLab self-hosted.
- **restic / borg sur les dossiers clonés** — pour chiffrer et dédupliquer les miroirs.
- [[app-gitsave]] — autre outil dédié à la sauvegarde de repos Git, avec UI web.
### Comparaison Git-Sync vs autres
| Critère | Git-Sync | GitSave | Gitea Mirror | git-mirror |
| :--- | :--- | :--- | :--- | :--- |
| UI web | ❌ | ✅ | ✅ | ❌ |
| Config | YAML | YAML/Web | UI | CLI |
| Notifications | Webhook | Oui | Oui | ❌ |
| Multi-provider | ✅ | ✅ | Gitea only | ✅ |
| Légèreté | Très léger | Moyen | Lourd | Léger |
| Lissage | Cron interne | Schedules | Schedules | Cron externe |
**Verdict** : Git-Sync est **le plus simple et le plus léger** des outils de mirroring Git. Si vous voulez une UI web ou des fonctionnalités plus poussées, voir [[app-gitsave]].
### Propriétaires
- **GitHub Pro backup** — pas de backup officiel proposé par GitHub (à part le local clone).
- **GitLab Premium** — mirror features intégrées mais self-hosted uniquement en EE.
- **BackHub** — service commercial de backup GitHub (non self-hosted).
## 🔐 Sécurité
- **Règle 3-2-1** : vos miroirs Git-Sync ne sont qu'**une copie locale**. Combinez avec [[app-restic]] / [[app-borg]] / [[app-kopia]] qui chiffreront et envoieront ces miroirs vers un S3 / B2 / SFTP distant.
- **Chiffrement** : les dépôts sont stockés en clair sur disque. Si vos dépôts contiennent des secrets historiques, chiffrez le volume `repos` (LUKS / ZFS) ou compressez-chiffrez via un [[app-restic]] par-dessus.
- **Tokens d'accès** : passez-les via variables d'environnement ou un fichier `.env`, jamais en clair dans `config.yaml` versionné. Voir [[securisation-home-lab]].
- **Test de restauration** : clonez manuellement un de vos miroirs sur une autre machine tous les trimestres pour valider qu'ils sont bien à jour.
## 📚 Ressources
- [GitHub AkashRajpurohit/git-sync](https://github.com/AkashRajpurohit/git-sync)
- [Documentation configuration](https://github.com/AkashRajpurohit/git-sync#configuration)
## Pages Liées
- [[cat-backups]] — Catégorie Backups
- [[strategie-backup-321]] — Règle 3-2-1
- [[app-restic]] — Pour chiffrer et dédupliquer
- [[app-borg]] — Alternative à Restic
- [[app-kopia]] — Backup avec UI
- [[app-portainer]] — Gestion conteneurs
- [[securisation-home-lab]] — Bonnes pratiques sécurité