Gitlab : stocker le registry container sur un stockage s3 MinIO

Dans ce tutoriel, je vais vous expliquer comment stocker les données du Container registry de Gitlab sur un stockage de type S3.

Pour commencer, vous aurez besoin d’avoir un Gitlab fonctionne avec la fonctionnalité container registry d’activée.

Vous aurez aussi besoin d’un espace de stockage compatible S3, pour cela vous pouvez déployer Minio.

Création du bucket sur Minio

Sur Minio, créer un Bucket dédié, si vous venez d’installer Minio, cliquer sur Create a Bucket 1.

Nommer le butcket (gitlab-registry) 1 puis cliquer sur le bouton Create Bucket 2.

Le but est créé.

Création d’une clé d’accès – Access Key

Nous allons créer un Access Key que l’on va indiquer par la suite dans la configuration de Gitlab pour l’accès au Bucket.

Depuis le menu, cliquer sur Access Keys 1 puis sur le bouton Create access key + 2.

La clé et le secret (mot de passe) sont affichés 1, copier les dans un fichier pour la configuration de Gitlab et cliquer sur Create 2.

La clé et le secret s’affiche une nouvelle fois en vous indiquant que le secret ne sera disponible qu’une seule fois, ensuite fermer la fenêtre modale.

Vous avez aussi la possibilité de télécharger le fichier JSON qui contient la clé et le secret.

Pour Minio, la configuration est terminée.

Configuration de Gitlab

Editer le fichier docker-compose.yml de votre déploiement de Gitlab et ajouter les lignes suivantes dans la configuration GITLAB_OMNIBUS_CONFIG en adaptant à votre environnement.

Redémarrer le conteneur Girtlab pour la prise en compte :

sudo docker compose down && sudo docker compose up -d

Le contenu Container registry sera dans le Bucket S3

Migration de contenu existant vers le bucket S3

Pour cela on va utiliser le client Minio (mc) pour faire la migration.

Sur le serveur Gitlab installer le client :

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc && mv mc /usr/local/bin/

Ajouter le serveur MinIO au client :

mc alias set minio https://s3.domain.tld accesskey secretkey

Copier le contenu local (Gitlab) vers le Bucket :

# Adapter le chemin local à votre environnement
mc mirror /containers/gitlab/data/gitlab-rails/shared/registry minio/gitlab-registry

Patienter pendant la copie … puis redémarrer Gitlab

sudo docker compose down && sudo docker compose up -d

Une fois Gitlab de nouveau opérationnel vérifier que les images soient disponibles.

Si vous avez l’erreur : invalid digest sur vos images, la solution va être depuis un hôte ou docker est installé, de télécharger toutes les images ce qui implique un retour au stockage local puis de renvoyer toutes les images après réactivé la configuration S3 et vider le Bucket.


Vous savez comment stocker le données du registre d’image de conteneur Gitlab sur un stockage S3 avec MinIO.

Romain Drouche
Architecte Système | MCSE: Core Infrastructure
Expert en infrastructures IT avec plus de 15 ans d’expérience sur le terrain. Actuellement Chef de projet Systèmes et Réseaux et Référent SSI (Sécurité des Systèmes d’Information), je mets mon expertise au service de la fiabilité et de la sécurité des environnements technologiques.