logo Gitlab

Gitlab: Installation depuis les sources

git


Après l’article sur l’installation de Gitlab en utilisant les paquets, je vous propose l’installation depuis les sources. En effet, les paquets .deb disponibles ne me plaisent pas, ils installent gitlab dans /opt et embarque leurs propres versions de PostgreSQL / nginx et Redis, ce qui me semble moyen pour les mises à jour. Dans cet article, je détaillerais donc une installation manuelle en français de la version 7.8 de Gitlab. Une grande partie des informations présentes dans cet article sont issues du fichier installation.md du dépôt gitlabhq.

Cet article traite de l’installation de la version 7.8 de Gitlab. La dernière version stable de Gitlab, connu à ce jour (03/09/15), est la version 7.14. Vous trouverez comment passez de la version 7.8 à 7.14 dans l’article suivant : Gitlab: Mise à jour de la version 7.8 à la version 7.14 depuis les sources

Installation des dépendances requises

Pour commencer nous allons devoir installer les paquets nécessaires à la compilation Ruby (langage dans lequel est écrit Gitlab).

# apt-get install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake libkrb5-dev

Nous avons devons installer git en version supérieur à la 1.7.10.

# apt-get install -y git-core

Puis on installe postfix pour l’envoi de mail. Lors de la configuration, nous spécifions le mode de fonctionnement « site internet ».

# apt-get install -y postfix

Installation de Ruby 2.2.1

Logo Ruby

Selon la documentation précédemment citée, l’utilisation de Ruby 1.8 pourrait poser problèmes. Ils conseillent de passer sur la version 2.1.5 qui n’est pas packagée sur Debian Wheezy. Ruby 2.2.1 étant une version stable sortie en décembre 2014, selon le site http://ruby-lang.org, je vais partir sur cette version. Nous allons donc compiler la version 2.2.1 de Ruby et l’installer.

# mkdir /tmp/ruby
# cd /tmp/ruby
# wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.1.tar.gz
# tar xzvf ruby-2.2.1.tar.gz
# cd ruby-2.2.1
# ./configure --disable-install-rdoc
# make
# make install

Comme sur la documentation d’installation, je n’installe pas le système de génération de documentation à partir du code qui s’appelle RDoc. Je n’en vois pas l’utilité dans ce contexte, ce serait certainement différent sur une machine de développement.

On installe maintenant le gestionnaire de dépendance de Ruby : bundler. On précise que l’on ne veux toujours pas la documentation offline RDoc ni même ri qui se trouve être l’interface de lecture de la documentation offline de Ruby.

# gem install bundler --no-ri --no-rdoc

Création du user gitlab

Nous créons un utilisateur git qui contiendra toutes les données liées à Git et Gitlab. Cet utilisateur de devra pas pouvoir se loguer sur le serveur.

# adduser --gecos "GitLab" --disabled-login git

L’option --gecos permet de spécifier le nom de l’utilisateur et de ne pas avoir tout le questionnaire finger.

Installation du gestionnaire de base de donnée PostgreSQL

Pour l’installation de PostgreSQL, je vous renvoie vers l’article PostgreSQL : Installer la version 9.3 sous Debian. Lors de la rédaction de cet article, la version 9.4 était passé en stable, j’ai donc installé celle-ci.

Vu que l’installation du gestionnaire de base de donnée est faite, vous pouvez créer l’utilisateur et la base de donnée qui sera utilisé par gitlab.

$ sudo -u postgres psql -d template1
template1=# create user git createdb;
CREATE ROLE
template1=# create database gitlabhq_production owner git;
CREATE DATABASE
template1=# \q

Vous devez aussi installer le paquet postgresql-server-dev-9.4 celui-ci étant nécessaire à l’installation des gems.

# apt-get install postgresql-server-dev-9.4

Installation de Redis

Redis_LogoPour les curieux, Redis est un système de base donnée clef / valeur de type NoSQL avec la particularité de garder les données en RAM.

Dans le fichier /etc/redis/redis.conf, nous allons ouvrir le dialogue via le socket /var/run/redis/redis.sock en dé-commentant les lignes unixsocket.

unixsocket /var/run/redis/redis.sock
unixsocketperm 770

Nous modifions aussi les droits d’accès au socket en les passant de 755 à 770 (suppression des droits pour other et ajout du droit en écriture au membre du groupe redis).

On redémarre le serveur Redis puis on ajoute l’utilisateur git au groupe Redis afin qu’il puisse utiliser le socket configuré précédemment.

# service redis-server restart
# usermod -aG redis git

Installation de gitlab

Nous allons installer gitlab en version stable 7.8 dans le home de l’utilisateur git.

# cd /home/git
# sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 7-8-stable gitlab

Nous utilisons sudo -u git pour que les fichiers téléchargés soit directement avec le user et le groupe git.

Configuration de Gitlab

Puis nous allons copier le fichier de configuration d’exemple.

