wiki/HowtoGitlab/8.14.md
2016-12-02 12:03:18 +01:00

14 KiB

t (1 row)


## Redis

On utilise une instance Redis dédiée à chaque instance GitLab :

apt install redis-server

systemctl stop redis-server

systemctl disable redis-server


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

[Service] Type=forking ExecStart=/usr/bin/redis-server /etc/redis/%i.conf ExecStartPost=/bin/chgrp %i /var/run/redis/%i.sock ExecStop=/usr/bin/redis-cli shutdown Restart=always User=redis Group=%i

[Install] WantedBy=multi-user.target


Puis :

systemctl daemon-reload


Configuration spéciale pour l'instance : 

cat /etc/redis/gitlab-demo00.conf

daemonize yes pidfile /var/run/redis/foo.pid port 0 unixsocket /var/run/redis/foo.sock unixsocketperm 770 timeout 0 loglevel notice logfile /var/log/redis/foo.log databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename foo.rdb dir /var/lib/redis

chmod 644 /etc/redis/foo.conf

systemctl enable redis@foo

systemctl start redis@foo



## GitLag CE

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 config/gitlab.yml $ sed -i 's@/home/git@/home/foo@g' config/gitlab.yml


Éditer `config/gitlab.yml` :

host: foo.gitlab.example.com port: 443 https: true user: foo email_from: gitlab@example.com email_display_name: GitLab foo email_reply_to: gitlab@example.com


Mettre le mot de passe PostgreSQL :

$ 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

$ cp config/database.yml.postgresql config/database.yml $ sed -i -e 's/database: gitlabhq_production/database: foo/'
-e 's/# username: git/username: foo/'
-e 's/# password:/password: PASSWORD/' config/database.yml $ chmod o-rwx config/database.yml


> **Note** : Conservez l'espace devant le sed pour ne pas enregistrer le mot de passe dans l'historique bash.

Ajuster les droits de certains répertoires :

$ chmod -R u+rwX,go-w log/ $ chmod -R u+rwX tmp/ $ chmod -R u+rwX tmp/pids/ $ chmod -R u+rwX tmp/sockets/ $ install -d -m 700 public/uploads/ $ chmod -R u+rwX builds/ $ chmod -R u+rwX shared/artifacts/


## Unicorn

Configuration de base d'Unicorn :

$ cp config/unicorn.rb.example config/unicorn.rb $ sed -i -e
-e 's@/home/git@/home/foo@g'
-e 's/listen "127.0.0.1:8080", :tcp_nopush => true/#listen "127.0.0.1:8080", :tcp_nopush => true/'
config/unicorn.rb


## Rack attack

Initialisation de la configuration de Rack::Attack (qui permet du filtrage / rate-limiting) :

$ cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb


### Git

Configuration :

$ git config --global core.autocrlf input $ git config --global gc.auto 0 $ git config --global repack.writeBitmaps true


## Resque

Configuration :

$ cp config/resque.yml.example config/resque.yml $ sed -i 's/redis.sock/gitlab-demo00.sock/' config/resque.yml


## Gems

> **Important**: Votre partition `/home` ne doit pas être montée avec l'option `noexec`.

On installe quelques Gems :

$ umask 002 $ bundle install -j$(nproc) --deployment --without development test mysql aws kerberos


## GitLab Shell

Installation :

$ umask 002 $ bundle exec rake gitlab🐚install REDIS_URL=unix:/var/run/redis/foo.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true $ chmod -R ug+rwX,o-rwx ~/repositories/ $ chmod -R ug-s ~/repositories/ $ chmod g+s ~/repositories/


## gitlab-workhorse

Installation :

$ umask 002 $ cd $ git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git $ cd gitlab-workhorse $ git checkout v$(cat ~/gitlab/GITLAB_WORKHORSE_VERSION) $ make


### Création de la BDD

$ cd ~/gitlab $ bundle exec rake gitlab:setup RAILS_ENV=production GITLAB_ROOT_PASSWORD=yourpassword GITLAB_ROOT_EMAIL=youremail


