Sauvegarde automatique de Gitlab sur du S3

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/sdb
sudo 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 ext4
sudo mkfs.ext4 /dev/vg_gtilab_backups/lv_gitlab_backup

5) Créer le point de montage et monter
sudo 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 droits
sudo 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.

https://docs.gitlab.com/administration/backup_restore/backup_gitlab/#configuring-cron-to-make-daily-backups

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