wiki/HowtoGitlab/8.13.md
2016-11-30 16:20:13 +01:00

14 KiB

categories title
web Howto GitLab
 t
(1 row)
```

Redis

On utilisera redis en mode multi instances grâce à systemd et les templates d'unités.

# 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 :

[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

# systemctl daemon-reload

Créer une config spéciale pour l'instance :

# vim /etc/redis/gitlab-demo00.conf

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

# chmod 644 /etc/redis/gitlab-demo00.conf

# systemctl enable redis@gitlab-demo00
# systemctl start redis@gitlab-demo00

GitLab

Configuration du cœur

# sudo -iu gitlab-demo00
$ umask 002
$ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 8-13-stable gitlab
$ cd gitlab
$ cp config/gitlab.yml{.example,}
$ sed -i 's#/home/git#/home/gitlab-demo00#g' config/gitlab.yml

Éditer manuellement config/gitlab.yml sur cette base :

host: demo00.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
$ 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
$ 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/

Configuration Unicorn

$ cp config/unicorn.rb{.example,}
$ sed -i -e "s/worker_processes 3/worker_processes $(nproc)/" \
  -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

$ cp config/initializers/rack_attack.rb{.example,}

Configuration de GIT

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

Configuration de Resque/Redis

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

Configuration des paramètres de connexion à la base

$ cp config/database.yml{.postgresql,}
$  sed -i -e 's/database: gitlabhq_production/database: gitlab-demo00/' \
  -e 's/# username: git/username: gitlab-demo00/' \
  -e 's/# password:/password: VotreMDP/' 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.

Installation des Gems

Important: Votre /home ne doit pas être monté avec l'option noexec.

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

Installation de GitLab Shell

$ bundle exec rake gitlab:shell:install REDIS_URL=unix:/var/run/redis/gitlab-demo00.sock RAILS_ENV=production SKIP_STORAGE_VALIDATION=true
$ sed ca_file?
$ chmod -R ug+rwX,o-rwx ~/repositories/
$ chmod -R ug-s ~/repositories/
$ chmod g+s ~/repositories/

Install gitlab-workhorse

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

TODO: Config mode multi instance ?

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.

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

Mise en place d'un script d'init

GitLab ne supporte pas officiellement systemd… On doit donc encore passer pas un script d'init classique.

# sed -i -e \
  's/app_user="git"/app_user="gitlab-demo00"/' \
  -e 's/# Provides: .*gitlab/# Provides: gitlab-demo00/' \
  /home/gitlab-demo00/gitlab/lib/support/init.d/gitlab
# install -m 755 /home/gitlab-demo00/gitlab/lib/support/init.d/gitlab /etc/init.d/gitlab-demo00
# systemctl enable gitlab-demo00
# sed -i 's#script_path = "/etc/init.d/gitlab"#script_path = "/etc/init.d/gitlab-demo00"#g' /home/gitlab-demo00/gitlab/lib/tasks/gitlab/check.rake
# sudo -iu gitlab-demo00
$ cd gitlab
$ git commit -a -m 'change default user'

Logrotate

# install -m 644 /home/gitlab-demo00/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/gitlab-demo00
# sed -i 's#/home/git/#/home/gitlab-demo00/#g' /etc/logrotate.d/gitlab-demo00

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.13.5 vers 8.13.6

Backup

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

Arrêt du service

# /etc/init.d/gitlab-demo00 stop

Mise à jour de GitLab

# sudo -iu gitlab-demo00
$ cd gitlab
$ git fetch --all
$ git checkout -- Gemfile.lock db/schema.rb
$ git checkout v8.13.6 -b v8.13.6
$ 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 de gitlab-shell

$ cd ~/gitlab-shell
$ git fetch
$ git checkout v$(cat ~/gitlab/GITLAB_SHELL_VERSION) -b v$(cat ~/gitlab/GITLAB_SHELL_VERSION)

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 db:migrate RAILS_ENV=production
$ bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

Démarrer GitLab

# /etc/init.d/gitlab-demo00 start
# /etc/init.d/nginx 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é !

Majeure 8.13 vers 8.14

Pour les mises à jour majeure, par exemple de 8.13 à 8.14, il y a une documentation officielle bien défini. Nous sommes évidement basé sur la documentation officielle. Liste des documentations d'upgrades majeure.

Note

: Si nous n'avons pas encore écrit le howto de migration, il faudra bien penser à faire les adaptations nécessaires (chemin, nom d'utilisateur, …).

Arrêt du service

# /etc/init.d/gitlab-demo00 stop

Backup

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

Mise à jour de GitLab

$ git fetch --all
$ git checkout -- db/schema.rb
$ git checkout 8-14-stable
$ 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 de gitlab-shell

$ cd ~/gitlab-shell
$ git fetch --all --tags
$ git checkout v4.0.0

Mise à jour de gitlab-workhrose

$ cd ~/gitlab-workhorse
$ git fetch --all
$ git checkout v1.0.0
$ make

Mise à jour BDD, gems et assets

$ cd ~/gitlab
$ bundle install --without development test mysql aws kerberos --deployment
$ bundle clean
$ bundle exec rake db:migrate RAILS_ENV=production
$ bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

Mise à jour de la config

Il va falloir merger manuellement la configuration.

$ vimdiff <(git show origin/8-14-stable:config/gitlab.yml.example) config/gitlab.yml
$ git commit -a -m 'manually merged config file'
$ git config --global repack.writeBitmaps true

Démarrer GitLab

# /etc/init.d/gitlab-demo00 start
# /etc/init.d/nginx 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é !

Création d'une autre instance

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