Installation de GitLab sur Debian 9 (SSH) avec un reverse proxy NGINX

Procédure

Vous avez besoin de Gitlab pour gérer vos projets ? Créez votre propre instance de GitLab sur votre VPS en suivant ce tutoriel.

Git c’est bien. Gitlab, c’est mieux. Gitlab est un gestionnaire de dépôt Git open-source. Développé par GitLab Inc., il propose une interface graphique intuitive pour gérer vos différents projets tout en gardant la compatibilité avec Git. Ainsi, vous pouvez créer des demandes de fonctionnalités (feature request), tracer les bugs, … en équipe et sur un navigateur web.

Gitlab est proposé en plusieurs versions, payantes et gratuites. Dans le tutoriel suivant, nous allons installer GitLab Community Edition (Gitlab CE), la version gratuite et open-source de Gitlab.

Pré-requis

Pour pouvoir utiliser GitLab, il est recommandé d’avoir au moins :

  • 2 vCores
  • 4 Go de RAM

Par conséquent, l’offre VPS M de la gamme Starter LWS vous conviendra parfaitement pour un Gitlab de quelques projets, mais si vous avez plusieurs collaborateurs et/ou plusieurs projets à mener à bien, il est recommandé de prendre le VPS L ou un des VPS de la gamme Pro.

Pour ce tutoriel, nous allons considérer un système d’exploitation totalement vierge de l’image système Debian 9 + SSH proposé sur LWS Panel. Voici les liens vers les autres tutoriels pour d’autres systèmes d’exploitation :

Si vous voulez modifier le système d’exploitation de votre VPS, voici un lien vers la documentation d’aide : Comment modifier le système d’exploitation de mon VPS ?

Notez que ce tutoriel est basé sur une installation VIERGE de Debian 9. Si vous avez déjà installé quelque chose dessus, nous ne pouvons pas garantir que le tutoriel sera efficace et/ou que tous vos autres services seront disponibles après installation.

N’oubliez pas d’activer le port SSH sur le pare-feu de votre VPS afin de pouvoir se connecter en root sur la console SSH.

Résumé du tutoriel

Voici les étapes qui seront abordés sur ce tutoriel :

  1. Mise à jour du système d’exploitation
  2. Installation de Gitlab CE
  3. Mise en place d’un reverse proxy NGINX devant Gitlab
  4. Mise en place d’un certificat SSL Let’s Encrypt sur le reverse proxy NGINX

Etape 1 : mise à jour du système d’exploitation

Avant d’installer quoi que ce soit, il est recommandé de mettre à jour la liste des paquets et les paquets eux-mêmes.

Sur votre console SSH, écrivez les commandes suivantes :

apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

Etape 2 : Installation de Gitlab CE

D’abord, installons les dépendances requises :

apt-get install -y curl openssh-server ca-certificates

Ensuite, ajoutons le dépôt de Gitlab à votre VPS :

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash

Maintenant, installons Gitlab :

EXTERNAL_URL="http://vpsXXXXX.lws-hosting.com" apt-get install gitlab-ee

L’installation prend plusieurs minutes, vous pouvez prendre un café en attendant.

Astuce : si vous avez une connexion Internet peu stable, vous pouvez mettre en place screen pour se reconnecter à la console détachable en cas de déconnexion non prévue. Documentation sur l'utilisation de screen.

Une fois l’installation terminée, accédez à http://vpsXXXXX.lws-hosting.com afin de configurer Gitlab.

Astuce : si vous avez une erreur 502, essayez de redémarrer Gitlab avec la commande gitlab-ctl restart puis patienter 5 minutes avant de réessayer (Ctrl+F5).

Si tout se déroule comme prévu, vous êtes redirigé vers une page pour créer votre mot de passe Gitlab.

Installation de GitLab sur Debian 9 (SSH) avec un reverse proxy NGINX

Spécifiez alors un mot de passe relativement complexe. Vous pouvez également générer un mot de passe aléatoire.

Une fois terminé, vous pouvez vous connecter à Gitlab avec l’utilisateur root et le mot de passe que vous avez spécifié.

Installation du reverse proxy NGINX

Maintenant, nous allons mettre en place un reverse proxy avec NGINX. Ceci vous permettra d’héberger d’autres sites et applications dans le futur, notamment si vous avez opté pour un serveur VPS Cloud Pro S ou supérieure.

La première étape consiste à déplacer Gitlab sur un port non utilisé. Pour ce tutoriel, on prendra le port 6080 (pris aléatoirement).

Astuce : vous pouvez trouver la liste des ports déjà utilisés avec la commande netstat -tunap | grep LISTEN

Pour cela, éditer le fichier /etc/gitlab/gitlab.rb avec nano (ou vim, ou autre éditeur) :

nano /etc/gitlab/gitlab.rb

Et éditez la valeur de external_url en incluant le port :

[...]
## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://vpsXXXXX.lws-hosting.com:6080'
[...]

