Installation GitLab + Nginx + Docker

Installation rapide de GitLab, Nginx et Docker sur un serveur dédié. Comment installer et configurer GitLab avec Docker ? Tuto complet !

Pour info mon serveur est sur Debian 9.4 Stretch (stable) (64bits).

Installation de Docker

Plus d'infos sur la doc officielle.

Téléchargement des dépendances et du paquet .deb :

apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
wget https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce_18.03.1~ce-0~debian_amd64.deb

Puis :

dpkg -i docker-ce_18.03.1~ce-0~debian_amd64.deb
docker run hello-world    # Permet de tester le bon fonctionnement de docker

Installation du container Nginx

On commence par récupérer l'image nginx :

docker pull nginx

Ensuite on lance notre container avec les paramètres nécessaires. Libre à vous de choisir un nom (`nginx-rp`)

docker run --detach \
    --hostname nginx-rp \
    --publish 80:80 \
    --name nginx-rp \
    --restart always \
    nginx:latest

Installation du container GitLab CE

Pull de l'image gitlab-ce

docker pull gitlab/gitlab-ce

Lancement du container avec les paramètres nécessaires

docker run --detach \
    --hostname gitlab.domaine.com \
    --name gitlab-ce \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

On en profite pour configurer gitlab :

nano /srv/gitlab/config/gitlab.rb

Dé commentez et modifiez la ligne external_url 'http://gitlab.domaine.com'.
Puis on relance la conf :

docker exec -i -t gitlab-ce gitlab-ctl reconfigure
docker exec -i -t gitlab-ce gitlab-ctl restart

Configuration de mon sous-domaine

Personnellement j'utilise Cloudflare, dans mon interface je créer un champ de type A pointant vers l'IP de mon serveur.
Mon sous-domaine sera gitlab.domaine.com.

Après un peu de peinture voilà ce que ça donne :


Configuration du container Nginx

On récupère l'IP de chaque container avec la commande :

docker network inspect bridge

Cette commande retourne la configuration "bridge" en json, dans la partie "Containers" vous allez retrouver vos petits. Pour ma part j'ai :

Container IP
nginx-rp172.17.0.3
gitlab-ce172.17.0.2

Pour la suite on va configrer nginx dans son container. Pour accéder en ligne de commande au container on fait :

docker exec -i -t nginx-rp /bin/bash

Vous pouvez commencer par tester l'accès à votre gitlab-ce depuis votre nginx-rp via curl (apt install curl):

curl 172.17.0.2       # IP de votre gitlab

Si vous obtenez la réponse :
<html><body>You are being <a href="http://172.17.0.2/users/sign_in">redirected</a>.</body></html>
,
vous pouvez vous considérer comme un super héro. Si vous avez un autre message c'est probablement parce-que GitLab n'a pas terminé son installation (pour moi avec un HDD ça a pris 5 ou 6 minutes)...

Vous pouvez vérifier l'avancement de l'installation de GitLab via les logs : docker attach gitlab-ce (faites cette commande à la racine de votre machine pas dans le container).

Si tout va bien vous pouvez créer un VirtualHost en reverse proxy dans /etc/nginx/conf.d/.

nano /etc/nginx/conf.d/gitlab.domaine.com.conf

Contenu du VirtualHost :

server {
    listen 80;
    server_name gitlab.domaine.com;
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://172.17.0.2;    // IP de votre gitlab
        resolver 127.0.0.11;          // IP du service DNS de docker (permet de pas casser nginx si GitLab est inaccessible)
        proxy_intercept_errors on;
    }
}

Redémarez Nginx

service nginx restart

Accéder à Gitlab CE

Le moment tant attendu ... http://gitlab.domaine.com.

Si vous avez des questions n'hésitez pas à me contacter par mail via [email protected]

Merci d'avoir suivi cet article jusqu'au bout ! ❤️

Commentaires