見出し画像

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 postfix

1.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 --reload

2. 旧サーバーでのバックアップ作成

2.1 現在のバージョンとステータス確認

# 旧サーバーで実行
# GitLabバージョンの確認(重要:新サーバーで同じバージョンをインストール)
sudo gitlab-rake gitlab:env:info | grep "GitLab information" -A 3

# サービスステータスの確認
sudo gitlab-ctl status

# ヘルスチェック
sudo gitlab-rake gitlab:check SANITIZE=true

2.2 GitLabサービスの停止

# ユーザーアクセスを遮断
sudo gitlab-ctl stop nginx

# データ整合性のため、他のサービスも停止
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

2.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.tar

5. 新サーバーでのリストア

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
fi

5.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 sidekiq

5.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
fi

6. 移行後の設定と確認

6.1 GitLabの再構成と起動

# 設定の再適用
sudo gitlab-ctl reconfigure

# 全サービスの起動
sudo gitlab-ctl start

# サービスステータスの確認
sudo gitlab-ctl status

6.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:check

6.3 Webインターフェースの確認

  1. ブラウザで新サーバーのGitLabにアクセス

  2. 管理者アカウントでログイン

  3. プロジェクト、ユーザー、設定が正しく移行されていることを確認

7. DNS切り替えとSSL証明書

7.1 DNSの更新

# DNSレコードを新サーバーのIPアドレスに更新
# ※DNS管理画面で実施

# 新サーバーでDNS反映を確認
dig gitlab.example.com
nslookup gitlab.example.com

7.2 SSL証明書の設定

既存の証明書を使用する場合は、すでにリストア済み。
新規に取得する場合:

# Let's Encryptを使用する場合
sudo gitlab-ctl reconfigure
sudo gitlab-ctl renew-le-certs

8. 最終確認とクリーンアップ

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

注意事項

  1. バージョンの一致: 新旧サーバーで同じGitLabバージョンを使用すること

  2. ダウンタイム: 移行中はGitLabが利用できません(通常1-2時間)

  3. ディスク容量: 新サーバーには旧サーバーの2倍以上の容量を推奨

  4. バックアップ: 移行前に必ず完全なバックアップを取得

  5. テスト: 可能であれば本番移行前にテスト環境で検証

  6. ネットワーク: 大量のデータ転送があるため、高速なネットワーク接続を推奨

移行チェックリスト

  • [ ] 新サーバーのOS、スペック確認

  • [ ] 旧サーバーのGitLabバージョン確認

  • [ ] バックアップの作成と検証

  • [ ] 新サーバーへのGitLabインストール

  • [ ] バックアップファイルの転送

  • [ ] 設定ファイルのリストア

  • [ ] データのリストア

  • [ ] 動作確認とテスト

  • [ ] DNSの切り替え

  • [ ] ユーザーへの通知

いいなと思ったら応援しよう!

zephel01 サーバー代とコーヒー代になります☕ 役に立ったら応援よろしくお願いします!