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