Skip to content

Docker Composeでの移行

Docker Compose で運用しているドメインをv1からv2へ移行する手順です。

ここでは並行運用は行わず、v1のデータをv2へ移行してそのまま切り替える流れで進めます。移行の間だけv1のデータベースを起動しておき、v2から接続してデータをコピーします。移行期間中もv1のAPIやAPブリッジを動かし続けたい場合は、Docker Composeでの並行運用移行を参照してください。

前提

concrnt-compose リポジトリは v1/v2/ の2構成に整理されています。v2用のサンプル構成は v2/ にあります。

git clone https://github.com/concrnt/concrnt-compose

すでにクローン済みの場合は最新化してください。

Step 1. v2の設定を行う

v2/etc/config/config.yaml を編集します。v1の v1/etc/config/config.yaml を参照しながら、以下の値を設定してください。

  • concrnt.fqdn … v1と同じfqdn
  • concrnt.privatekey … v1と同じ秘密鍵
  • concrnt.layer … v1の concrnt.dimension と同じ値(通常 concrnt-mainnet)
  • meta.* … サーバー名やメンテナ情報(お好みで)

Step 2. v1のアプリを止めてデータベースだけ残す

v2は公開ポート 8080 を使います。v1のゲートウェイと衝突するため、v1のアプリケーションコンテナを停止します。ただしデータベースは移行のため起動したままにしておきます。

docker compose -f v1/compose.yaml stop gateway api webui hyperproxy
docker compose -f v1/compose.yaml up -d db

Step 3. v2スタックを起動する

docker compose -f v2/compose.yaml up -d

concrnt2 / world-app / v2db / v2-redis / v2-memcached / hyperproxy が起動します。この時点ではv2は空のデータベースで動いています。

Step 4. v1データベースをv2のネットワークへ接続する

移行コンテナがv1のデータベースへ到達できるよう、稼働中のv1データベースコンテナをv2のネットワーク(concrnt-v2-external)へ v1db という別名で接続します。

docker network connect --alias v1db concrnt-v2-external $(docker compose -f v1/compose.yaml ps -q db)

Step 5. 移行を実行する

v2/compose.yamlmigration サービスの引数を、自分の環境に合わせて書き換えます。

command:
- conctl
- migrate
- v1-to-v2
- --from-csid
- <v1ドメインのCSID> # ドメインのトップページに表示される ccs... の値
- --from-dsn
- postgres://postgres:postgres@v1db:5432/concrnt # そのままでOK
- --from-fqdn
- example.tld # v1と同じfqdn
- --dest-dsn
- postgres://postgres:postgres@v2db:5432/concrnt # そのままでOK
- --dest-fqdn
- example.tld # v1と同じfqdn
# 移行対象から除外したいアカウントがあれば指定
# - --ignore-ccids
# - con1xxxx...
項目説明
--from-csid移行元(v1)ドメインのCSID。ドメインのトップページに表示される ccs... の値です。
--from-dsnv1データベースへの接続文字列。Step 4で付けた別名 v1db を使うのでそのままで構いません。
--from-fqdn / --dest-fqdnどちらもv1と同じfqdnを指定します。
--dest-dsnv2データベース(v2db)への接続文字列。そのままで構いません。
--ignore-ccids移行対象から除外するアカウントのCCID。不要ならコメントアウトのままにします。

書き換えたら、migration サービスを単発で実行します(profiles: migration により通常の up では起動しません)。

docker compose -f v2/compose.yaml run --rm migration

Step 6. 動作を確認して切り替える

ブラウザで自分のfqdnにアクセスし、v2のトップページ(CSID表示)が返ることを確認します。次にWebクライアント https://concrnt.world から既存のアカウントでログインし、過去のタイムラインやメッセージが表示されることを確認してください。

Cloudflare Tunnel やリバースプロキシを利用している場合、転送先がv2の公開ポート(concrnt28080)を向くように設定します。v1と同じホストの 8080 を引き続き利用しているため、多くの場合は追加の変更は不要です。

Step 7. ActivityPubブリッジを移行する(オプション)

v2では新しいActivityPubブリッジ(concrnt/activitypub、イメージ ghcr.io/concrnt/activitypub)を使用します。移行にはv1のデータベースを参照するため、Step 8でv1を撤去する前に実行してください(Step 4で接続した別名 v1db をそのまま利用します)。

