DBとファイル置き場の選び方
このページで決めること:EmDashのサイトで、どのデータベースとメディアの置き場所(メディアストレージ)を使うか
決める前に知っておくこと
EmDashは、データベースとメディアストレージを別々に設定します。
- データベース:コンテンツモデル、エントリー、ユーザー、設定、プラグインのデータを保存します。
- メディアストレージ:アップロードした画像やファイルの本体を保存します。データベースに入るのはメディアの情報(メタデータ)だけです。
使えるデータベースとメディアストレージは、実行環境によって決まります。
| 種類 | 選択肢 | 動く実行環境 |
|---|---|---|
| データベース | Cloudflare D1 | Cloudflare Workers |
| データベース | Hyperdrive(既存のPostgreSQLにWorkersからつなぐ) | Cloudflare Workers |
| データベース | SQLite | Node.js、ローカルでの開発 |
| データベース | PostgreSQL | Node.js |
| データベース | libSQL(リモート接続できるSQLite互換のデータベース) | Node.js |
| メディア | R2のバインディング | Cloudflare Workers |
| メディア | S3互換(AWS S3、R2のS3 API、MinIOなど) | Node.js |
| メディア | ローカルのディスク | Node.js、ローカルでの開発 |
Cloudflareでは、データベースの読み取りを減らすために、KVにクエリ結果を保存するオブジェクトキャッシュ(kvCache())も使えます。
公式の推奨
- データベースのバックアップにはメディアのファイル本体が含まれないため、メディアストレージは別にバックアップします。(公式「メディアストレージの選択」)
- R2を公開用のカスタムドメインで配信する場合、そのドメインからはバケット内のすべてのオブジェクトに到達できます。自動のJSONバックアップは同じバケットの
backups/に保存されるため、この部分を公開ドメインから見える状態にしてはいけません。非公開のバケットとEmDashのメディア用ルートを使うか、公開する範囲をメディアに限ります。(公式「Cloudflareへのデプロイ」「メディアストレージの選択」「バックアップと復旧」) - Cloudflareの
r2.devの開発用URLにはレート制限があり、本番の配信用ではありません。(公式「メディアストレージの選択」) - SQLiteは永続的なディスクが必要で、一時的なストレージしかない環境では、追加の設定なしには動きません。(公式「データベースの選択」)
選択肢の比較:データベース
選択肢の比較:メディアストレージ
料金は2026年9月にCloudflare公式の料金ページで確認した値です。KV(オブジェクトキャッシュ)の含まれる量は、無料プランで1日10万回の読み取りと1,000回の書き込み・削除、有料プランで月1,000万回の読み取りと100万回の書き込み・削除、保存1GBです。
別の選択肢が合う条件
Node.jsのサーバー1台で動かすなら、SQLiteとローカルのディスクの組み合わせが最も少ない設定で済みます。複数のNode.jsのプロセスで動かす場合や、メディアをサーバーと切り離したい場合は、PostgreSQLまたはlibSQLとS3互換のストレージが合います。Cloudflare Workersで既存のPostgreSQLを使いたい場合は、Hyperdriveを使う方法があります。
根拠にした公式ページ
- データベースの選択(原文:https://docs.emdashcms.com/deployment/database/)
- メディアストレージの選択(原文:https://docs.emdashcms.com/deployment/storage/)
- オブジェクトキャッシュ(原文:https://docs.emdashcms.com/deployment/object-cache/)
- Cloudflareへのデプロイ(原文:https://docs.emdashcms.com/deployment/cloudflare/)
- バックアップと復旧(原文:https://docs.emdashcms.com/guides/backups/)
- Cloudflare Workersの料金(D1・KVを含む)(https://developers.cloudflare.com/workers/platform/pricing/)
- Cloudflare R2の料金(https://developers.cloudflare.com/r2/pricing/)