GitLab CE サーバー移行手順
概要
既存のGitLab CEサーバーから新しいサーバーへGitLab CEを移行する手順です。データ、設定、リポジトリを完全に移行し、ダウンタイムを最小限に抑えます。Mattermostのログの移行なども問題なくできるような手順になっています。
前提条件
旧サーバー(移行元)
GitLab CEが正常に動作していること
root権限またはsudo権限
十分なディスク容量(バックアップ用)
新サーバー(移行先)
OSがインストール済み(旧サーバーと同じOSを推奨)
root権限またはsudo権限
旧サーバーと同等以上のスペック
十分なディスク容量
移行手順
1. 新サーバーの準備
1.1 基本的なシステム設定
# システムの更新
# Debian/Ubuntu
sudo apt-get update && sudo apt-get upgrade -y
# RHEL/CentOS
sudo yum update -y
# 必要なパッケージのインストール
# Debian/Ubuntu
sudo apt-get install -y curl openssh-server ca-certificates postfix
# RHEL/CentOS
sudo yum install -y curl openssh-server ca-certificates postfix1.2 ファイアウォールの設定
# HTTP/HTTPSポートを開放
# Debian/Ubuntu (UFW)
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
# RHEL/CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload2. 旧サーバーでのバックアップ作成
2.1 現在のバージョンとステータス確認
# 旧サーバーで実行
# GitLabバージョンの確認(重要:新サーバーで同じバージョンをインストール)
sudo gitlab-rake gitlab:env:info | grep "GitLab information" -A 3
# サービスステータスの確認
sudo gitlab-ctl status
# ヘルスチェック
sudo gitlab-rake gitlab:check SANITIZE=true2.2 GitLabサービスの停止
# ユーザーアクセスを遮断
sudo gitlab-ctl stop nginx
# データ整合性のため、他のサービスも停止
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq2.3 バックアップの作成
# タイムスタンプの設定
TIMESTAMP=$(date "+%Y_%m_%d_%H%M%S")
# GitLab設定ファイルのバックアップ
sudo tar -zcvf /tmp/${TIMESTAMP}_etc_gitlab.tar.gz -C /etc gitlab
# Let's Encrypt証明書のバックアップ(使用している場合)
if [ -d "/etc/letsencrypt" ]; then
sudo tar -zcvf /tmp/${TIMESTAMP}_etc_letsencrypt.tar.gz -C /etc letsencrypt
fi
# Mattermostデータベースのバックアップ(使用している場合)
if sudo gitlab-ctl status mattermost 2>/dev/null | grep -q "run:"; then
sudo -i -u gitlab-psql -- /opt/gitlab/embedded/bin/pg_dump -h \
/var/opt/gitlab/postgresql mattermost_production | \
gzip > /tmp/${TIMESTAMP}_mattermost-backup.sql.gz
fi
# GitLabデータのバックアップ作成
sudo gitlab-rake gitlab:backup:create
# バックアップファイルの確認
ls -lh /var/opt/gitlab/backups/
ls -lh /tmp/${TIMESTAMP}_*3. 新サーバーへのGitLabインストール
3.1 GitLabパッケージのインストール
重要: 旧サーバーと同じバージョンのGitLabをインストールしてください。
Debian/Ubuntu
# GitLabリポジトリの追加
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
# 特定バージョンのインストール(例: 16.5.0)
sudo apt-get install gitlab-ce=16.5.0-ce.0
# インストール後、再構成はまだ実行しないRHEL/CentOS
# GitLabリポジトリの追加
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
# 特定バージョンのインストール(例: 16.5.0)
sudo yum install gitlab-ce-16.5.0-ce.0.el8
# インストール後、再構成はまだ実行しない4. バックアップファイルの転送
4.1 旧サーバーから新サーバーへの転送
# 新サーバーで実行:バックアップディレクトリの作成
sudo mkdir -p /var/opt/gitlab/backups
sudo chown git:git /var/opt/gitlab/backups
# 旧サーバーから新サーバーへファイルを転送
# 新サーバーで実行(旧サーバーのIPを10.0.1.10と仮定)
OLD_SERVER_IP="10.0.1.10"
# GitLabバックアップファイルの転送
scp user@${OLD_SERVER_IP}:/var/opt/gitlab/backups/*_gitlab_backup.tar /tmp/
# 設定ファイルの転送
scp user@${OLD_SERVER_IP}:/tmp/*_etc_gitlab.tar.gz /tmp/
scp user@${OLD_SERVER_IP}:/tmp/*_etc_letsencrypt.tar.gz /tmp/
scp user@${OLD_SERVER_IP}:/tmp/*_mattermost-backup.sql.gz /tmp/
# バックアップファイルを適切な場所に移動
sudo mv /tmp/*_gitlab_backup.tar /var/opt/gitlab/backups/
sudo chown git:git /var/opt/gitlab/backups/*_gitlab_backup.tar5. 新サーバーでのリストア
5.1 設定ファイルのリストア
# GitLab設定のリストア
cd /etc
sudo tar -xzvf /tmp/*_etc_gitlab.tar.gz
# Let's Encrypt証明書のリストア(ある場合)
if [ -f "/tmp/*_etc_letsencrypt.tar.gz" ]; then
cd /etc
sudo tar -xzvf /tmp/*_etc_letsencrypt.tar.gz
fi5.2 GitLabの初期設定と起動
# gitlab.rbの編集(必要に応じて)
# 新サーバーのホスト名やIPアドレスに合わせて修正
sudo vi /etc/gitlab/gitlab.rb
# 主な確認項目:
# external_url 'http://新サーバーのドメインまたはIP'
# nginx['listen_addresses'] = ['*']
# GitLabの再構成(設定の反映)
sudo gitlab-ctl reconfigure
# サービスの停止(リストア準備)
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq5.3 データのリストア
# バックアップファイル名の確認
ls -la /var/opt/gitlab/backups/
# リストア実行(BACKUP=の後はタイムスタンプ部分のみ)
# 例: 1609188107_2020_12_29_13.3.9_gitlab_backup.tar の場合
sudo gitlab-rake gitlab:backup:restore BACKUP=1609188107_2020_12_29_13.3.9
# プロンプトが表示されたら、yes を入力して続行5.4 Mattermostのリストア(使用している場合)
# Mattermostが有効な場合のみ実行
if [ -f "/tmp/*_mattermost-backup.sql.gz" ]; then
# Mattermostの停止
sudo gitlab-ctl stop mattermost
# 既存データベースの削除と再作成
sudo -i -u gitlab-psql -- /opt/gitlab/embedded/bin/dropdb \
-h /var/opt/gitlab/postgresql mattermost_production
sudo -i -u gitlab-psql -- /opt/gitlab/embedded/bin/createdb \
-h /var/opt/gitlab/postgresql mattermost_production
# バックアップからリストア
zcat /tmp/*_mattermost-backup.sql.gz | \
sudo -i -u gitlab-psql -- /opt/gitlab/embedded/bin/psql \
-h /var/opt/gitlab/postgresql \
-d mattermost_production
fi6. 移行後の設定と確認
6.1 GitLabの再構成と起動
# 設定の再適用
sudo gitlab-ctl reconfigure
# 全サービスの起動
sudo gitlab-ctl start
# サービスステータスの確認
sudo gitlab-ctl status6.2 動作確認
# ヘルスチェック
sudo gitlab-rake gitlab:check SANITIZE=true
# Gitリポジトリの整合性チェック
sudo gitlab-rake gitlab:git:fsck
# アップロードファイルの確認
sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check6.3 Webインターフェースの確認
ブラウザで新サーバーのGitLabにアクセス
管理者アカウントでログイン
プロジェクト、ユーザー、設定が正しく移行されていることを確認
7. DNS切り替えとSSL証明書
7.1 DNSの更新
# DNSレコードを新サーバーのIPアドレスに更新
# ※DNS管理画面で実施
# 新サーバーでDNS反映を確認
dig gitlab.example.com
nslookup gitlab.example.com7.2 SSL証明書の設定
既存の証明書を使用する場合は、すでにリストア済み。
新規に取得する場合:
# Let's Encryptを使用する場合
sudo gitlab-ctl reconfigure
sudo gitlab-ctl renew-le-certs8. 最終確認とクリーンアップ
8.1 ユーザーアクセステスト
Git操作の確認(clone, push, pull)
CI/CDパイプラインの動作確認
Webhook、統合機能の確認
8.2 旧サーバーの処理
# 移行が成功したことを確認後、旧サーバーで実行
# GitLabサービスの完全停止
sudo gitlab-ctl stop
# 自動起動の無効化
sudo systemctl disable gitlab-runsvdirトラブルシューティング
よくある問題と解決方法
PostgreSQLのバージョン不一致
# エラー: pg_dump version mismatch
# 解決方法: 同じGitLabバージョンをインストール権限エラー
# ファイル権限の修復
sudo gitlab-ctl reconfigure
sudo gitlab-rake cache:clearリストア後のログインエラー
# Redisキャッシュのクリア
sudo gitlab-rake cache:clear
sudo gitlab-ctl restart注意事項
バージョンの一致: 新旧サーバーで同じGitLabバージョンを使用すること
ダウンタイム: 移行中はGitLabが利用できません(通常1-2時間)
ディスク容量: 新サーバーには旧サーバーの2倍以上の容量を推奨
バックアップ: 移行前に必ず完全なバックアップを取得
テスト: 可能であれば本番移行前にテスト環境で検証
ネットワーク: 大量のデータ転送があるため、高速なネットワーク接続を推奨
移行チェックリスト
[ ] 新サーバーのOS、スペック確認
[ ] 旧サーバーのGitLabバージョン確認
[ ] バックアップの作成と検証
[ ] 新サーバーへのGitLabインストール
[ ] バックアップファイルの転送
[ ] 設定ファイルのリストア
[ ] データのリストア
[ ] 動作確認とテスト
[ ] DNSの切り替え
[ ] ユーザーへの通知
いいなと思ったら応援しよう!
サーバー代とコーヒー代になります☕ 役に立ったら応援よろしくお願いします!