GLoBS : Github LOcal Backup Server
L'objectif de cette application est de sauvegarder localement des clones de dépôts GitHub afin de proposer un moyen de sauvegarde et de pouvoir temporairement s'y synchroniser dans le cas où github est down.
L'application permet de :
- régulièrement (variable
DUMP_EACH_NBMINUTES
) cloner et se synchroniser avec les dépôts des organisations github passées en argument (variableGITHUB_ORGANIZATIONS
). A noter que seules les oganisations github sont gérées, les dépôt rattachés à des comptes github ne le sont pas. - mettre à disposition les dépôts clonés à travers un serveur web (protocole http) et ainsi permettre de réaliser des
git clone
en lecture seule de ces dépôts - (optionnellement) réaliser un miroir des dépôts sur une instance gitlab
- (optionnellement) être déployée sur ezmaster
DUMP_EACH_NBMINUTES
doit contenir le temps à attendre (en minutes) entre chaque sauvegarde/synchronisation. Par défaut 5 minutes.DUMP_TO
doit contenir la liste des emplacement où sauvegarder : "local" et/ou "gitlab". Par défault uniquement "local"
GITHUB_ORGANIZATIONS
doit contenir la liste des organisations github que vous souhaitez sauvegarder.GITHUB_PERSONAL_ACCESS_TOKEN
doit contenir le token OAUTH issu d'un compte github pour pouvoir naviguer via l'API de github dans la liste des dépôts et pouvoir dépasser la limite de requêtes en mode anonyme. Pour le générer, rendez-vous ici : https://github.com/settings/tokens (attention ce token ne doit pas être partagé)
GITLAB_HTTP_BASEURL
doit pointer vers la racine http(s) de votre instance gitlab cible vers laquelle vous souhaitez réaliser des miroirs (sans le / de fin). Cette URL sera utilisée pour l'accès à l'API (v4) de Gitlab. Exemple : "https://git.abes.fr"GITLAB_SSH_BASEURL
doit pointer vers la racine de l'accès SSH du dépôt git sous gitlab (utilisé au moment de faire un git push vers gitlab via ssh). Exemple: "git@git.abes.fr"GITLAB_PERSONAL_ACCESS_TOKEN
doit contenir le token permettant d'accéder à l'API de votre instance gitlab. Pour le générer, rendez vous ici https://git.abes.fr/profile/personal_access_tokens (adaptez votre baseurl & attention ce token ne doit pas être partagé)GITLAB_GROUP_PREFIX
contient un préfixe optionnel qui sera utilisé au moment de la création des groupes gitlab en miroir des organizations github. Ex: "inist-cnrs" côté github deviendrait "github-backup-inist-cnrs" côté gitlab dans le cas où GITLAB_GROUP_PREFIX vaut "github-backup-"
Utilisez alors docker-compose pour déployer ezmaster-globs
. Pour cela vous devez juste télécharger le docker-compose.yml prêt pour la production puis l'exécuter en lui passant les paramètres de configuration sous la forme de variables d'environnement de cette manière :
wget https://raw.githubusercontent.com/Inist-CNRS/ezmaster-globs/master/docker-compose.yml
GITHUB_ORGANIZATIONS="abes-esr inist-cnrs" \
GITHUB_PERSONAL_ACCESS_TOKEN="change me" \
GITLAB_HTTP_BASEURL="https://git.abes.fr" \
GITLAB_SSH_BASEURL="git@git.abes.fr" \
GITLAB_PERSONAL_ACCESS_TOKEN="change me" \
GITLAB_GROUP_PREFIX="github-backup-" \
DUMP_EACH_NBMINUTES=5 \
DUMP_TO="local gitlab" \
docker-compose up
- Un conteneur docker nommé
ezmaster-globs
sera alors créé. - Ajoutez éventuellement l'option
-d
pour le lancer en tâche de fond. - Veillez à gérer les logs qui seront envoyées sur stdout et stderr du conteneur docker.
Utilisez ezmaster et déployez l'application inistcnrs/ezmaster-globs:2.2.4
Créez ensuite une instance de cette application et paramétrez-la en modifiant ces variables dans la config JSON :
{
"DUMP_EACH_NBMINUTES": 1,
"DUMP_TO": [ "local", "gitlab "],
"GITHUB_ORGANIZATIONS": [ "inist-cnrs", "istex", "abes-esr" ],
"GITHUB_PERSONAL_ACCESS_TOKEN": "change me",
"GITLAB_HTTP_BASEURL": "https://git.abes.fr",
"GITLAB_SSH_BASEURL": "git@git.abes.fr",
"GITLAB_PERSONAL_ACCESS_TOKEN": "change me",
"GITLAB_GROUP_PREFIX": "github-backup-"
}
npm run build # pour construire l'image docker
npm run debug # pour lancer le serveur web et le clonage
DUMP_EACH_NBMINUTES=1 GITHUB_ORGANIZATIONS="inist-cnrs" npm run debug # pour personnaliser depuis des variables d'env
Se connecter ensuite sur http://127.0.0.1:8080/ pour visualiser les dépôts sauvegardées localement.
Vous pouvez ensuite tester des clones git depuis le serveur web fourni par ezmaster-globs. Voici un exemple de clone depuis une instance d'ezmaster-globs en local qui écoute sur le port 8080 :
git clone http://127.0.0.1:8080/inist-cnrs/node-xml-writer.git
(A noter que inist-cnrs/node-xml-writer.git
est un dépôt que l'on trouve sur l'organisation github inist-cnrs)