Gitlab: Installation depuis les sources
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.
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
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
Pour 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 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