サーバのリプレースに伴うGitLabのバージョンアップ
OSが当初はCentOS7.9で、これをRockyLinux8にアップグレードした環境
GitLabはCentOS7でサポートされていた最終バージョンの17.7.7だった
OSをRockyLinux8.9にアップグレードして、OSの制限もなくなったのでGitLabも最新版にアップデートした記録です。
0. 準備
テスト環境にOSのインストール後から、本番環境と同じGitLabCEをインストールするところまでも参考として記録します
これは本筋の話ではないですが、OSアップグレード後のまっさらな環境にGitLabをインストールした作業も
今後の参考にできると備忘録的に記述しました。
$ sudo dnf install epel-release #epelリポジトリインストール
$ sudo dnf --enablerepo=epel group # epelリポジトリを使用
$ sudo nmcli connection down eno1 # IPアドレス固定に変更したのでネットワーク再起動
$ sudo nmcli connection up eno1
$ sudo systemctl stop firewalld # firewalldの停止
$ sudo systemctl disable firewalld # firewalldの自動起動停止
$ sudo setenforce 0 # SELinux一時停止
1. 本番環境と同じGitLabのインストールを行い環境準備
# 必要なパッケージのインストール
$ sudo dnf install -y curl policycoreutils openssh-server perl
# バージョンを指定したGitLabCEのインストール
$ sudo dnf install gitlab-ce-17.7.7
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-rake gitlab:env:info # バージョン確認
バージョンを確認した際に「Go Version: unknown」が表示されるが、問題なし
GitLab 本体は Ruby on Rails で動いており、Go は必須ではありません。
Go 言語は GitLab の一部の周辺コンポーネント(例: Gitaly
、GitLab Workhorse など)で使われていますが、Omnibus パッケージ版の GitLab では 事前にビルド済みのバイナリが同梱 されているため、システムに Go がインストールされていなくても動作します。
そのため gitlab:env:info が「Go のバージョンを確認できない → unknown」と表示することがありますが、実害はありません。
2. アップデート手順
現在のバージョン確認
[tuti@localhost ~]$ sudo gitlab-rake gitlab:env:info
System information
System:
Current User: git
Using RVM: no
Ruby Version: 3.2.5
Gem Version: 3.5.23
Bundler Version:2.5.11
Rake Version: 13.0.6
Redis Version: 7.0.15
Sidekiq Version:7.2.4
Go Version: unknown
GitLab information
Version: 17.7.7
(以下略)
Upgrade Path(https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/) に従ったアップデートの実行
$ sudo yum install gitlab-ce-17.8.7 # 17.7.7 → 17.8.7
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
$ sudo gitlab-rake gitlab:env:info|grep -A 1 "GitLab information"
GitLab information
Version: 17.8.7
# = = = = =
sudo yum install gitlab-ce-17.11.7 # 17.8.7 → 17.11.7 テスト環境はここから
Upgrade complete! If your GitLab server is misbehaving try running
sudo gitlab-ctl restart
sudo gitlab-ctl reconfigure <= 不要だった
sudo gitlab-ctl restart <= 不要だった
$ sudo gitlab-rake gitlab:env:info|grep -A 1 "GitLab information"
GitLab information
Version: 17.11.7
# = = = = =
sudo yum install gitlab-ce-18.2.5 # 17.11.7 → 18.2.5
$ sudo gitlab-rake gitlab:env:info|grep -A 1 "GitLab information"
GitLab information
Version: 18.2.5
# = = = = = =
sudo yum install gitlab-ce-18.3.1 # 18.2.5 → 18.3.1
sudo yum install gitlab-ce であれば18.2.5 → 18.3.2 こちらを実行した
$ sudo gitlab-rake gitlab:env:info|grep -A 1 "GitLab information"
GitLab information
Version: 18.3.2
3. 補足:Upgrade Path に記載されていた注意点
(1) Potential PostgreSQL index corruption(glibc locale data)
対象: OS をアップグレードする場合のみ
glibc 2.28 以降で OS を上げると PostgreSQL のインデックスが壊れる可能性あり
今回の RockyLinux 8 (glibc 2.28) では OS アップグレードしないため不要
もし将来 OS をアップグレードする場合 → 事前に REINDEX 実施が必須
sudo gitlab-psql -d gitlabhq_production -c "REINDEX DATABASE gitlabhq_production;"
(2) OpenSSL v3 Upgrade
GitLab 17.7 で OpenSSL 1.1.1 → 3.0 に切り替わった
GitLab Omnibus パッケージに OpenSSL 3 が同梱されているため、OS に openssl3 パッケージを入れる必要はない
OS 側で openssl version を実行すると 1.1.1 が表示されるが、GitLab 内部は OpenSSL 3 を使用している
openssl version # v1 系が表示される
openssl3 version # v3 系を確認できる
v3系がOSになくても問題ありません
(3) Multi-node architectures: new encryption secrets introduced in 17.8
GitLab 17.8 から 新しい暗号化フレームワーク が導入され、gitlab-secrets.json にキーが追加される
マルチノード構成では全ノードで secrets.json を同期させる必要がある
今回は オムニバス単一ノード構成(シングルノード) のため、この対応は不要
シングルノード = GitLab アプリケーション(Rails, Sidekiq, Gitaly, DB, Redis, Nginx 等)が 1 台のサーバに同梱されて動作している構成
複数サーバで役割を分散(例: DB 専用, Redis 専用, 複数 Gitaly)していなければ シングルノード