デプロイガイド

WebアプリとPostgreSQLはどこに置く? 同じサービスと別サービスの違い

WebサーバーとマネージドDBの事業者をそろえるか、接続と復元から考える

予約アプリを公開するとき、WebサーバーとPostgreSQLは同じサービスに置くべきでしょうか。初回の公開では、アプリがDBへどう接続し、障害や移行時に誰がデータを戻すかを決めると選びやすくなります。既存DBがない小規模な予約アプリなら、同じ事業者で内部接続を使える構成から検討できます。すでに運用しているDBや、必要な復元機能がある場合は、外部DBも候補です。

この記事の内容

同じ事業者と別の事業者で、接続はどう変わる?

ここではWebサーバーとマネージドPostgreSQLを別々のリソースとして作り、両者を同じ事業者でそろえる場合と、異なる事業者を組み合わせる場合を比べます。

WebサーバーからDBへ接続する経路 · 概念図
同じ事業者

ブラウザ → Webサーバー → 内部URLでDBへ(対応する構成)

別の事業者

ブラウザ → Webサーバー → DB事業者のエンドポイントへ

どちらもDB接続情報はWebサーバーで管理します。
構成 便利な点 確認すること
同じ事業者でアプリとDBを作成 対応するサービスなら内部接続と接続設定をまとめやすい 同じアカウント・リージョンなどの条件、内部接続の暗号化、バックアップ。例はRender公式の接続仕様
外部のマネージドPostgreSQL アプリとDBのプランや移行先を別々に選べる リージョン、ネットワークの到達性、TLS、接続数。プール利用の例はNeon公式

予約管理アプリなら、何から決める?

同じ事業者でそろえる場合

Renderでは同一アカウントかつ同一リージョンの対応サービスから内部URLを使えます。外部URLもあり、外部からの接続が不要ならアクセス制限を確認します。Render公式の内部・外部接続

KamuiDashではアプリ作成時にDBを選ぶと、DATABASE_URL などの環境変数が設定されます。アプリは実行時にその値を読み込みます。接続URLには認証情報が含まれるため、GitHubに置くファイルやブラウザへ配信する設定に入れないようにします。KamuiDash公式のDB接続

外部のPostgreSQLを使う場合

既存のDBがある、またはDBだけ先に別プランを選びたい場合は、Webサーバーから外部DBへ接続する構成が候補です。接続先が外部公開エンドポイントなら、接続元の制限と、DB事業者が推奨する証明書検証方法を確認します。事業者を分ける場合も、近いリージョンを候補にして実際の一覧・検索操作で応答を確認します。リージョンが近くても、画面表示までにSQLを何度も往復すると、その分ネットワーク待ちが積み上がります。PostgreSQL公式のTLSと証明書検証

アプリが複数台になると、各プロセスが開く接続の合計が増えます。たとえば2台のアプリが各2プロセスで、各プールの上限が5なら、アプリから最大20接続を見込みます。管理ツールやマイグレーションの接続も別に数えます。Neonのようにプール用と直接接続用のURLがある場合、マイグレーションにどちらが必要かは利用ツールの要件に合わせます。Neon公式の接続プールと制約

公開前に書き込みと復元を確認する

新規公開なら、DBにスキーマを適用し、公開URLから予約を1件作ります。アプリだけ再デプロイして予約が残り、編集もできるかを確認します。事業者がどこまで復元を提供するかはプランによります。たとえば有料のRender Postgresでは指定時点の状態を別のDBに復元できます。運用担当者は復元先のデータを検証し、アプリの接続先を切り替えます。無料のRender Postgresにはこの復元機能がありません。Render公式の復元とバックアップ

すでに利用者がいるアプリのDBを移すなら、接続URLの書き換えに加え、データをコピーする間の書き込みをどう扱うか決めます。停止時間を取れる小規模なアプリでは、書き込みを止めてから最終コピーを取る方法が使えます。PostgreSQL公式のバックアップと復元

書き込み停止を取れるDB移行 · 概念図
旧DBへの書き込み停止アプリやジョブを止める
最終コピーと復元新DBで件数や動作を確認
接続先を切り替え新DBへの書き込みを再開
書き込み再開後に旧DBへ戻す場合は、新DBで増えたデータの扱いも決めます。

最初の構成で迷うなら、内部接続を使えて運用をまとめられる案と、必要なDB機能を選べる案を並べます。接続経路、バックアップの保持期間、復元にかかる時間を具体的に比べると、月額だけでは見えない違いが分かります。

あわせて読みたい

GitHubからWebアプリを公開する方法は、KamuiDashで確認できます。