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 :
- on défini l’ip comme URL externe, ce qui est amplement suffisant pour démarrer. A vous de setup un proxy devant pour rendre votre instance accessible depuis l’extérieur de votre réseau.
- le port SSH utilisé par Gitlab, ainsi vous pouvez garder le port 22 pour le serveur SSH du host et le port 2222 pour envoyer vos commits à Gitlab.
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 :
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 :
- désactiver la création de compte sur votre instance,
- activer le 2FA pour votre nouveau user.
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 :
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 :
Une fois la commande executée, ouvrez votre navigateur et retournez à la liste des runners, vous devriez voir votre runner dans la liste :
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.