Restaurer une sauvegarde sur GitLab : La procédure de secours
Pourquoi et quand restaurer une sauvegarde ?
Posséder une sauvegarde est inutile si vous ne savez pas comment l'injecter pour remettre votre serveur en ligne. Le processus de restauration GitLab est une opération délicate qui remplace les données actuelles de votre instance par celles contenues dans votre archive .tar.
C'est l'étape ultime après un crash majeur ou lors d'une migration pour restaurer une sauvegarde GitLab. Contrairement à la sauvegarde qui peut se faire à chaud, la restauration nécessite de stopper certains services pour s'assurer que les données ne sont pas modifiées pendant que GitLab les réinstalle.
Pré-requis indispensables avant la restauration
Avant de taper la première commande, vous devez vous assurer de deux points critiques pour la réussite de votre plan de reprise d'activité :
- Votre instance GitLab doit avoir exactement la même version que celle qui a créé la sauvegarde (ex: 17.10.2).
- Vous devez avoir replacé vos fichiers gitlab.rb et gitlab-secrets.json dans le dossier /etc/gitlab/.
Le processus de restauration étape par étape
Pour effectuer cette opération, connectez-vous d'abord à votre serveur GitLab via SSH (Secure Shell).
Localiser le fichier de sauvegarde
Assurez-vous que votre archive se trouve bien dans le répertoire par défaut /var/opt/gitlab/backups et vérifiez son nom pour extraire le timestamp de sauvegarde.
cd /var/opt/gitlab/backups
ls -l
Résultat :
-rw------- 1 git git 123456789 Apr 20 10:00 1713532481_2026_04_20_17.10.2_gitlab_backup.tar
Arrêt des services de données
Stoppez les processus Puma (le serveur web) et Sidekiq (le gestionnaire de tâches) avant de lancer la récupération des données :
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
Résultat :
ok: down: puma: 0s, normally up
ok: down: sidekiq: 0s, normally up
Lancement de la restauration
Exécutez la commande de restauration en utilisant uniquement le début du nom de fichier (le timestamp) :
sudo gitlab-backup restore BACKUP=1713532481
Vérification d'intégrité
Il est crucial de réaliser une vérification d'intégrité du système après une restauration :
sudo gitlab-rake gitlab:check
Résultat :
Unpacking backup ... [DONE]
Restoring database ...
Be careful: This will replace your current database! (yes/no)? yes
[...]
Restoring repositories ...
* group/project-alpha ... [DONE]
Restoring uploads ... [DONE]
Restore completed!
Vérification essentielle
Cette commande s'assure que la base de données et les dépôts Git communiquent correctement après la réinstallation.
Finalisation et redémarrage du serveur
Une fois l'archive extraite, relancez tous les composants pour remettre le serveur en production :
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
Vérification d'intégrité et nettoyage
Il est crucial de réaliser une vérification d'intégrité du système après une restauration, notamment en utilisant le flag de nettoyage :
sudo gitlab-rake gitlab:check SANITIZE=true
Résultat :
Checking GitLab subcomponents ...
Database: ... OK
Gitaly: ... OK
Sanitizing database ... [DONE]
GitLab check is completed.
Pourquoi utiliser SANITIZE ?
L'option SANITIZE=true supprime les adresses e-mail réelles et les jetons de sécurité de la base restaurée pour éviter tout envoi intempestif de mails si vous restaurez sur un serveur de test.
Conclusion
Vous maîtrisez désormais le cycle complet de survie : de la sauvegarde à la restauration. C'est la base de la fiabilité d'un administrateur système GitLab.
Maintenant que vos données sont en sécurité, nous allons voir comment alimenter votre serveur en important des dépôts existants depuis d'autres plateformes.
Espace commentaire
Écrire un commentaire
Rejoignez la discussion
Vous devez être connecté pour poster un message.
28 commentaires
Tu peux scripter le passage de la commande :
C'est ce qu'on fait en CI pour valider les backups.
Peut-on automatiser le sanitize après chaque restore ?
Oui, ça dépend de la taille de ton instance et des services à redémarrer. Laisse-le finir, ne tue pas le processus, sinon tu vas corrompre la conf.
Le
sudo gitlab-ctl reconfiguremet 10 minutes à passer. C'est normal ?Vérifie que tu es dans le bon dossier. Le script cherche par défaut dans
/var/opt/gitlab/backups. Si ton fichier est ailleurs, il ne le verra jamais.J'ai une erreur
Backup file is not foundalors que j'ai bien mis le timestamp. Je comprends pas.Non, il touche à la base et aux dépôts. Tes configs dans
/etc/gitlab/doivent être remises manuellement avant de lancer le restore.Est-ce que
gitlab-backupécrase les fichiers de config existants ?C'est le fichier qui contient tes clés de chiffrement. Sans lui, tes données restaurées sont illisibles. Gardez toujours une copie de ce fichier hors du serveur.
Merci pour le tuto, le
gitlab-secrets.jsonest bien le point le plus critique, je l'avais zappé la première fois.Augmente le timeout dans ton
gitlab.rbou lance le restore directement dans unscreenoutmuxpour éviter que la session SSH ne coupe.Mon backup est énorme, le script de restauration plante par timeout.
GitLab ne supporte pas l'extraction sélective par projet via la commande native. Il faut restaurer l'archive complète.
Comment on fait pour extraire juste un projet spécifique d'une grosse archive
.tar?Exactement. Si tu ne mets pas
SANITIZE=truelors du check final, les infos de prod restent actives. C'est dangereux en environnement de test.J'ai restauré sur un serveur de dev, mais les mails partent vers les vrais utilisateurs. J'ai oublié le
SANITIZE=true?T'as bien redémarré Gitaly ? Parfois il reste en rade. Tente un
sudo gitlab-ctl restart gitalypuis relance le check.La commande
sudo gitlab-rake gitlab:checkme renvoie des erreurs sur Gitaly alors que tout semblait vert avant.Si tu ne le stoppes pas, tes données seront incohérentes pendant le restore. Couper les services est obligatoire pour éviter la corruption de la base de données.
Est-ce que je dois vraiment arrêter
sidekiq? J'ai peur de perdre des jobs en cours.Le 502, c'est souvent Puma qui n'a pas fini de démarrer. Check les logs avec
sudo gitlab-ctl tail puma. Vérifie aussi que tongitlab-secrets.jsonest bien au bon endroit.Même chose ici, 502 après la restauration. J'ai pourtant bien suivi les étapes.
J'ai restauré, tout semble OK, mais après
sudo gitlab-ctl reconfigure, l'interface web affiche une erreur 502. Une idée ?À ne jamais faire. GitLab est très strict sur les versions. Downgrade ton instance pour matcher exactement la version de la sauvegarde avant de lancer la restauration, sinon tu vas corrompre la base.
Moi j'ai un souci de version. Ma sauvegarde est en 17.10.2 mais mon GitLab actuel est en 17.10.3. Ça va planter ou pas ?