【完全ガイド】ローカルDockerのRedmineをGCPへ移行!ハマりどころと全解決策

こんにちは!今回は、開発チームや個人で愛用されている方も多いプロジェクト管理ツール「Redmine」を、ローカルPCのDocker環境からクラウドGCP)へ移行した際の全手順をブログにまとめます。

移行は一筋縄ではいかず、いくつかのエラーに遭遇しました。この記事では、私が実際に躓いたポイントとその解決策を詳しく解説していきますので、同じような移行を考えている方の助けになれば幸いです。

今回のゴール

  • ローカルPCのDockerで動いているRedmineGCPに移行する。
  • プロジェクト、チケットなどの全データを引き継ぐ。
  • プラグインもそのまま移行する。
  • DBのパスワードは新しいものに変更する。

移行後の構成

  • アプリケーション: Compute Engine (GCE) + Docker
  • データベース: Cloud SQL (PostgreSQL)

それでは、早速始めましょう!


ステップ1:ローカル環境のデータバックアップ

何よりもまず、現在のRedmineの全データをバックアップします。これが命綱です。

1. データベースのバックアップ

docker-compose.ymlのあるディレクトリで、pg_dumpコマンドを使ってDBの全データをSQLファイルに書き出します。

docker-compose exec db pg_dump -U redmine --no-owner --clean -f redmine_db_clean.sql redmine

躓いたポイント①:pg_dump>で作ったファイルが文字化け

最初、> backup.sql という記法でファイルを作成したところ、PowerShellがファイルをUTF-16形式で保存してしまい、後のリストアで文字化け地獄に...。

解決策: PowerShell> を使わず、pg_dump-f [ファイル名]オプションを使いましょう。これにより、pg_dumpが直接UTF-8形式でファイルを作成してくれるため、文字化けを確実に回避できます。

2. 添付ファイルとプラグインのバックアップ

Redmineの添付ファイルやプラグインはDockerボリュームに保存されています。docker cpコマンドでコンテナ内から取り出します。

# コンテナ内にファイルを作成
docker-compose exec db pg_dump -U redmine --no-owner --clean -f /tmp/redmine_db_clean.sql redmine

# コンテナからPCへファイルをコピー
docker-compose cp db:/tmp/redmine_db_clean.sql .

躓いたポイント②:-fオプションだとファイルがPCに出てこない

-fオプションでファイルを作成したら、PC上のどこにもファイルが見つからず焦りました。

解決策: -fオプションはコンテナの内部にファイルを作成する、という仕様でした。docker-compose execでコンテナ内にファイルを作成後、docker-compose cpコマンドでコンテナからPCにファイルをコピーしてくる、という2段階の手順が必要でした。


ステップ2:GCP環境の構築

データの準備ができたら、受け皿となるGCPのインフラを構築します。

  1. Cloud SQL for PostgreSQLインスタンスを作成:
    • リージョンは東京(asia-northeast1)を選択。
    • ここで新しいDBパスワードを設定します。
    • 作成後、プライベートIPアドレスを控えておきます。
  2. Compute Engine (GCE) VMインスタンスを作成:
    • マシンタイプはe2-medium、ブートディスクはバランス永続ディスクUbuntuを選択。
    • ファイアウォールHTTP/HTTPSを許可します。
    • 作成後、外部IPアドレスを控えておきます。

ステップ3:データのリストアとRedmineの起動

ここが移行作業のクライマックスです。

1. バックアップファイルをGCEにアップロード

gcloudコマンドで、ローカルPCからGCEインスタンスへファイルを転送します。

# データベースファイル
gcloud compute scp redmine_db_clean.sql [ユーザー名]@[インスタンス名]:

# 添付ファイルなど
gcloud compute scp redmine_files.tar [ユーザー名]@[インスタンス名]:

躓いたポイント③:gcloudコマンドがPCで使えない

gcloudはコマンドとして認識されない、というエラーが発生。

解決策: PCにGoogle Cloud CLIがインストールされていませんでした。公式サイトからインストーラーをダウンロードして解決。または、ブラウザのSSH画面から直接ファイルをアップロードする機能でも代用できます。

2. GCE上でデータベースをリストア

GCEにSSHで接続し、アップロードしたファイルをCloud SQLに流し込みます。

# DBを一度クリーンナップ
psql -h [Cloud SQLのIP] -U postgres postgres -c "DROP DATABASE redmine;"
psql -h [Cloud SQLのIP] -U postgres postgres -c "CREATE DATABASE redmine;"

# リストア実行
psql -h [Cloud SQLのIP] -U postgres -f redmine_db_clean.sql redmine

躓いたポイント④:リストア中に大量の権限エラー

must be superusermust be owner of ... といったエラーが大量発生。

解決策: Cloud SQLのDBユーザーは完全なスーパーユーザーではないため、バックアップファイルに含まれる「所有者」情報の復元に失敗していました。pg_dump時に--no-ownerオプションを追加した「クリーンな」バックアップファイルを作成することで解決しました。

3. Redmineを起動

GCE上でdocker-compose.ymlを作成し、Redmineコンテナを起動します。

docker-compose.yml

services:
  redmine:
    image: redmine:5.0.5 # ローカルで使っていたバージョンに合わせる
    restart: always
    ports:
      - "80:3000"
    environment:
      REDMINE_DB_POSTGRES: "[Cloud SQLのプライベートIP]"
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: postgres
      REDMINE_DB_PASSWORD: "[Cloud SQLで設定した新しいパスワード]"
    volumes:
      - ./redmine_data/files:/usr/src/redmine/files
      - ./redmine_data/plugins:/usr/src/redmine/plugins

sudo docker-compose up -dで起動!


ステップ4:最終確認とログイン問題の解決

コンテナは起動したものの、最後の壁が待っていました。

躓いたポイント⑤:ログインできない!

ユーザー名とパスワードが正しいはずなのに、ログインできない。「システム管理者の承認待ちです」と表示される。

解決策: データベースを直接操作して、ユーザーを有効化する必要がありました。rails consoleを起動し、以下のコマンドでユーザーを強制的に有効化&管理者に設定しました。

# Redmineコンソールを起動
sudo docker-compose exec redmine bundle exec rails console

コンソール内で実行

user = User.find_by(login: '[ユーザー名]') user.status = 1 # ステータスを「有効」に user.admin = true # 管理者権限を付与 user.password = '新しいパスワード' user.save!

この対応後、無事にログインでき、懐かしいプロジェクトの数々が表示されたときは本当に感動しました。


まとめ

ローカルPCのDockerからのRedmine移行は、特にデータベース周りの文字コードや権限の問題で躓きやすいポイントが多いと感じました。しかし、一つ一つのエラーに冷静に対処すれば、必ず乗り越えられます。

この記事が、これからRedmineクラウド移行に挑戦する誰かの助けになれば、とても嬉しいです。

最後までお読みいただきありがとうございました!