Installer mon propre GitLab ✔️
Installer GitLab sur son propre serveur est une idée alléchante, mais qui s'avère être un parcours du combattant pour peu que vous ne soyez pas un habitué et que vous vouliez personnaliser un peu votre installation : mailing, HTTPS, et sous-domaine...
Pour ma part, après avoir pas mal tâtonner sur mon ancien VPS, j'ai fini par tout reprendre de zéro, et ai profité d'un serveur bien mieux dimensionner pour faire tourner convenablement mon instance GitLab, qui, il faut le dire, n'est pas si légère que ça.
Ici, je vous propose d'installer GitLab via l'image Docker officielle, et de l'exposer sur un de vos sous-domaines, le tout accessible en HTTPS, grâce à nginx et certbot (Let's Encrypt).
Docker
Commençons par le fichier docker-compose.yml
version: '3'
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ce:latest
restart: always
hostname: gitlab.corentindesfarges.fr
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.corentindesfarges.fr'
nginx['listen_https'] = false
ports:
- '30443:443'
- '3080:80'
volumes:
- $GITLAB_HOME/config:/etc/gitlab
- $GITLAB_HOME/logs:/var/log/gitlab
- $GITLAB_HOME/data:/var/opt/gitlab
Il est important ici de déclarer les volumes à utiliser, afin de persister vos données et configurations.
J'ai choisi d'exposer GitLab sur les port 30443 (pour le HTTPS - 443) et 3080 (HTTP - 80) afin d'éviter tout conflit, mais vous êtes libre de choisir vos propres ports. Il faudra toutefois penser à les utiliser lorsque vous ferez le paramétrage du reverse proxy.
N'oubliez pas de définir votre hostname, en spécifiant le sous-domaine. Idem pour la variable d'environnement GITLAB_OMNIBUS_CONFIG, où il faut définir external_url. N'oubliez pas ici le protocol cible, à savoir https://.
Enfin, notez que nous allons configurer nginx nous-même afin de forcer l'accès en HTTPS, d'où le nginx['listen_https'] = false.
Définissez la variable d'environnement GITLAB_HOME sur votre serveur, comme suit :
export GITLAB_HOME=/srv/gitlab
Enfin, lancez la commande suivante pour démarrer votre instance :
docker-compose up
nginx
Il faut maintenant configurer votre reverse proxy, afin de rediriger correctement les appels vers votre instance sur votre sous-domaine.
Si ce n'est déjà fait, commencez par installer nginx :
sudo apt update
sudo apt install nginx
Créez ensuite le fichier /etc/nginx/conf.d/gitlab.conf, en remplaçant server_name par votre adresse (avec sous-domaine), et vérifiez que le port du proxy_pass correspond bien à ce que vous avez défini dans le docker-compose.yml.
# bloc de rediction http => https
server {
listen 80;
server_name gitlab.corentindesfarges.fr;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name gitlab.corentindesfarges.fr;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header HOST $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://127.0.0.1:30443;
proxy_redirect off;
}
}
Enregistrez et relancez nginx :
sudo systemctl restart nginx
certbot
Comme d'habitude, on l'installe si on ne l'a pas déjà :
sudo apt update
sudo apt install certbot
Et puis on le lance, rien de plus simple ici :
sudo certbot --nginx
L'outil va automatiquement scanner vos configuration nginx, et vous proposera de choisir les domaines pour lesquels vous souhaitez obtenir un certificat SSL. Si vous avez plusieurs sous-domaines, pour éviter de gérer trop de certificat, n'hésitez pas à les resélectionner à chaque fois que vous lancerez la commande et choisissez (E)xpand lorsque ce choix vous sera suggéré.
Certbot vous proposera par la suite de rediriger vos appels HTTP vers HTTPS. N'acceptez pas, vous l'avez déjà fait dans votre gitlab.conf !
La suite ? Rendez-vous dans votre navigateur !