> **Note :** `GITLAB_ROOT_PASSWORD` concerne le mot de passe de l'utilisateur admin nommé root sur l'interface web de GitLab et `GITLAB_ROOT_EMAIL` le mail associé. Conservez un espace avant la commande pour qu'elle ne se retrouve pas dans l'historique bash.


## Script d'init

Attention, GitLab ne supporte pas officiellement systemd !

On doit donc encore passer pas un script d'init classique :

sudo -iu gitlab-demo00

$ cd gitlab $ sed -i -e 's/app_user="git"/app_user="foo"/'
-e 's/# Provides: .*gitlab/# Provides: foo/'
lib/support/init.d/gitlab $ sed -i 's@script_path = "/etc/init.d/gitlab"@script_path = "/etc/init.d/gitlab-foo"@g' lib/tasks/gitlab/check.rake $ git commit -a -m 'change default user'

install -m 755 /home/foo/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab-foo

systemctl enable gitlab-foo


## Logrotate

install -m 644 /home/gitlab-demo00/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/gitlab-foo

sed -i 's@/home/git@/home/foo@g' /etc/logrotate.d/gitlab-foo


### Vérifier l'état de l'installation

sudo -iu gitlab-demo00

$ cd gitlab $ bundle exec rake gitlab:env:info RAILS_ENV=production


### Compiler les Assets

$ bundle exec rake assets:precompile RAILS_ENV=production


### Démarrer l'instance

```
# /etc/init.d/gitlab-demo00 start
```

## Nginx

On utilise Nginx car c'est le seul serveur web supporté officiellement par GitLab.

> **Note** : La partie SSL/TLS n'est pas évoqué. À vous de faire le nécessaire avec un certificat let's encrypt par exemple. N'oubliez donc pas de modifier les directives ssl_ dans le vhost.

### Création du vhost

```
# install -m 644 /home/gitlab-demo00/gitlab/lib/support/nginx/gitlab-ssl /etc/nginx/sites-available/gitlab-demo00
# sed -i -e 's#/home/git/#/home/gitlab-demo00/#g' \
  -e 's/YOUR_SERVER_FQDN/demo00.gitlab.example.com/g' \
  -e 's#/var/log/nginx/gitlab#/var/log/nginx/gitlab-demo00#g' \
  -e 's/upstream gitlab-workhorse/upstream gitlab-demoOO-workhorse/' \
  -e 's#http://gitlab-workhorse#http://gitlab-demo00-workhorse#' \
  /etc/nginx/sites-available/gitlab-demo00
# ln -s /etc/nginx/sites-available/gitlab-demo00 /etc/nginx/sites-enabled/
# /etc/init.d/nginx restart

```


## Terminé !

### Vérifier le status

```
# sudo -iu gitlab-demo00
$ cd gitlab
$ bundle exec rake gitlab:check RAILS_ENV=production
```

Si tout est au vert, c'est bon ! On pourra aller sur l'instance via https://demo00.gitlab.example.com

# Mise à jour

Le principe des mises à jour est basé sur un `git pull` et un `git checkout`.

## Mineure 8.14.0 vers 8.14.1

### Backup

```
# sudo -iu gitlab-demo00
$ cd gitlab
$ bundle exec rake gitlab:backup:create RAILS_ENV=production
```

### Mise à jour de GitLab

```
# sudo -iu gitlab-demo00
$ cd gitlab
$ git fetch --all
$ git checkout -- Gemfile.lock db/schema.rb
$ git checkout v8.14.1 -b v8.14.1
$ sed -i -e s'/app_user="git"/app_user="gitlab-demo00"/' \
  -e 's/# Provides: .*gitlab$/# Provides: gitlab-demo00/' \
  lib/support/init.d/gitlab
$ sed -i 's#script_path = "/etc/init.d/gitlab"#script_path = "/etc/init.d/gitlab-demo00"#g' lib/tasks/gitlab/check.rake
$ git commit -a -m 'change default user'
```