7-1. ブリッジ用サービスアカウントを用意する

v2ブリッジはconcrnt上のサービスアカウントとして動作します。v1ブリッジで使っていたアカウント(apconfig.yamlapConfig.proxyPriv に設定していた鍵)をそのまま引き継ぐことを推奨します。

このアカウントはv1上の通常のアカウントなので、Step 5の移行で(--ignore-ccids で除外していなければ)既にv2へ移行されています。その場合は新たに作成する必要はなく、その秘密鍵を7-2でそのまま使ってください。

もしv2に存在しない場合(移行時に除外した場合など)は、--privatekey で鍵を指定して登録できます。

docker compose -f v2/compose.yaml run --rm concrnt2 conctl operation create-account --privatekey <v1ブリッジの秘密鍵>

新しいアカウントを作る場合は --privatekey を付けずに実行し、出力される ccidprivatekey を控えてください(いずれの場合もアカウントはv2コアにローカル登録されます)。

7-2. v2ブリッジを起動して初期化する

v2/etc/ap/config.yaml を編集し、ブリッジの設定を行います。

  • concrnt.domain … v2コアと同じfqdn
  • concrnt.privateKey … 7-1で用意したアカウントの秘密鍵

CCIDの設定は不要です(秘密鍵から自動で導出されます)。database.url / redis.url はv2コアと共有の v2db / v2-redis を指しており、DB構成を変更していなければそのままで構いません。

次に v2/compose.yamlactivitypub サービスのコメントを外して起動し、ログでエラーがないことを確認します。初回起動時にv2ブリッジ用のテーブルが自動作成されます(これは7-3の移行コマンドの前提です)。

docker compose -f v2/compose.yaml up -d activitypub
docker compose -f v2/compose.yaml logs activitypub

確認できたら、いったん停止します。

docker compose -f v2/compose.yaml stop activitypub

7-3. データを移行する

migration サービスのコンテナで conctl migrate ap-v1-to-v2 を実行します。Step 5と異なり compose.yaml の書き換えは不要で、run の引数でコマンドを上書きします。まずは --dry-run で内容を確認します。

docker compose -f v2/compose.yaml run --rm migration conctl migrate ap-v1-to-v2 \
--from-dsn "host=v1db user=postgres password=postgres dbname=concrnt port=5432 sslmode=disable" \
--dest-dsn "postgres://postgres:postgres@v2db:5432/concrnt" \
--dest-fqdn <あなたのfqdn> \
--ap-ccid <7-1で用意したアカウントのCCID> \
--dry-run
項目説明
--from-dsnv1データベースへの接続文字列。v1ブリッジはv1コアとデータベースを共有しているため、Step 4で付けた別名 v1db を使います。
--dest-dsnv2ブリッジのデータベースへの接続文字列。v2db(v2コアと共有)のままで構いません。
--dest-fqdn移行先(v2)ドメインのfqdn。
--ap-ccid7-1で用意したブリッジ用サービスアカウントのCCID。v1のアカウントを引き継いだ場合は、v1でブリッジ用ボットとして使っていたアカウントのCCIDです。

問題なければ --dry-run を外して再実行します。v1の ap_entities(アカウントと鍵)とフォロー・フォロワー情報がv2へ移行されます。

7-4. ブリッジを再開し、経路を有効にする

v2/etc/config/config.yamlservices: にある net.concrnt.activitypub ブロックのコメントを外しconcrnt2 を再起動して /ap.well-known 系の経路を有効にします。あわせてv2ブリッジを再開します(起動時に移行済みのフォロー情報を読み込みます)。

docker compose -f v2/compose.yaml restart concrnt2
docker compose -f v2/compose.yaml up -d activitypub

動作を確認します。

curl "https://<fqdn>/.well-known/webfinger?resource=acct:<ユーザー名>@<fqdn>"
curl "https://<fqdn>/ap/test"

Step 8. v1を撤去する

移行と動作確認が完了したら、v1スタックを停止・削除します。

docker compose -f v1/compose.yaml down

以降はv2単独での運用となります。招待コードの発行など、日常的な運用コマンドはv2では以下のように実行します。

docker compose -f v2/compose.yaml run --rm concrnt2 conctl generate invite