Installer Gitlab et Gitlab-Runner avec un docker-compose.yml

- Linux

Gitlab est devenu un monstre ces dernières années, la somme d’outils inclus, la documentation pléthorique rendent son installation et sa maintenance de plus en plus complexe. En particulier pour une personne hébergeant sa propre instance chez lui. Une image Docker de Gitlab c’est un total de 1,26Go de donnée à télécharger, un temps de démarrage considérable sur une “petite machine”.

Si vous avez quand même besoin d’installer Gitlab et que votre machine dispose déjà d’une installation docker-ce fonctionnelle, cet article est pour vous, il vous permettra de très rapidement démarrer une instance Gitlab.

Premier lancement de Gitlab #

Ce docker-compose.yml se veut le plus simple possible, avec le moins de configuration possible, il utilise des volumes qui seront persistés entre chaque re-démarrage et qui permettront aux runners de partager des données. Il y a néanmoins 2 réglages :

Donc créez un fichier docker-compose.yml quelque part sur votre serveur et copiez le contenu suivant dans ce fichier.

version: '3.7' 

volumes:
  config:
    driver: local
  data:
    driver: local
  runner:
    driver: local


services:
  gitlab:
    restart: unless-stopped
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
    ports:
      - '80:80'
      - '2222:22'
    volumes:
      - 'data:/var/opt/gitlab'
      - 'config:/etc/gitlab'
      - 'logs:/var/log/gitlab'

   gitlab-runner:
    restart: unless-stopped
    image: gitlab/gitlab-runner
    container_name: gitlab-runner
    volumes:
      - '/var/run/docker.sock:/var/run/docker.sock'
      - 'runner:/etc/gitlab-runner'
      - 'config:/etc/gitlab'

Pour démarer l’instance, executez la commande docker compose up -d, vous devrez attendre de longues secondes (voir peut être des minutes) avant de pouvoir vérifier que tout a bien démarré. Vous pouvez surveiller le démarrage en visualisant les logs avec la commande docker compose logs -f gitlab, lorsque tout sera terminé, vous verrez des logs d’accès HTTP ou de l’exporter.

Une fois que le démarrage est terminé, ouvrez votre navigateur avec un nouvel onglet puis naviguez vers http://votre-server-ip:8080. Vous devriez arrivez sur cet écran :

Capture du login de Gitlab après démarrage des containers
Capture du login de Gitlab après démarrage des containers

Première connexion et configuration de base #

Avec le temps Gitlab a énormément amélioré sa sécurité. Si avant il était simple de créer le premier compte utilisateur aujourd’hui, il faut aller récupérer le mot de passe de l’utilisateur root dans un fichier du container. Pour récupérer ce mot de passe utilisez la commande suivante :

docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

Vous pouvez vous connecter avec le user root. Une fois connecté, je vous recommande chaudement de désactiver l’utilisateur root qui peut être brut-forcé, puis de vous créer un autre utilisateur.

Ensuite je vous conseille de suivre les recommandations de Gitlab :

Ainsi votre instance démarre sur de bonne bases.

Création d’un runner #

Alors, voici la partie nouvelle du process qui a changé depuis Gitlab 16.x ces derniers mois, l’ancienne méthode à base de token de runner fonctionne toujours mais est dépréciée, la nouvelle méthode utilise un token d’authentication.

Rendez-vous dans la section “Admin / CI / Runner” de votre instance puis cliquez sur le bouton pour créer une nouveau runner, remplissez le formulaire et vous arriverez sur la page suivante qui vous donnera des instructions ainsi que le token pour lier un runner à votre instance Giltab :

Capture de Gitlab après la création du runner
Capture de Gitlab après la création du runner

La partie la plus importante est indiquée avec la flèche sur la capture, copier/coller cette commande puis retourner dans votre Terminal et connectez-vous au container gitlab-runner avec la commande docker compose exec gitlab-runner /bin/bash, collez la commande qui provient de Gitlab. Répondez aux quelques questions.

Je voulais juste un runner docker avec une image debian par défaut :

Capture du login du Terminal pour lier un runner
Capture du login du Terminal pour lier un runner

Une fois la commande executée, ouvrez votre navigateur et retournez à la liste des runners, vous devriez voir votre runner dans la liste :

Capture de la liste des runners dans Gitlab
Capture de la liste des runners dans Gitlab

Et voilà, un runner de connecté à votre instance Gitlab.

Conclusion #

Comme dit plus tôt avec cette configuration, vous pouvez faire des tests sur votre réseau local, mais vous aurez ensuite besoin de setup un proxy avec un host en HTTPS, une fois que cela sera fait il faudra changer la valeur de external_url dans le fichier docker-compose.yml avec votre URL publique. Mais c’est un bon point de départ pour mettre en place très rapidemenr une instance Gitlab.

Pour info, je vous déconseille d’essayer d’installer Gitlab sur un Rapsberry Pi ou sur une “petite machine”, c’est possible mais il faudra faire des concessions sur les performances. Sur ma petite VM avec 2 core et 4Go de Ram, Gitlab mettait plus d’une minute pour démarrer, donc je vous laisse imaginer sur une machine moins puissante.

Je pense que ce sera mon article sur final sur Gitlab, car depuis le mois de juin j’utilise Gitea dans mon système. Il est bien plus léger et nécessite bien moins de ressources comparé à Gitlab. Autre point appréciable, c’est qu’il y a moins de documentation vu que c’est plus simple. On est d’accord il n’offre pas autant que Gitlab, mais pour mon utilisation ça me convient. Je reparlerai de Gitea dans de prochains articles.