Prérequis : Avoir suivi ce tutoriel sur Nginx et Let’s Encrypt
Lorsque vous avez besoin de déployer une solution open-source pour gérer vos projets, faire des tests unitaire ou encore du déploiement rapide sur des nouveaux serveurs, la solution qui nous vient tout de suite, c’est Gitlab CE. Nous allons donc le conteneuriser pour le rendre accessible au sein de votre machine.
I. Gitlab
Installation
Pour installer Gitlab, nous allons rédiger un docker-compose pour que nous puissions redéployer rapidement le conteneur :
gitlab: image: gitlab/gitlab-ce:latest container_name: gitlab restart: always ports: - "22222:22" volumes: - /docker/gitlab/config:/etc/gitlab:Z - /docker/gitlab/logs:/var/log/gitlab:Z - /docker/gitlab/data:/var/opt/gitlab:Z - /docker/ssl:/etc/gitlab/ssl:ro # Volume qui pointe sur la liste des certificats SSL # - /docker/gitlab/registry:/var/opt/gitlab/registry:rw # - /docker/gitlab/certs:/certs:rw # Pour Let's Encrypt environment: - LETSENCRYPT_HOST=gitlab.votre-domaine.com - LETSENCRYPT_EMAIL=votre-email@votre-domaine.com - 'VIRTUAL_HOST=gitlab.votre-domaine.com' hostname: gitlab.votre-domaine.com
Dans notre cas, nous pouvons voir que les volumes indiqués sont pour la persistance de la data, de la configuration et des logs Gitlab. Nous avons aussi un lien vers les certificats SSL générés par Let’s Encrypt mais aussi pour (pour le moment, commentés) un lien avec le registre d’images, que nous déploierons plus tard. Notez aussi que le port 22 ne peut pas être utilisé dans notre cas, car le port 22 est déjà utilisé pour la connexion SSH de la machine hôte.
Utilisez la commande pour démarrer les machines, puis naviguer sur le nom de domaine que vous avez renseigné.
docker-compose down docker-compose up -d
Entrez le mot de passe de l’administrateur root et connectez-vous.
Configuration
Retourner dans votre machine et allez dans le répertoire /docker/gitlab/config et modifiez le fichier gitlab.rb.
Dans un premier temps, entrez les informations concernant votre serveur de mail :
gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "mail.votre-domaine.com" gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_user_name'] = "gitlab@votre-domaine.com" gitlab_rails['smtp_password'] = "mot-de-passe-smtp" gitlab_rails['smtp_domain'] = "mail.votre-domaine.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false gitlab_rails['gitlab_email_from'] = "gitlab@votre-domaine.com" gitlab_rails['gitlab_email_reply_to'] = "gitlab@votre-domaine.com"
A présent, modifier les paramètres de certificats SSL :
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.votre-domaine.com.crt" nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.votre-domaine.fr.key"
Enfin, indiquez à gitlab que le port de communication SSH est différent de 22, pour la génération automatique des liens :
gitlab_rails['gitlab_shell_ssh_port'] = 22222
Quittez votre éditeur et reconfigurez Gitlab en utilisant la commande :
docker exec -it gitlab gitlab-ctl reconfigure
Cette commande est utile à toutes les machines pour lesquelles vous avez besoin de rentrer une commande rapidement. Remplacez simplement « gitlab » par le nom du conteneur dans lequel vous souhaitez interagir suivi de la commande à exécuter (à la place de « gitlab-ctl reconfigure »).
II. Les runners
Les runners dans Gitlab sont les conteneurs qui vont vous permettre de tester, construire et mettre à jour vos projets. Dans notre cas, nous allons en déployer un seul, mais la procédure est la même à chaque nouveau runner.
Installation
De la même manière que Gitlab, nous allons utiliser un docker-compose pour créer notre conteneur :
gitlab_runner: image: gitlab/gitlab-runner container_name: Gitlab-Runner restart: always volumes: - /docker/gitlab-runner/config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock - /docker/ssl:/etc/gitlab-runner/certs
Là encore, nous mettons en place les volumes pour sauvegarder la configuration de notre runner, mais nous lui partageons aussi les certificats SSL.
Lancez la commande suivante pour lancer le runner :
docker-compose up -d
Configuration
Une fois l’installation terminée, il faut indiquer certaines propriétés à notre runner. Dans un premier temps, rendez-vous sur l’espace administrateur de votre Gitlab (avec l’indentifiant root) et munissez vous des informations dans sur la page « Overview > Runners ».

