[GitLab]GitLabが動いているCentOS7がサポート切れなので、AlmaLinux9に移行する[GitLab]

GitLab

はじめに

CentOS7のサポートが2024年6月30日に終了ということで、サーバ環境を調べてみたところ、GitLabが動いているサーバがこれに該当した…えーめんどくせーわー…ってことでサーバ移行を行う。

GitLab公式が推奨するLinuxパッケージはUbuntu等あるが、AlmaLinux9をなんとなく選択した。(https://about.gitlab.com/ja-jp/install/

環境

  • 旧サーバ:CentOS7
  • 新サーバ:AlmaLinux9
  • GitLab:16.8.1-ee
  • クラウドサービス:Azure

事前準備

GitLabのプロジェクト数や使用量によってバックアップ・リストアの処理時間はかなりかかる。使用しない前提の時間帯に実施するのが良い。ちなみに私は土曜のお休みの日に出社して移行作業を行った。まぁ明日休むけど。
バックアップの容量は10GB程度あった。バックアップ処理と転送時間が大体1時間位。

移行作業はおおまかに以下を想定

  1. 新サーバの起動・ある程度のパッケージインストール(バックアップ後でもいいが平日に準備しておいたほうが休日出勤の時間が短縮できると思う。)
  2. 新サーバへGitLabインストール
  3. 旧サーバのGitLabバックアップ
  4. 新サーバへGitLabリストア
  5. 新サーバの設定やDNS切り替え

移設作業

新サーバの起動

GitLabを動かすには500ユーザーサポートでCPU4個、メモリ4GBは必要らしい。
現サーバはCPU2個、メモリ8GBで特に問題なく動作しているので、このサイズのサーバを用意する。

Azure上にAlmaLinux9を準備し、SSH接続できるところまでは省略する。

各種パッケージのインストールや設定

OSのアップデート

sudo dnf update

firewalldの停止(仮想マシンの外側にファイヤウォールがいるので、不要)

# 停止
sudo systemctl stop firewalld
# 自動起動停止
sudo systemctl disable firewalld

ロケールとタイムゾーンの変更

# 日本語パッケージインストール
$ sudo dnf install glibc-langpack-ja
# 日本語ロケール設定
$ sudo localectl set-locale ja_JP.UTF-8
# 確認
$ localectl status
System Locale: LANG=ja_JP.UTF-8
    VC Keymap: us
   X11 Layout: us
# タイムゾーンの設定
$ sudo timedatectl set-timezone Asia/Tokyo
# タイムゾーンの確認
$ timedatectl show -p Timezone
Timezone=Asia/Tokyo
# 日本語言語パック
$ sudo dnf install langpacks-ja

Vimも入れておく

sudo dnf install vim

GitLabが必要な依存関係をインストールして構成する

sshとfirewalldを起動するみたいだが、もう終わっているので省略。
postfixはインストールされていないようなので、インストール&サービスの起動を行う。

sudo dnf install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

GitLabパッケージリポジトリを追加し、GitLabをインストールする

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="https://your-domain" dnf install -y gitlab-ee

これで、新サーバへアクセスするとログイン可能となるが、リストア前なので確認する必要もない。

旧サーバ(CentOS7)のGitLabをバックアップ

https://gitlab-docs.creationline.com/ee/administration/backup_restore/#%E6%97%A7%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%81%AE%E6%BA%96%E5%82%99%E3%81%A8%E8%BB%A2%E9%80%81
上記に記載されている「旧サーバーからのコンテンツの準備と転送」を順番に実施する。

既存のバックアップディレクトリ/var/opt/gitlab/backupsにバックアップを行うと、ディスク不足に陥るので、ディスクを追加してシンボリックリンクを貼ってバックアップを開始する。ディスクの追加やマウント等については省略する。

# ルートに昇格
sudo su -
# バックアップディレクトリに移動
cd /var/opt/gitlab
# マウント用のディレクトリ作成
mkdir /mnt/backupdrive/backups
# 既存のバックアップディレクトリのディレクトリ名変更
mv backups backups_bk
# シンボリックリンク作成
ln -s /mnt/backupdrive/backups
# rootから抜ける
exit
# バックアップ開始!
sudo gitlab-backup create

実行するとワーニングが…

Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.

警告: gitlab.rb および gitlab-secrets.json ファイルには機密データが含まれています
このバックアップには含まれていません。 バックアップを復元するには、これらのファイルが必要になります。
手動でバックアップしてください。

gitlab.rb gitlab-secrets.jsonもバックアップ対象ですってワーニングだな。
この2ファイルも同じフォルダへコピーする。

sudo cp /etc/gitlab/gitlab-secrets.json /mnt/backupdrive/backups/
sudo cp /etc/gitlab/gitlab.rb /mnt/backupdrive/backups/
sudo chmod 666 /mnt/backupdrive/backups/*.*

/var/opt/gitlab/redis/dump.rdbも必要そうなことが書いてあるが、これは移行しなくても問題なく動作している。

バックアップしたファイルを一旦ローカルへ保存する。(直接新サーバへ送信しても良いが設定が面倒だったので…)

新サーバ(AlmaLinux9)へGitLabリストア

バージョンの確認

新旧サーバのGitLabのバージョンがあっていることを確認する。

$ sudo gitlab-rake gitlab:env:info

System information
System:
Proxy:		no
Current User:	git
Using RVM:	no
Ruby Version:	3.1.4p223
Gem Version:	3.4.22
Bundler Version:2.5.4
Rake Version:	13.0.6
Redis Version:	7.0.15
Sidekiq Version:7.1.6
Go Version:	unknown

GitLab information
Version:	16.8.1-ee
Revision:	1242b447720
Directory:	/opt/gitlab/embedded/service/gitlab-rails
DB Adapter:	PostgreSQL
DB Version:	14.9
URL:		https://mew.rx-apps.net
HTTP Clone URL:	https://mew.rx-apps.net/some-group/some-project.git
SSH Clone URL:	git@mew.rx-apps.net:some-group/some-project.git
Elasticsearch:	no
Geo:		no
Using LDAP:	no
Using Omniauth:	yes
Omniauth Providers: google_oauth2

GitLab Shell
Version:	14.33.0
Repository storages:
- default: 	unix:/var/opt/gitlab/gitaly/gitaly.socket
GitLab Shell path:		/opt/gitlab/embedded/service/gitlab-shell

Gitaly
- default Address: 	unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version: 	16.8.1
- default Git Version: 	2.42.0

ローカルに保存しているバックアップファイルを新サーバへアップロードする。

リストアの準備

# バックアップディレクトリを指定のディレクトリへ移動
$ sudo mv 1705979202_2024_01_23_16.8.0-ee_gitlab_backup.tar /var/opt/gitlab/backups/
# バックアップ
$ sudo cp /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.org
# 旧環境のファイルを上書き
$ sudo mv gitlab-secrets.json /etc/gitlab/
# バックアップ
$ sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.org
# 旧環境のファイルを上書き
$ sudo mv gitlab.rb /etc/gitlab/

# 設定ファイルを新サーバ用に書き換え。
$ sudo vim /etc/gitlab/gitlab.rb

# システム権限の復元
$ sudo chown gitlab-redis /var/opt/gitlab/redis
$ sudo chown gitlab-redis:gitlab-redis /var/opt/gitlab/redis/dump.rdb
$ sudo chown git:root /var/opt/gitlab/backups
$ sudo chown git:git /var/opt/gitlab/backups/1705979202_2024_01_23_16.8.0-ee_gitlab_backup.tar

設定ファイルgitlab.rbの変更で、接続できない問題が発生していた。
私の場合はnginxの設定が悪かったようで、gitlab.rbを編集、/var/log/gitlab/nginx/error.logtailしているとエラーが表示されるので、エラー箇所を修正して、sudo gitlab-ctl reconfiguresudo gitlab-ctl restartを繰り返してエラーが出なくなるまで繰り返した。

ちなみにGitLabのログは以下にある。

/var/log/gitlab/gitlab-rails/
/var/log/gitlab/gitlab-shell/
/var/log/gitlab/nginx/
/var/log/gitlab/postgresql/
/var/log/gitlab/redis/
/var/log/gitlab/sidekiq/
/var/log/gitlab/unicorn/

リストアの実行

これで準備が整ったので、リストアのコマンドを実行する。

$ sudo gitlab-ctl stop puma
$ sudo gitlab-ctl stop sidekiq
# バックアップの名称はエディションの部分まででOK
$ sudo gitlab-backup restore BACKUP=1705979202_2024_01_23_16.8.0-ee

リストアの実行を行うと以下のメッセージが表示される。

Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Puma、Sidekiq、およびその他のプロセスを必ず停止してください。
続行する前にデータベースに接続してください。 オムニバス用
詳細については、次のリンクを参照してください。
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installations

GitLabの他のサービスも停止しないといけないのか?と思い、停止して実行を繰り返したが、かならず出るので、停止するのはPuma、Sidekiqの2つで問題ない。

リストア処理中に2回ぐらい進めてもいいか確認があるので、yesで進める。

最後に設定ファイルの更新をかけて、リスタートすればリストア完了!

$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart

AlmaLinux9その他の設定

後は、サーバ証明書の更新や受信セキュリティ規則の設定や自動アップデート等を行う。

最後にDNSのIPアドレスの変更を行うが、一般的には72時間ぐらいかかるとか。変更後1時間でIPアドレスの変更は反映された。

コメント

タイトルとURLをコピーしました