本文へスキップ

Heroku からの移行 ​

Zenavo は Heroku のアプリをわずかな変更でビルド・実行できます。buildpack の代わりに zbpack か Dockerfile で Git からビルドし、PORT も同じように設定します。アプリは自分のサーバーで動くようになります。

Heroku と Zenavo の対応 ​

HerokuZenavo
アプリ1 台のサーバー上のプロジェクト
Procfile の web プロセスリポジトリからビルドし、HTTP ポートを持つサービス
worker などのプロセスプロセスごとに、同じリポジトリからそのコマンドで動く別のサービス(HTTP ポートなし)
Buildpackzbpack、または自分の Dockerfile
release フェーズ起動コマンドの中で、アプリの前に実行するコマンド
Config vars環境変数
Heroku Postgres、Heroku Redisプロジェクト内のデータベースサービス
Dyno とスケーリングレプリカとリソース制限
Automated Certificate ManagementLet's Encrypt の証明書を自動発行
Pipeline と review app該当なし:ステージングにはプロジェクトを複製
Heroku Scheduler定期実行はまだありません:アプリにスケジューラーを持つワーカーサービスを動かします

1. アプリをデプロイする ​

  1. サーバーを追加し、プロジェクトを作成します。
  2. Add Service → GitHub でリポジトリとブランチを選び、Build Plan Preview を確認します。
  3. zbpack の推測が Procfile の web: 行と違う場合は、起動コマンドを設定します:Settings → Build → zbpack options の ZBPACK_START_COMMAND、または Settings の Startup Command(サービス設定)。release: のコマンドはその前に置きます。例:sh -c "bin/rails db:migrate && bin/rails server -b 0.0.0.0"。
  4. ほかのプロセスごとに、そのプロセスのコマンドでリポジトリをもう一度追加します(HTTP ポートなし)。

すでに $PORT で待ち受けるアプリは変更不要です。0.0.0.0 でも待ち受けてください。

2. 変数をコピーする ​

config vars を書き出し、サービスの Variable タブ → Edit Raw Variables に貼り付けるか、CLI で設定します。

sh
heroku config --shell -a my-app > heroku.env
zenavo env set --file heroku.env -s web

DATABASE_URL、REDIS_URL などアドオンの変数はコピーせず、新しいデータベースサービスに向けます。例:DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}。シークレットが入っているので、終わったら heroku.env は削除してください。

3. データベースを移す ​

Heroku と同じメジャーバージョンの PostgreSQL をプロジェクトに追加します(heroku pg:info で確認できます)。Heroku 自身のバックアップは pg_dump の custom 形式で、Zenavo は読めないので、プレーンな SQL でダンプします。

sh
pg_dump --no-owner --no-acl "$(heroku config:get DATABASE_URL -a my-app)" | gzip > heroku.sql.gz

新しいデータベースの Backup & Restore タブで heroku.sql.gz をアップロードし、空のデータベースに復元します(バックアップのアップロード)。ダンプのあとに書き込みが入らないよう、先にメンテナンスモードにしてください(heroku maintenance:on)。アップロードは 2 GB までです。

Heroku Redis はたいていキャッシュなので、新しい Redis は空から始めて構いません。

4. ドメインを切り替える ​

サービスの Networking タブで各ドメインを設定します。Heroku のドメインは herokudns.com への CNAME なので、サーバーの IP アドレスへの A レコードに置き換えます。名前解決ができると証明書が発行されます(ドメインと HTTPS)。新しいアプリがしばらくトラフィックを受けるまで、Heroku のアプリは残しておいてください。

Zeabur とは関係ありません。