Ensuite, entrez les commandes suivantes :
docker exec -it Gitlab-Runner bash gitlab-runner register https://gitlab.votre-domaine.com/ yrpor********************** (votre token) Runner (Mettez la description que vous souhaitez) (appuyez sur entrée pour passer l'étape des tags) false docker alpine
Actualisez maintenant votre page d’administration Gitlab et vous verrez votre nouveau runner apparaître. Vous pouvez à présent l’utiliser dans vos projets.
III. Registry
Maintenant que notre Gitlab et nos test unitaires sont mis en place, il nous reste l’étape de la création des images Docker, pour vos propres projets.
Installation
Comme à l’accoutumée, nous allons modifier notre docker-compose pour intégrer notre registry :
docker-registry: image: registry:latest restart: always container_name: docker-registry environment: - LETSENCRYPT_HOST=registry.votre-domaine.com - LETSENCRYPT_EMAIL=votre-email@votre-domaine.com - VIRTUAL_HOST=registry.votre-domaine.com - VIRTUAL_PROTO=https - REGISTRY_AUTH=token - REGISTRY_AUTH_TOKEN_REALM=https://gitlab.votre-domaine.com/jwt/auth - REGISTRY_AUTH_TOKEN_SERVICE=container_registry - REGISTRY_AUTH_TOKEN_ISSUER=gitlab - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/registry-certs/registry-gitlab/registry.votre-domaine.com.crt - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.votre-domaine.com.crt - REGISTRY_HTTP_TLS_KEY=/certs/registry.votre-domaine.com.key volumes: - /docker/ssl:/certs:ro - /docker/gitlab/certs:/registry-certs hostname: registry.votre-domaine.fr
Cette installation est dite sécurisée, c’est-à-dire que l’accès est uniquement accordé aux utilisateurs enregistrés sur le Gitlab. Au niveau des volumes, nous avons comme d’habitude les certificats SSL de Let’s Encrypt, mais aussi les certificats générés par Gitlab, permettant la communication entre les deux. Revenez alors sur le docker-compose de Gitlab, et dé-commentez les volumes précédés d’un « # » :
- /docker/gitlab/registry:/var/opt/gitlab/registry:rw - /docker/gitlab/certs:/certs:rw
Exécutez les commandes de démarrage du docker-compose :
docker-compose down docker-compose up -d
Installation
Ensuite, nous devons configurer Gitlab pour qu’ils puissent communiquer ensemble. Retournez dans le fichier de configuration « /docker/gitlab/config/gitlab.rb » et modifiez les paramètres suivant :
registry_external_url 'https://registry.votre-domaine.com' registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/registry.votre-domaine.com.crt" registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/registry.votre-domaine.com.key" gitlab_rails['registry_enabled'] = true gitlab_rails['registry_host'] = "registry.votre-domaine.com" gitlab_rails['registry_api_url'] = "https://registry.votre-domaine.com" gitlab_rails['registry_key_path'] = "/certs/registry-gitlab/registry.votre-domaine.com.key" gitlab_rails['registry_issuer'] = "gitlab" registry['rootcertbundle'] = "/certs/registry-gitlab/registry.votre-domaine.com.crt"
Rendez-vous ensuite dans le répertoire « /docker/gitlab/certs » où vous trouverez un fichier .key. Si celui-ci ne correspond pas aux informations que vous avez entrez, renommez-le en « registry.votre-domaine.com » puis exécutez la commande suivante :
openssl x509 -inform DER -outform PEM -in registry.votre-domaine.com.crt -out registry.votre-server.com.pem
Une dernière commande pour reconfigurer Gitlab :
docker exec -it gitlab gitlab-ctl reconfigure
Pour tester le bon fonctionnement, vous pouvez vous connecter en utilisant vos identifiants Gitlab grâce à la commande suivante :
docker login registry.votre-domaine.com
docker login registry.votre-domaine.com
Vous devriez voir « Login succeeded ».
Conclusion
Après ce long tutoriel, vous êtes maintenant capable de mettre vos projet dans un Gitlab privé, couplé à ses runners pour les tests et les constructions mais aussi à son registry privé, permettant uniquement aux personnes autorisées à accéder aux images Docker construites. En tant qu’administrateur, n’hésitez pas à fouiller dans les options de Gitlab pour améliorer certaines choses, modifier les autorisations, ou encore interdire la création de compte par une autre personne que vous.