Ctrl+X, Y puis Entrée pour enregistrer le fichier et fermer nano (Esc puis :wq pour vim).

Pour appliquer cette configuration, il faut exécuter la commande suivante :

gitlab-ctl reconfigure

Ceci prendra une ou deux minutes le temps que Gitlab effectue une synchronisation de ses paramètres avec les applications embarqués par défaut par Gitlab (NGINX, omnibus, ...)

A présent, Gitlab est sur 6080. Il faudra maintenant mettre en place NGINX. L’installation de NGINX se résume par les lignes de commandes suivantes :

apt-get install -y curl gnupg2 ca-certificates lsb-release
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | apt-key add -
apt-get update
apt-get install -y nginx

Il est maintenant temps de créer un fichier de configuration NGINX pour GitLab. Nous allons le nommer /etc/nginx/conf.d/000-gitlab.conf. Créons ce fichier avec nano :

nano /etc/nginx/conf.d/000-gitlab.conf

Ensuite, il faut créer un nouveau bloc server{} et faire le reverse proxy. Voici une proposition de contenu :

server {
    listen 80;
    server_name gitlab.example.com;

    location / {
        proxy_pass http://localhost:6080;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        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 $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Url-Scheme $scheme;
    }
}

Astuce : Le préfixe « 000- » est nécessaire pour que le fichier soit chargé avant default.conf. Dans le cas contraire, le fichier default.conf va écraser notre configuration.

Activez NGINX au démarrage :

systemctl enable nginx

Redémarrer ensuite nginx avec la commande suivante :

systemctl restart nginx

Ensuite, il faut pointer gitlab.exemple.com sur votre VPS en ajoutant un enregistrement A à votre zone DNS. Si votre DNS est géré sur l’espace client LWS, voici comment faire :

Installation de GitLab sur Debian 9 (SSH) avec un reverse proxy NGINX

Ensuite, configurons à nouveau Gitlab pour accepter l’en-tête X-Forwarded-For pour trouver les adresses IP réelles des visiteurs. Ceci se fait en éditant le fichier /etc/gitlab/gitlab.rb :

[...]
nginx['real_ip_header'] = 'X-Forwarded-For'
nginx['real_ip_recursive'] = 'on'
[...]

Ensuite, faites une nouvelle synchronisation des configurations de Gitlab et de ses services embarqués :

gitlab-ctl reconfigure

A ce stade, vous devriez pouvoir vous connecter à http://gitlab.exemple.com.

Mise en place d’un certificat SSL Let’s Encrypt sur NGINX

Nous allons maintenant sécuriser notre accès avec un certificat SSL Let’s Encrypt. Tout d’abord, installons certbot :

apt-get install certbot -y

Ensuite, nous allons mettre en place un webroot prévu pour l’authentification Let’s Encrypt. Pour ce faire, éditer le fichier /etc/nginx/conf.d/000-gitlab.conf et ajouter ces lignes après le bloc location / :

    [...]
    location / {
        proxy_pass http://localhost:6080;
        [...]
    }

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/letsencrypt;
    }

}

Créez le dossier :

mkdir -p /var/www/letsencrypt

Et redémarrez NGINX :

systemctl restart nginx

Créons maintenant un certificat SSL pour gitlab.exemple.com :

certbot certonly --webroot -w /var/www/letsencrypt/ -d gitlab.exemple.com

Suivez les instructions à l’écran :

  • Spécifiez votre email
  • Lisez et acceptez les conditions d’utilisations
  • Inscrivez-vous (ou pas) à la newsletter de l’EFF

Ensuite, nous allons de nouveau éditer /etc/nginx/conf.d/000-gitlab.conf afin d’ajouter un nouveau serveur sur HTTPS/443. Il faut alors ajouter les lignes suivantes à la fin du fichier :

[...]
server {
    listen 443 ssl;
    server_name gitlab.exemple.com;

    ssl_certificate /etc/letsencrypt/live/gitlab.exemple.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gitlab.exemple.com/privkey.pem;
    
    location / {
        proxy_pass http://localhost:6080;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        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 $scheme;
        proxy_set_header X-Forwarded-Protocol $scheme;
        proxy_set_header X-Url-Scheme $scheme;
    }
}

Et redémarrer votre serveur NGINX :

systemctl restart nginx

Voilà, vous avez maintenant un serveur Gitlab prêt à l’emploi sur https://gitlab.exemple.com.

Notez cet article :

Cet article vous a été utile ?

Article utileOui

Article non utileNon

Vous souhaitez nous laisser un commentaire concernant cet article ?

Si cela concerne une erreur dans la documentation ou un manque d'informations, n'hésitez pas à nous en faire part depuis le formulaire.

Pour toute question non liée à cette documentation ou problème technique sur l'un de vos services, contactez le support commercial ou le support technique

Merci ! N'hésitez pas à poser des questions sur nos documentations si vous souhaitez plus d'informations et nous aider à les améliorer.


Vous avez noté 0 étoile(s)

Poser une question à l'équipe LWS et à sa communauté