Un gitlab sauvegardĂ© c’est du stress en moins nous sommes tous d’accord lĂ -dessus!
Aujourd’hui je vais vous expliquer la mise en place d’une sauvegarde automatique complĂšte d’une instance GitLab (installĂ©e via le paquet Omnibus) sur du stockage S3 ici un stockage on-premise sur Ceph.
La premiĂšre chose Ă faire c’est d’avoir un disque sĂ©parĂ© pour l’emplacement /var/opt/gitlab/backups, de prĂ©fĂ©rence un Logical Volume (LVM) afin de l’augmenter en cas de besoin.
En effet Gitlab dans son processus de sauvegarde via la commande gitlab-backup create va dans un premier temps crĂ©er une archive Ă cet emplacement avant de tĂ©lĂ©verser l’archive de la sauvegarde vers le stockage distant.
C’est pourquoi il est important d’avoir un disque sĂ©parĂ© du disque oĂč le systĂšme d’exploitation est installĂ© pour Ă©viter de saturer le disque et de causer un plantage de la machine par manque d’espace.
1) Créer le Physical Volume (PV) sur /dev/sdbsudo pvcreate /dev/sdb
2) Créer le Volume Group (VG)sudo vgcreate vg_gitlab_backups /dev/sdb
3) Créer le Logical Volume (LV)sudo lvcreate -n lv_gitlab_backup -l 100%FREE vg_gtilab_backups
4) Créer le filesystem ext4sudo mkfs.ext4 /dev/vg_gtilab_backups/lv_gitlab_backup
5) Créer le point de montage et montersudo mkdir -p /var/opt/gitlab/backups
sudo mount /dev/vg_gitlab_backups/lv_gitlab_backup /var/opt/gitlab/backups
6) Rendre le montage persistant via fstab
echo "/dev/vg_gtilab_backups/lv_gitlab_backup /var/opt/gitlab/backups ext4 defaults 0 2" | sudo tee -a /etc/fstab
7) Appliquer les droitssudo chown git:root /var/opt/gitlab/backups
Nous voilà avec un disque dédié au processus de sauvegarde !
Attaquons nous maintenant Ă la configuration de gitlab pour envoyer notre sauvegarde sur le stockage distant de type S3.
Il nous faut modifier le fichier de configuration /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 300
gitlab_rails['backup_upload_connection'] = { 'provider' => 'AWS', 'region' => 'eu-west-1', 'aws_access_key_id' => 'XXXXX', 'aws_secret_access_key' => 'XXXX',#  # # If IAM profile use is enabled, remove aws_access_key_id and aws_secret_access_key 'use_iam_profile' => false, 'path_style' => true, 'endpoint' => 'https://s3.mysupercloud.com'}gitlab_rails['backup_upload_remote_directory'] = 'gitlab-backups'
le paramĂštre gitlab_rails['backup_keep_time'] permet de dĂ©finir la rĂ©tention locale de l’archive qui sera dĂ©posĂ©e Ă l’emplacement /var/opt/gitlab/backups, cette pĂ©riode est dĂ©finie en secondes.
Le paramĂštre gitlab_rails['backup_upload_remote_directory'] permet de dĂ©finir le bucket S3 oĂč sera envoyĂ©e l’archive de sauvegarde.
Les autres paramĂštres Ă modifier sont le endpoint, la clĂ© d’accĂšs et la clĂ© secrĂšte.
AprÚs cette modification il faut bien évidemment effectuer un reconfigure GitLab via la commande sudo gitlab-ctl reconfigure
Une fois cela effectué vous pouvez tester une sauvegarde via la commande gitlab sudo gitlab-backup create
Si vous effectuez cette commande voici ce que contiendra l’archive de sauvegarde. (https://docs.gitlab.com/administration/backup_restore/backup_gitlab/#data-included-in-a-backup)
- Données et configuration de la base de données
- ParamĂštres des comptes et des groupes
- Artéfacts CI/CD et journaux des jobs
- DépÎts Git et objets LFS
- Différences externes des merge requests
- Données du registre de paquets et images du registre de conteneurs
- Wikis des projets et des groupes
- PiÚces jointes et fichiers téléversés au niveau projet
- Fichiers sécurisés
- Contenu GitLab Pages
- Ătats Terraform
- Snippets (extraits de code)
Une fois testĂ©e, si vous souhaitez mettre en place la sauvegarde automatiquement, il n’y a rien de plus simple, il suffit d’utiliser notre compagnon cron.
En crĂ©ant un cron sur l’utilisateur root via la commande sudo cron -e -u root
0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
Ce cron effectuera une sauvegarde complĂšte tous les jours Ă 2 heures du matin et enverra une copie de la sauvegarde sur le bucket S3.
Gitlab ne gÚre pas la rétention des sauvegardes sur le S3, pour cela il faudra utiliser une lifecycle policy sur votre bucket.
Dans notre cas nous utilisons Ceph et nous souhaitons une lifecycle policy qui supprime les archives plus anciennes que 7 jours.
{ "LifecycleConfiguration": { "Rules": [ { "ID": "KeepLast7Days", "Prefix": "", "Status": "Enabled", "Expiration": { "Days": "1" } } ] }}
La lifecycle policy est effectuée réguliÚrement par la RADOS Gateway (Gateway Objet de Ceph).
Et voilà nous avons terminé, un gitlab sauvegardé et un sysadmin rassuré.
Laisser un commentaire