Ce document contient les livrables issus de la mise en place du service
Gitlab. L’objectif est de pouvoir disposer d’un serveur pour versionner le code de l’infrastructure mais également divers projets.
1. Création de la VM
Nous allons utiliser le template debian12-template créé lors du chapitre 4. Sur Proxmox on crée un clone complet à partir de ce template. Voici les caractéristiques de la VM :
| OS | Hostname | Adresse IP | Interface réseau | vCPU | RAM | Stockage |
|---|---|---|---|---|---|---|
| Debian 12.10 | gitlab-core | 192.168.100.247 | vmbr1 (core) | 2 | 8192 | 20Gio |
Il faut également penser à activer la sauvegarde automatique de la VM sur Proxmox en l’ajoutant au niveau de la politique de sauvegarde précédemment créée.
2. Configuration de l’OS via Ansible
Les informations concernant Ansible sont disponibles au niveau des chapitres 7 et 8.
A présent, le playbook et les rôles ayant pour objectif d’appliquer la configuration de base de l’OS sont disponibles. Il faut se connecter en tant que l’utilisateur ansible sur le serveur ansible-core.homelab puis ajouter l’hôte gitlab-core.homelab au niveau du fichier d’inventaire /opt/ansible/envs/100-core/00_inventory.yml avec les éléments suivants
gitlab-core.homelab:
ip: 192.168.100.247
hostname: gitlab-core
Il est nécessaire d’ajouter les droits sudo sur l’utilisateur ansible au niveau du fichier /etc/sudoers.d/ansible avec les éléments ci-dessous. Il s’agit d’un oubli au niveau du template. (À corriger plus tard).
ansible ALL=(ALL) NOPASSWD: ALL
Pour exécuter le playbook, il faut lancer la commande suivante
ansible-playbook -i envs/100-core/00_inventory.yml -l 'gitlab-core.homelab,' playbooks/00_config_vm.yml
Voici le récapitulatif
lundi 30 juin 2025 22:25:38 +0200 (0:00:00.255) 0:00:06.584 ************
===============================================================================
Gathering Facts ----------------------------------------------------------------------------------------------------------- 0.99s
dns_config : Autoremove et purge ------------------------------------------------------------------------------------------ 0.56s
dns_config : Installation du paquet systemd-resolved ---------------------------------------------------------------------- 0.45s
base_packages : Installation des paquets de base -------------------------------------------------------------------------- 0.45s
hostname_config : Modification du hostname -------------------------------------------------------------------------------- 0.43s
motd : Déploiement du motd ------------------------------------------------------------------------------------------------ 0.43s
base_packages : Mise à jour du cache apt ---------------------------------------------------------------------------------- 0.38s
dns_config : Enable du daemon systemd-resolved ---------------------------------------------------------------------------- 0.38s
dns_config : Suppression du paquet resolvconf ----------------------------------------------------------------------------- 0.33s
dns_config : Resart du daemon systemd-resolved ---------------------------------------------------------------------------- 0.29s
security_ssh : Restart du daemon sshd ------------------------------------------------------------------------------------- 0.26s
dns_config : Suppression du fichier /etc/resolv.conf ---------------------------------------------------------------------- 0.18s
dns_config : Configuration du DNS dans /etc/resolved.conf ----------------------------------------------------------------- 0.18s
hostname_config : Modification du fichier /etc/hosts ---------------------------------------------------------------------- 0.18s
ipv6_disable : Désactivation de la prise en charge de l'IPv6 globalement -------------------------------------------------- 0.18s
security_ssh : Activation de l'authentification par clé ------------------------------------------------------------------- 0.13s
ipv6_disable : Désactivation de la prise en charge de l'IPv6 par défaut --------------------------------------------------- 0.13s
dns_config : Création du nouveau lien symbolique vers /etc/resolv.conf ---------------------------------------------------- 0.13s
security_ssh : Désactivaction de l'authentification par mot de passe ------------------------------------------------------ 0.13s
dns_config : Configuration du FallbackDNS dans /etc/resolved.conf --------------------------------------------------------- 0.13s
3. Installation de Gitlab
Avant de procéder à l’installation, il faut ajouter l’entrée DNS ̀
gitlab-core.ng-hl.comet l’aliasgitlab.ng-hl.com.
Pour installer Gitlab proprement, on suit la documentation officielle
sudo apt-get install -y curl openssh-server ca-certificates perl postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.ng-hl.com" apt-get install gitlab-ce
On peut se connecter sur l’interface en HTTPS (avec un certificat auto-signé pour le moment) en tant que root. La première chose à faire est de créer un autre utilisateur que l’on va appeler ngobert avec les droits administrateur puis on désactive la fonctionnalité qui permet la création de nouveau compte depuis l’interface de connexion.
Enfin, pour que notre certificat wildcard *.ng-hl.com puisse porter le HTTPS, on récupère les fichiers de certificat et la clé privée pour les positionner au niveau du répertoire /etc/gitlab/ssl sur le serveur gitlab-core.homelab avec respectivement les noms gitlab.ng-hl.com.crt et gitlab.ng-hl.com.key puis on recharge Gitlab avec les commandes ci-dessous.
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
4. Renouvellement automatique du certificat
On utilise les éléments mis en place lors du chapitre 9 pour gérer le renouvellement des certificats TLS via acme depuis le serveur acme-core.homelab. Il est nécessaire d’autoriser la clé id_acme.pub pour se connecter en tant que root sur le serveur gitlab-core.homelab. Je choisis ici d’utiliser l’utilisateur root et non pas ngobert pour éviter d’ouvrir des droits sudo pour exécuter les commandes gitlab-ctl reconfigure et gitlab-ctl restart. Enfin, il faut que l’on ajoute les éléments suivants dans le fichier /root/acme-deploy/targets.yml
- host: gitlab-core.homelab
user: root
type: binary
cert_path: /etc/gitlab/ssl/
privkey_name: gitlab.ng-hl.com.key
cert_name: gitlab.ng-hl.com.crt
reload_cmd: gitlab-ctl reconfigure && gitlab-ctl restart
5. Création de la paire de clé SSH
Afin de réaliser des opérations git plus rapidement et de façon sécurisée, nous allons générer une paire de clés SSH qui va être utilisée avec l’utilisateur ngobert. Pour cela, se rendre sur le serveur gitlab-core et générer la paire de clés en tant que l’utilisateur ngobert avec la commande suivante :
ssh-keygen -t ed25519 -f ~/.ssh/id_git-ngobert -C "Git ngobert"
Il est nécessaire de penser à stocker la clé privée et la clé publique au niveau du coffre-fort vaultwarden-core.
6. Configuration de l’utilisateur ngobert
Se rendre sur la GUI de notre serveur gitlab-core puis se connecter avec l’utilisateur ngobert. Se rendre dans les préférences et dans la section Clés SSH et ajouter le contenu de la clé publique précédemment générée.