# cd /home/git/gitlab
# cp -p config/gitlab.yml.example config/gitlab.yml

Vous allez ensuite devoir le modifier pour mettre à jour les variables host et email_from.

Profitez en pour configurer git avec les mêmes informations que vous venez d’insérer dans le fichier de configuration Gitlab, le mail devant être identique.

# sudo -u git -H git config --global user.name "GitLab"
# sudo -u git -H git config --global user.email "gitlab@perhonen.fr"
# sudo -u git -H git config --global core.autocrlf input

On va maintenant créer le répertoire gitlab-satellites qui est utilisé lors de la modification de fichiers ou encore les demandes de fusion via l’interface web.

# sudo -u git -H mkdir /home/git/gitlab-satellites
# chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

Configuration d’Unicorn

On configure dorénavant la partie serveur HTTP Unicorn.

# cd /home/git/gitlab
# cp -p config/unicorn.rb.example config/unicorn.rb

Configuration de Rack attack

Rack attack permet de protéger le serveur HTTP des mauvaises requêtes, notamment sur l’authentification et l’API, c’est un gems qui a été conçu par Kickstarter.

# cp -p config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Par défaut, il limite le nombre de requêtes à 10 sur une période de 60 secondes. J’ai diminué le nombre de tentatives à 3 pour 30 secondes que je trouve plus adapté. Pour ce faire, j’ai modifié le fichier config/initializers/rack_attack.rb en remplaçant la ligne

Rack::Attack.throttle('protected paths', limit: 10, period: 60.seconds) do |req|

par

Rack::Attack.throttle('protected paths', limit: 3, period: 30.seconds) do |req|

Configuration de la connexion aux bases de données

Mise en place des paramètres de connexion Redis

# cp -p config/resque.yml.example config/resque.yml

Configuration des paramètres de connexion de PostgreSQL

# cp -p config/database.yml.postgresql config/database.yml

Vous devez modifier les informations de connexion. Si vous avez suivi entièrement ce tuto, vous n’avez qu’à dé-commenter username dans la section production du fichier.

Installation des dépendances Ruby

Nous allons maintenant demander à bundle d’installer toutes les dépendances ruby nécessaire au bon fonctionnement de gitlab.

# cd /home/git/gitlab
# sudo -u git -H bundle install --deployment --without development test mysql aws

L’installation des dépendances doit être faite depuis l’utilisateur git au risque de vous retrouver avec des erreurs de droits.

Installation de Gitlab-Shell

Gitlab-Shell est le système qui vérifie vos droits lors de vos push, qui exécute les commandes post-receive et qui gère les clefs SSH autorisées des différents utilisateurs.

# cd /home/git/gitlab
# sudo -u git -H bundle exec rake gitlab:shell:install[v2.5.4] REDIS_URL=unix:/var/run/redis/redis.sock RAILS_ENV=production

Initialisation de la base de donnée

Maintenant que tout le système est quasiment en place, il nous faut initialiser la base de donnée.

# cd /home/git/gitlab
# sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production

Configuration de logrotate

LogRotate permet de limiter la taille des fichiers de log, de les journaliser et de les archiver.

# cd /home/git/gitlab
# cp lib/support/logrotate/gitlab /etc/logrotate.d/gitlab

Au vu du fichier de configuration, logrotate créera un fichier chaque jour, compressera les anciens et conservera les 90 derniers. Vous pouvez modifier cette configuration sans risque selon vos désirs.

Mise en place du script d’init

Afin que le serveur Gitlab soit démarré à chaque démarrage du serveur, nous devons spécifier au système les paramètres de démarrage via un script d’init.

# cd /home/git/gitlab
# cp lib/support/init.d/gitlab /etc/init.d/gitlab
# update-rc.d gitlab defaults

Compile assets

Compilation des fichiers CSS, icônes, etc nécessaire à l’interface Web.

# sudo -u git -H bundle exec rake assets:precompile RAILS_ENV=production

Installation de NginxLogo Nginx

Nginx est le serveur WEB préconisé par Gitlab, nous l’installons via le système de paquet.

# apt-get install -y nginx

Configuration de Nginx

Par la suite, nous copions le fichier de configuration du dépôt au sein de sites-availables puis activons celui-ci en liant le fichier dans sites-enabled.

# cd /home/git/gitlab
# cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
# ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

Remplacer YOUR_SERVER_FQDN par votre nom de domaine complet. Pour ma part, j’ai aussi commenté l’écoute en IPv6.

listen [::]:80 default_server;

Démarre Gitlab

L’installation est finie, vous pouvez démarrer Gitlab et Nginx.

# service gitlab restart
# service nginx restart

Vous avez maintenant votre GitHub à vous, bon projet et profitez en.

Commentaires

  • Denis

    Excellent tutoriel

  • Anthony

    Merci, ça fait toujours plaisir ce genre de commentaires. A bientôt

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.