
- 今回のゴール
- 移行後の構成
- ステップ1:ローカル環境のデータバックアップ
- ステップ2:GCP環境の構築
- ステップ3:データのリストアとRedmineの起動
- ステップ4:最終確認とログイン問題の解決
- コンソール内で実行
こんにちは!今回は、開発チームや個人で愛用されている方も多いプロジェクト管理ツール「Redmine」を、ローカルPCのDocker環境からクラウド(GCP)へ移行した際の全手順をブログにまとめます。
移行は一筋縄ではいかず、いくつかのエラーに遭遇しました。この記事では、私が実際に躓いたポイントとその解決策を詳しく解説していきますので、同じような移行を考えている方の助けになれば幸いです。
今回のゴール
移行後の構成
- アプリケーション: 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のインフラを構築します。
- Cloud SQL for PostgreSQLインスタンスを作成:
- リージョンは東京(
asia-northeast1)を選択。 - ここで新しいDBパスワードを設定します。
- 作成後、プライベートIPアドレスを控えておきます。
- リージョンは東京(
- Compute Engine (GCE) VMインスタンスを作成:
ステップ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 superuserやmust 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のクラウド移行に挑戦する誰かの助けになれば、とても嬉しいです。
最後までお読みいただきありがとうございました!