Debian 10上でGitLab

はじめに

これまでCentOS 6で稼働させていたGitLabをDebian 10上に移行する。なお、同一バージョンでないと移行はできないので注意。

Gitlab Omnibus packageのバージョン確認方法

% sudo gitlab-rake gitlab:env:info

System information
System:		Debian 10
Current User:	git
Using RVM:	no
Ruby Version:	2.6.3p62
Gem Version:	2.7.9
Bundler Version:1.17.3
Rake Version:	12.3.3
Redis Version:	3.2.12
Git Version:	2.22.0
Sidekiq Version:5.2.7
Go Version:	unknown

GitLab information
Version:	12.5.1
Revision:	79a183ea8de
Directory:	/opt/gitlab/embedded/service/gitlab-rails
DB Adapter:	PostgreSQL
DB Version:	10.9
URL:		http://192.168.11.2
HTTP Clone URL:	http://192.168.11.2/some-group/some-project.git
SSH Clone URL:	git@192.168.11.2:some-group/some-project.git
Using LDAP:	no
Using Omniauth:	yes
Omniauth Providers: 

GitLab Shell
Version:	10.2.0
Repository storage paths:
- default: 	/var/opt/gitlab/git-data/repositories
GitLab Shell path:		/opt/gitlab/embedded/service/gitlab-shell
Git:		/opt/gitlab/embedded/bin/git

GitLabのCommunity EditionとEnterprise Editionの違い

https://www.gitlab.jp/installation/ce-or-ee/

Debian 10上にGitLab Community Editionをインストール

https://www.gitlab.jp/installation/?version=ce#debianに従い、インストールする。

まず、必要なソフトウェアの準備をする。

% sudo apt install -y curl openssh-server ca-certificates
% sudo apt install postfix (サテライトシステム:メールは他のSMTPサーバ経由で送信)

gitlab-ceに必要なパッケージをインストールする。

% curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

gitlab-ceをインストールする。「https://gitlab.example.com」の部分は自分のサーバのURLを指定する。

sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ce

CentOS 6上でのgitlab-ceのバックアップ

https://docs.gitlab.com/ee/raketasks/backup_restore.htmlに従ってバックアップをとる。

以下はバックアップコマンドでバックアップできるとのこと。

  • Database
  • Attachments
  • Git repositories data
  • CI/CD job output logs
  • CI/CD job artifacts
  • LFS objects
  • Container Registry images
  • GitLab Pages content

バックアップコマンドを実行する。バックアップは /var/opt/gitlab/backups以下に生成される。

% sudo gitlab-backup create BACKUP=dump
% ls /var/opt/gitlab/backups
dump_gitlab_backup.tar

また、/etc/gitlabの設定ファイルは上記のバックアップに含まれないので別途バックアップをとる。

% sudo gitlab-ctl backup-etc
% ls /etc/gitlab/config_backup/
gitlab_config_1574853619_2019_11_27.tar
gitlab_config_1574861603_2019_11_27.tar

バックアップしたファイルをDebian 10へもっていく。

リストア

https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installationsに従い、リストアする。

まず、念の為以下のコマンドを実行しておく。

% sudo gitlab-ctl reconfigure
% sudo gitlab-ctl start
% sudo gitlab-ctl stop unicorn
% sudo gitlab-ctl stop sidekiq

% sudo gitlab-ctl status

アプリケーションのバックアップを設置する。

% sudo cp dump_gitlab_backup.tar /var/opt/gitlab/backups/
% sudo chown git:git /var/opt/gitlab/backups/dump_gitlab_backup.tar

リストアする。なお、変数BACKUPの後ろの値は/var/opt/gitlab/backups/の中にあるバックアップファイルのhogehoge_gitlab_backup.tarのhogehogeの部分となる。今回はdump_gitlab_backup.tarなので、BACKUP=dumpとなる。

% sudo gitlab-backup restore BACKUP=dump

次にバックアップをとったgitlab-secrets.jsonとgitlab.rbをコピーする。

% tar xfv gitlab_config_1574861603_2019_11_27.tar
% cd etc/gitlab
% sudo cp gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old-server
% sudo cp gitlab.rb /etc/gitlab/gitlab.rb.old-server
% cd /etc/gitlab
% cp -p gitlab-secrets.json gitlab-secrets.json.org
% cp gitlab-secrets.json.old-server gitlab-secrets.json
% vi gitlab.rb  (適宜、編集する)

反映させる。

% sudo gitlab-ctl reconfigure
% sudo gitlab-ctl restart
% sudo gitlab-rake gitlab:check SANITIZE=true

辞書攻撃への対応

fail2banで行おうと思った所、GitLab自体にそのような機能があった。

/etc/gitlab/gitlab.rbの該当部分をコメントアウトする。

gitlab_rails['rack_attack_git_basic_auth'] = {
  'enabled' => true,
  'ip_whitelist' => ["127.0.0.1"],
  'maxretry' => 10, # Limit the number of Git HTTP authentication attempts per IP
  'findtime' => 60, # Reset the auth attempt counter per IP after 60 seconds
  'bantime' => 3600 # Ban an IP for one hour (3600s) after too many auth attempts
}

設定を読み込み直す。

% sudo gitlab-ctl reconfigure

cron によるバックアップ

毎日バックアップをとるとして、何世代分バックアップを残すのかを/etc/gitlab.rb で設定する。今回はデフォルトの7世代分とする。該当部分は以下のとおり。

gitlab_rails['backup_keep_time'] = 604800

cronで毎日バックアップをとる。

% sudo su
# crontab -e -u root
0 3 * * * /usr/bin/gitlab-backup create CRON=1
0 4 * * * /usr/bin/gitlab-ctl backup-etc CRON=1