EmDashは、任意のNode.js 22+ホスティングプラットフォーム上で動作します。このガイドでは、ローカルまたはS3互換ストレージを使用したSQLiteを使用します。libSQLとPostgreSQLもNode.js上で同様に動作します — データベースオプションを参照してください。
前提条件
- Node.js v22.12.0以上
- Node.jsホスティングプロバイダーまたはVPS
設定
Node.jsデプロイ用にEmDashを設定します:
import { defineConfig } from "astro/config";
import node from "@astrojs/node";
import emdash, { local, s3 } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
output: "server",
adapter: node({ mode: "standalone" }),
integrations: [
emdash({
database: sqlite({ url: "file:./data/emdash.db" }),
storage: local({
directory: "./data/uploads",
baseUrl: "/_emdash/api/media/file",
}),
}),
],
});
ビルドと実行
-
プロジェクトをビルドします:
npm run build -
サーバーを起動します:
node ./dist/server/entry.mjs
サーバーはデフォルトでhttp://localhost:4321で実行されます。マイグレーションは最初のリクエスト時に適用されます。データベースが空でセットアップが完了していない場合、シードファイル(または組み込みのデフォルト)もその最初のリクエスト時に適用されます。
本番環境のストレージ
本番環境では、ローカルファイルシステムの代わりにS3互換ストレージを使用します:
import emdash, { s3 } from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: `file:${process.env.DATABASE_PATH}` }),
storage: s3({
endpoint: process.env.S3_ENDPOINT,
bucket: process.env.S3_BUCKET,
accessKeyId: process.env.S3_ACCESS_KEY_ID,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
publicUrl: process.env.S3_PUBLIC_URL, // Optional CDN URL
}),
}),
],
});
Docker
ビルドコンテキストを小さく保つために.dockerignoreを追加します:
node_modules
dist
.git
Dockerfileを作成します:
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
RUN mkdir -p data
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD ["node", "./dist/server/entry.mjs"]
シードファイルはビルド時に読み込まれバンドルに埋め込まれるため、ランタイムイメージにコピーする必要はありません。マイグレーションはデプロイ後の最初のリクエスト時に実行されます。シードは、データベースにコレクションがなくセットアップが完了していない場合にのみ適用されます — 既存のデータが上書きされることはありません。
イメージをビルドしてコンテナを実行します:
docker build -t my-emdash-site .
docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site
Docker Composeファイルで名前付きボリュームを使用して同じコンテナを管理します:
services:
emdash:
build: .
ports:
- "4321:4321"
volumes:
- emdash-data:/app/data
restart: unless-stopped
volumes:
emdash-data:
バックグラウンドでスタックを起動します:
docker compose up -d
環境変数
推奨: 暗号化キー
EMDASH_ENCRYPTION_KEYは、プラグインシークレットを保存時に暗号化するためのキーです。
キーは起動時に検証されます。有効にすると、プラグインシークレット暗号化でこれが使用されます。
後で設定を変更することなくシークレットを保護できるように、すべてのデプロイで設定してください。
キーを生成し、結果を環境に追加します:
npx emdash secrets generate # add the result to your environment
キーはあなたが提供し、データベースには保存されません。保存されるのは 暗号化された暗号文のみです。永続的な場所(パスワードマネージャー、 KMS、またはチームのシークレットストア)にバックアップしてください — 失うと、 それで暗号化されたすべてのシークレットが失われます。
オプション: 安定値のオーバーライド
EmDashは、プレビューHMACシークレットとコメンター IP ハッシュソルトを自動生成し、 最初の使用時にデータベースに保存します。以下の環境変数は、 これらを制御する値に固定します — 別のプロセスがメインサイトと シークレットを共有する必要がある場合に便利です。
| 変数 | 説明 |
|---|---|
EMDASH_PREVIEW_SECRET | 自動生成されるプレビューHMACシークレットのオーバーライド。 |
EMDASH_IP_SALT | 自動生成されるコメンターIPハッシュソルトのオーバーライド。 |
EMDASH_AUTH_SECRET | オプション。設定されている場合、IPソルトソースとして使用されます(EMDASH_IP_SALTも設定されている場合はそちらが優先されます)。既にこれに依存しているインストールのコメンターIPハッシュを安定させます。新規デプロイでは未設定のままにしてください。 |
データベースとストレージ
| 変数 | 説明 | 例 |
|---|---|---|
DATABASE_PATH | SQLiteデータベースへのパス | /data/emdash.db |
HOST | サーバーホスト | 0.0.0.0 |
PORT | サーバーポート | 4321 |
S3_ENDPOINT | S3エンドポイントURL | https://xxx.r2.cloudflarestorage.com |
S3_BUCKET | S3バケット名 | my-media-bucket |
S3_ACCESS_KEY_ID | S3アクセスキー | AKIA... |
S3_SECRET_ACCESS_KEY | S3シークレットキー | ... |
S3_PUBLIC_URL | メディアの公開URL | https://cdn.example.com |
永続ストレージ
SQLiteには永続的なディスクストレージが必要です。ホスティングプラットフォームが次を提供することを確認してください:
- マウントされたボリュームまたは永続ディスク
- データベースディレクトリへの書き込みアクセス
- データベースファイルのバックアップメカニズム
ヘルスチェック
ロードバランサー用のヘルスチェックエンドポイントを追加します:
export const GET = () => {
return new Response("OK", { status: 200 });
};
プラットフォームを設定して、livenessプローブ用に/healthをチェックします。