From 6e7d393ea58216f5b4cb67b99073ae0c5be98c17 Mon Sep 17 00:00:00 2001 From: gcolpart Date: Thu, 1 Dec 2016 03:54:08 +0100 Subject: [PATCH] relecture --- HowtoGitlab/8.14.md | 225 +++++++++++++++++++++----------------------- 1 file changed, 105 insertions(+), 120 deletions(-) diff --git a/HowtoGitlab/8.14.md b/HowtoGitlab/8.14.md index badf71a5..c96bb2da 100644 --- a/HowtoGitlab/8.14.md +++ b/HowtoGitlab/8.14.md @@ -5,132 +5,118 @@ title: Howto GitLab * Documentation : -[GitLab](https://about.gitlab.com/) est un logiciel libre de gestion de développement de logiciels (appelé souvent une *forge*) permettant de gérer des projets (code source, demande de fusion, tickets, wiki, etc.). Il est semblable au logiciel propriétaire Github. - -Ce HowTo décrit l'installation de la version **8.14.X** sous **Debian 8** (Jessie) avec une approche multi-instances. - -> **Note** : dans les exemples, on va créer une instance *foo* +[GitLab](https://about.gitlab.com/) est un logiciel libre de gestion de développement de logiciels (appelé souvent une *forge*) permettant de créer des projets avec un dépôt Git pour le code source, la demande de fusion (*merge/pull requests*), un outil de tickets, un wiki, etc. GitLab ressemble sous certains aspects au logiciel propriétaire Github. # Installation -La stack est composée de : +Nous installons la version **8.14.X** sous **Debian 8** (Jessie) avec une approche multi-instances. -- Git ; -- Ruby ; -- Go ; -- PostgreSQL ; -- Redis. +GitLab s'appuye sur Git, Ruby, Go, PostgreSQL et Redis. +> **Note** : dans les exemples ci-dessous, on va créer une instance nommée *foo* -## Packages +## Dépendances -GitLab a besoin de versions très récentes de Git, Ruby et Go. -On utilise pour l'instant des versions de Jessie Backports et Stretch via un « pinning » apt. +GitLab nécessite des version très récentes de Git, Ruby et Go. + +On utilise pour l'instant des versions de Jessie Backports et Stretch via un « pinning » APT : ~~~ Package: * -Pin: release n=stretch -Pin-Priority: 1 +Pin: release n=jessie-backports +Pin-Priority: 50 + Package: * -Pin: release n=jessie-backports -Pin-Priority: 1 - -Package: git git-man ruby ruby2.3 ruby-dev ruby2.3-dev libruby2.3 rake ruby-test-unit libncurses5 libreadline7 libtinfo5 libncursesw5 libncurses5-dev libtinfo-dev ncurses-bin Pin: release n=stretch -Pin-Priority: 999 +Pin-Priority: 50 Package: golang golang-doc golang-src golang-go Pin: release n=jessie-backports Pin-Priority: 999 + +Package: git git-man ruby ruby2.3 ruby-dev ruby2.3-dev libruby2.3 rake ruby-test-unit libncurses5 libreadline7 libtinfo5 libncursesw5 libncurses5-dev libtinfo-dev ncurses-bin +Pin: release n=stretch +Pin-Priority: 999 ~~~ -``` -# apt install build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate python-docutils pkg-config cmake nodejs bundler ruby2.3 git golang -``` +On peut ainsi installer toutes les dépendances pour Gitlab : + +~~~ +# apt install build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev \ +libffi-dev curl openssh-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate \ +python-docutils pkg-config cmake nodejs bundler ruby2.3 git golang +~~~ ## Compte UNIX -Créer un compte UNIX « gitlab-demo00 ». +Créer un compte UNIX *foo* : - # adduser --disabled-login --gecos 'GitLab instance demo00' gitlab-demo00 +~~~ +# adduser --disabled-login --gecos 'GitLab instance foo' foo +~~~ -> **Note** : Assurez-vous d'avoir `DIR_MODE=0755` dans `/etc/adduser.conf`. Cela sera nécessaire pour nginx. +> **Note** : Assurez-vous d'avoir `DIR_MODE=0755` dans `/etc/adduser.conf` (nécessaire pour Nginx) -## Base de données +## PostgreSQL -GitLab recommande fortement PostgreSQL. On utilisera donc la version 9.4 de Debian Jessie. +GitLab recommande [PostgreSQL](HowtoPostgreSQL). On utilise donc la version 9.4 de Debian Jessie : -Installation de PostgreSQL : - -``` +~~~ # apt install postgresql postgresql-client libpq-dev postgresql-contrib -``` +~~~ -> **Note** : Nous conseillons de désactiver le mode « peer » et d'utiliser des mots de passe. +Création de l'utilisateur PostgreSQL : -Création de l'utilisateur : +~~~ +# sudo -u postgres createuser foo -P -D -A -R +# sudo -u postgres psql -d template1 -c 'ALTER ROLE "foo" CREATEDB;' +~~~ -``` -# sudo -u postgres createuser gitlab-demo00 -P -D -A -R -# sudo -u postgres psql -d template1 -c 'ALTER ROLE "gitlab-demo00" CREATEDB;' -``` - -> **Note** : On lui donne les droits CREATEDB, car GitLab doit faire un DROP DATABASE, puis CREATE DATABASE lors de l'installation… +> **Note** : On donne les droits CREATEDB car GitLab doit faire un DROP DATABASE puis CREATE DATABASE lors de l'installation… > **Note** : Pensez à conserver le mot de passe pour le mettre par la suite dans la configuration GitLab. Création de l'extension `pg_trgm` : -``` +~~~ # sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;" -``` +~~~ Création de la base pour GitLab : -``` -# sudo -u postgres createdb -O gitlab-demo00 -E UNICODE gitlab-demo00 -``` +~~~ +# sudo -u postgres createdb -O foo -E UNICODE foo +~~~ -Tester la connexion : +Tester la connexion et si l'extension `pg_trgm` est bien activée : -``` -# sudo -u gitlab-demo00 -H psql --password -d gitlab-demo00 -``` +~~~ +# sudo -u foo -H psql --password -d foo -Tester si l'extension `pg_trgm` est bien activée : +psql> SELECT true AS enabled FROM pg_available_extensions + WHERE name = 'pg_trgm' AND installed_version IS NOT NULL; - ``` - SELECT true AS enabled - FROM pg_available_extensions - WHERE name = 'pg_trgm' - AND installed_version IS NOT NULL; - ``` - - Cela doit retourner (« 1 row ») : - - ``` - enabled - --------- - t - (1 row) - ``` +enabled +--------- + t +(1 row) +~~~ ## Redis -On utilisera redis en mode multi instances grâce à systemd et les templates d'unités. +On utilise une instance Redis dédiée à chaque instance GitLab : - # apt install redis-server - -``` +~~~ +# apt install redis-server # systemctl stop redis-server # systemctl disable redis-server -``` +~~~ -Créer et activer le template d'unité `/etc/systemd/system/redis@.service` : +Créer et activer le template d'unité systemd `/etc/systemd/system/redis@.service` : -``` +~~~ [Unit] Description=Advanced key-value store instance %i After=network.target @@ -146,23 +132,27 @@ Group=%i [Install] WantedBy=multi-user.target +~~~ -``` - # systemctl daemon-reload +Puis : +~~~ +# systemctl daemon-reload +~~~ -Créer une config spéciale pour l'instance : -``` -# vim /etc/redis/gitlab-demo00.conf +Créer une configuration spéciale pour l'instance : + +~~~ +# cat /etc/redis/gitlab-demo00.conf daemonize yes -pidfile /var/run/redis/gitlab-demo00.pid +pidfile /var/run/redis/foo.pid port 0 -unixsocket /var/run/redis/gitlab-demo00.sock +unixsocket /var/run/redis/foo.sock unixsocketperm 770 timeout 0 loglevel notice -logfile /var/log/redis/gitlab-demo00.log +logfile /var/log/redis/foo.log databases 16 save 900 1 save 300 10 @@ -170,53 +160,46 @@ save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes -dbfilename gitlab-demo00.rdb +dbfilename foo.rdb dir /var/lib/redis -# chmod 644 /etc/redis/gitlab-demo00.conf +# chmod 644 /etc/redis/foo.conf -``` +# systemctl enable redis@foo +# systemctl start redis@foo +~~~ -``` -# systemctl enable redis@gitlab-demo00 -# systemctl start redis@gitlab-demo00 +## GitLag CE -``` - - -## GitLab - -### Configuration du cœur - -``` -# sudo -iu gitlab-demo00 +~~~ +# sudo -iu foo $ umask 002 $ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-14-stable gitlab $ cd gitlab -$ cp config/gitlab.yml{.example,} -$ sed -i 's#/home/git#/home/gitlab-demo00#g' config/gitlab.yml -``` +$ cp config/gitlab.yml.example config/gitlab.yml +$ sed -i 's@/home/git@/home/foo@g' config/gitlab.yml +~~~ -Éditer manuellement config/gitlab.yml sur cette base : +Éditer `config/gitlab.yml` : -``` -host: demo00.gitlab.example.com +~~~ +host: foo.gitlab.example.com port: 443 https: true -user: gitlab-demo00 -email_from: demo00@gitlab.example.com -email_display_name: GitLab demo00 -email_reply_to: demo00@gitlab.example.com -``` +user: foo +email_from: gitlab@example.com +email_display_name: GitLab foo +email_reply_to: gitlab@example.com +~~~ -``` -$ cp config/secrets.yml{.example,} -$ sed -i "s/# db_key_base:/db_key_base: $(apg -m30 -n1)/" config/secrets.yml -$ chmod 0600 config/secrets.yml -``` +~~~ +$ cp config/secrets.yml.example config/secrets.yml +$ sed -i "s@^# db_key_base:@db_key_base: PASSWORD@" config/secrets.yml +$ chmod 600 config/secrets.yml +~~~ -``` +~~~ $ chmod -R u+rwX,go-w log/ $ chmod -R u+rwX tmp/ $ chmod -R u+rwX tmp/pids/ @@ -224,18 +207,20 @@ $ chmod -R u+rwX tmp/sockets/ $ install -d -m 700 public/uploads/ $ chmod -R u+rwX builds/ $ chmod -R u+rwX shared/artifacts/ -``` +~~~ -### Configuration Unicorn -``` -$ cp config/unicorn.rb{.example,} -$ sed -i -e "s/worker_processes 3/worker_processes $(nproc)/" \ +## Unicorn + +~~~ +$ cp config/unicorn.rb.example config/unicorn.rb +$ sed -i -e \ -e 's#/home/git#/home/gitlab-demo00#g' \ -e 's/listen "127.0.0.1:8080", :tcp_nopush => true/#listen "127.0.0.1:8080", :tcp_nopush => true/' \ config/unicorn.rb +~~~ -``` -### Configuration de Rack attack + +## Configuration de Rack attack ``` $ cp config/initializers/rack_attack.rb{.example,} ```