### Mise à jour BDD, gems et assets

```
$ cd ~/gitlab
$ bundle install --without development test mysql aws kerberos --deployment
$ bundle clean
$ bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production
$ git commit -a -m 'upgraded to 8.14.1'
```

### Redémarrer GitLab

```
# /etc/init.d/gitlab-demo00 restart
```

### Vérifier le status

```
# sudo -iu gitlab-demo00
$ cd gitlab
$ bundle exec rake gitlab:env:info RAILS_ENV=production
$ bundle exec rake gitlab:check RAILS_ENV=production
```

Si tout est au vert, la migration s'est bien passé !

## Mineure 8.14.1 vers 8.14.2

### Backup

sudo -iu foo

$ cd #gitlab $ bundle exec rake gitlab:backup:create RAILS_ENV=production


Cela va créer une archive TAR dans `~/gitlab/tmp/backups/`.

### Mise à jour de GitLab

sudo -iu foo

$ umask 002 $ cd gitlab $ git fetch --all $ git checkout -- Gemfile.lock db/schema.rb $ git checkout v8.14.2 -b v8.14.2 $ sed -i -e s'/app_user="git"/app_user="foo"/'
-e 's/# Provides: .*gitlab$/# Provides: foo/'
lib/support/init.d/gitlab $ sed -i 's@script_path = "/etc/init.d/gitlab"@script_path = "/etc/init.d/foo"@g' lib/tasks/gitlab/check.rake $ git commit -a -m 'change default user'


### Mise à jour de gitlab-workhorse

$ cd ~/gitlab-workhorse $ git fetch $ git checkout v$(cat ~/gitlab/GITLAB_WORKHORSE_VERSION) -b v$(cat ~/gitlab/GITLAB_WORKHORSE_VERSION) $ make


### Mise à jour BDD, gems et assets

$ cd ~/gitlab $ bundle install --without development test mysql aws kerberos --deployment $ bundle clean $ bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production $ git commit -a -m 'upgraded to 8.14.2'


### Redémarrer GitLab

/etc/init.d/gitlab-foo restart

Shutting down GitLab Unicorn Shutting down GitLab Sidekiq Shutting down GitLab Workhorse . GitLab is not running. Starting GitLab Unicorn Starting GitLab Sidekiq Starting GitLab Workhorse

The GitLab Unicorn web server with pid 8120 is running. The GitLab Sidekiq job dispatcher with pid 8221 is running. The GitLab Workhorse with pid 8202 is running. GitLab and all its components are up and running.


### Vérifier le status

~~
# sudo -iu foo
$ cd gitlab
$ bundle exec rake gitlab:env:info RAILS_ENV=production
$ bundle exec rake gitlab:check RAILS_ENV=production

Si tout est au vert, la migration s'est bien passée !

Majeure

En attente d'une nouvelle release majeure :)

Création d'une autre instance

Il suffit de rejouer la procédure en modifiant « gitlab-demo00 » par le nom d'instance souhaitée.

Backup

Cron

# crontab -u gitlab-demo00 -e
# Create a full backup of the GitLab repositories and SQL database every day at 4am
0 4 * * * cd /home/gitlab-demo00/gitlab && bundle exec rake gitlab:backup:create RAILS_ENV=production CRON=1

Dans ~/gitlab/config/gitlab.yml on pourra indiquer un temps de rétention. Par exemple pour garder 5j de backups :

keep_time: 432000

Note

: Par défaut, les backups sont dans ~/gitlab/tmp/backups. Il est conseillé de les sauvegarder ailleurs et sur une machine distante.

Sauvegarder secrets.yml

Le fichier secrets.yml contient les clés de chiffrements pour les sessions et les variables. On pourra le copier dans /root par exemple, à vous de choisir l'endroit approprié.

# install -m 600 -o root -g root /home/gitlab-demo00/gitlab/config/secrets.yml /root/gitlab-demo00.secrets.yml