実行環境の選び方
このページで決めること:EmDashのサイトを、どこで動かすか
決める前に知っておくこと
EmDashはAstroのサイトに組み込むCMSで、ページをアクセスのたびにサーバーで描画します(Astroの設定は output: "server")。そのため、サーバーのプログラムを動かし続けられる実行環境が必要です。公式ドキュメントには、次の2つのデプロイ先が示されています。
| 実行環境 | データベース | メディア | 定期処理(予約公開など) | サンドボックス型プラグイン |
|---|---|---|---|---|
| Cloudflare Workers | D1(またはHyperdrive経由のPostgreSQL) | R2 | Cron Trigger | Worker Loader(Workersの有料プランが必要) |
| Node.js(22.16以上) | SQLite、PostgreSQL、libSQL | ローカルのディスク、S3互換 | 組み込みのスケジューラー(プロセスが動いている間だけ) | @emdash-cms/sandbox-workerd(workerd を子プロセスで動かす) |
Cloudflare版の公式テンプレートは、Worker Loaderのバインディングをコメントアウトした状態で作られるため、そのままならWorkersの無料プランでデプロイできます。サンドボックス型プラグインを使う場合は、Worker Loaderのバインディング(LOADER)を有効にし、有料プランにします。
公式の推奨
- Cloudflare Workersは、既定では訪問者の近くでWorkerを動かします。EmDashはサーバーで描画するときにD1と何度もやり取りするため、Targeted PlacementでWorkerをD1のプライマリーの近くで動かします。Targeted Placementと同時にD1の読み取りレプリカは有効にせず、EmDashの
session設定は既定の"disabled"のままにします。(公式「Cloudflareへのデプロイ」) - 秘密の値は、Workersでは
pnpm wrangler secret put <NAME>で、Node.jsではホスティング事業者のシークレット管理機能で登録します。astro.config.mjs、wrangler.jsonc、import.meta.envには書きません。(公式「Cloudflareへのデプロイ」「シークレットとキーの管理」) - Node.jsで本番運用する場合は、少なくとも1つのNode.jsのプロセスを常に動かしておきます。すべてのプロセスが止まると、予約公開などの定期処理も止まります。(公式「Node.jsへのデプロイ」)
別の選択肢が合う条件
サンドボックス型プラグインを使わず、アクセスが無料枠に収まるサイトなら、Aで運用できます。自分で管理するサーバーがある場合や、既存のPostgreSQLを使いたい場合は、Cが合います。複数のNode.jsのプロセスで動かす場合は、SQLiteではなくPostgreSQLかlibSQLを使います。
根拠にした公式ページ
- Cloudflareへのデプロイ(原文:https://docs.emdashcms.com/deployment/cloudflare/)
- Node.jsへのデプロイ(原文:https://docs.emdashcms.com/deployment/nodejs/)
- プラグインサンドボックス(原文:https://docs.emdashcms.com/deployment/plugin-sandbox/)
- プラグインのインストール(原文:https://docs.emdashcms.com/plugins/installing/)
- シークレットとキーの管理(原文:https://docs.emdashcms.com/deployment/secrets/)
- Cloudflare Workersの料金(https://developers.cloudflare.com/workers/platform/pricing/)
- Cloudflare Workersの制限(https://developers.cloudflare.com/workers/platform/limits/)
- Dynamic Workersの料金(https://developers.cloudflare.com/dynamic-workers/pricing/)