はじめに
これまで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の違い
Debian 10の準備
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