relecture

This commit is contained in:
gcolpart 2016-12-01 03:54:08 +01:00
parent 8decf0926b
commit 6e7d393ea5

View file

@ -5,132 +5,118 @@ title: Howto GitLab
* Documentation : <https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md> * Documentation : <https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md>
[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. [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.
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*
# Installation # Installation
La stack est composée de : Nous installons la version **8.14.X** sous **Debian 8** (Jessie) avec une approche multi-instances.
- Git ; GitLab s'appuye sur Git, Ruby, Go, PostgreSQL et Redis.
- Ruby ;
- Go ;
- PostgreSQL ;
- 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. 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.
On utilise pour l'instant des versions de Jessie Backports et Stretch via un « pinning » APT :
~~~ ~~~
Package: * Package: *
Pin: release n=stretch Pin: release n=jessie-backports
Pin-Priority: 1 Pin-Priority: 50
Package: * 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: release n=stretch
Pin-Priority: 999 Pin-Priority: 50
Package: golang golang-doc golang-src golang-go Package: golang golang-doc golang-src golang-go
Pin: release n=jessie-backports Pin: release n=jessie-backports
Pin-Priority: 999 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
~~~ ~~~
``` 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
``` ~~~
# 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 ## 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 # 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;'
~~~
``` > **Note** : On donne les droits CREATEDB car GitLab doit faire un DROP DATABASE puis CREATE DATABASE lors de l'installation…
# 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** : Pensez à conserver le mot de passe pour le mettre par la suite dans la configuration GitLab. > **Note** : Pensez à conserver le mot de passe pour le mettre par la suite dans la configuration GitLab.
Création de l'extension `pg_trgm` : Création de l'extension `pg_trgm` :
``` ~~~
# sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;" # sudo -u postgres psql -d template1 -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
``` ~~~
Création de la base pour GitLab : 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;
``` enabled
SELECT true AS enabled ---------
FROM pg_available_extensions t
WHERE name = 'pg_trgm' (1 row)
AND installed_version IS NOT NULL; ~~~
```
Cela doit retourner (« 1 row ») :
```
enabled
---------
t
(1 row)
```
## Redis ## 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 stop redis-server
# systemctl disable 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] [Unit]
Description=Advanced key-value store instance %i Description=Advanced key-value store instance %i
After=network.target After=network.target
@ -146,23 +132,27 @@ Group=%i
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
~~~
``` Puis :
# systemctl daemon-reload
~~~
# systemctl daemon-reload
~~~
Créer une config spéciale pour l'instance : Créer une configuration spéciale pour l'instance :
```
# vim /etc/redis/gitlab-demo00.conf ~~~
# cat /etc/redis/gitlab-demo00.conf
daemonize yes daemonize yes
pidfile /var/run/redis/gitlab-demo00.pid pidfile /var/run/redis/foo.pid
port 0 port 0
unixsocket /var/run/redis/gitlab-demo00.sock unixsocket /var/run/redis/foo.sock
unixsocketperm 770 unixsocketperm 770
timeout 0 timeout 0
loglevel notice loglevel notice
logfile /var/log/redis/gitlab-demo00.log logfile /var/log/redis/foo.log
databases 16 databases 16
save 900 1 save 900 1
save 300 10 save 300 10
@ -170,53 +160,46 @@ save 60 10000
stop-writes-on-bgsave-error yes stop-writes-on-bgsave-error yes
rdbcompression yes rdbcompression yes
rdbchecksum yes rdbchecksum yes
dbfilename gitlab-demo00.rdb dbfilename foo.rdb
dir /var/lib/redis 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
~~~
``` ## GitLag CE
# systemctl enable redis@gitlab-demo00
# systemctl start redis@gitlab-demo00
``` ~~~
# sudo -iu foo
## GitLab
### Configuration du cœur
```
# sudo -iu gitlab-demo00
$ umask 002 $ umask 002
$ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-14-stable gitlab $ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-14-stable gitlab
$ cd gitlab $ cd gitlab
$ cp config/gitlab.yml{.example,} $ cp config/gitlab.yml.example config/gitlab.yml
$ sed -i 's#/home/git#/home/gitlab-demo00#g' 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 port: 443
https: true https: true
user: gitlab-demo00 user: foo
email_from: demo00@gitlab.example.com email_from: gitlab@example.com
email_display_name: GitLab demo00 email_display_name: GitLab foo
email_reply_to: demo00@gitlab.example.com email_reply_to: gitlab@example.com
``` ~~~
``` ~~~
$ cp config/secrets.yml{.example,} $ cp config/secrets.yml.example config/secrets.yml
$ sed -i "s/# db_key_base:/db_key_base: $(apg -m30 -n1)/" config/secrets.yml $ sed -i "s@^# db_key_base:@db_key_base: PASSWORD@" config/secrets.yml
$ chmod 0600 config/secrets.yml $ chmod 600 config/secrets.yml
``` ~~~
``` ~~~
$ chmod -R u+rwX,go-w log/ $ chmod -R u+rwX,go-w log/
$ chmod -R u+rwX tmp/ $ chmod -R u+rwX tmp/
$ chmod -R u+rwX tmp/pids/ $ chmod -R u+rwX tmp/pids/
@ -224,18 +207,20 @@ $ chmod -R u+rwX tmp/sockets/
$ install -d -m 700 public/uploads/ $ install -d -m 700 public/uploads/
$ chmod -R u+rwX builds/ $ chmod -R u+rwX builds/
$ chmod -R u+rwX shared/artifacts/ $ chmod -R u+rwX shared/artifacts/
``` ~~~
### Configuration Unicorn ## Unicorn
```
$ cp config/unicorn.rb{.example,} ~~~
$ sed -i -e "s/worker_processes 3/worker_processes $(nproc)/" \ $ cp config/unicorn.rb.example config/unicorn.rb
$ sed -i -e \
-e 's#/home/git#/home/gitlab-demo00#g' \ -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/' \ -e 's/listen "127.0.0.1:8080", :tcp_nopush => true/#listen "127.0.0.1:8080", :tcp_nopush => true/' \
config/unicorn.rb config/unicorn.rb
~~~
```
### Configuration de Rack attack ## Configuration de Rack attack
``` ```
$ cp config/initializers/rack_attack.rb{.example,} $ cp config/initializers/rack_attack.rb{.example,}
``` ```