relecture
This commit is contained in:
parent
8decf0926b
commit
6e7d393ea5
|
@ -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,}
|
||||||
```
|
```
|
||||||
|
|
Loading…
Reference in a new issue