EmDash は Node.js 22 以上が使えるホスティング環境で動作します。本ガイドでは、SQLite とローカルまたは S3 互換ストレージを使った、一般的なプロバイダーへのデプロイを説明します。
前提条件
- 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
-
データベースを初期化します。
npx emdash init --database ./data/emdash.db -
サーバーを起動します。
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 ./
COPY --from=builder /app/seed ./seed
COPY --from=builder /app/astro.config.mjs ./
RUN mkdir -p data
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD ["sh", "-c", "npx emdash init && 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_AUTH_SECRET | セッション Cookie と認証トークンに署名します。npx emdash auth secret で生成します。 |
EMDASH_PREVIEW_SECRET | 下書きコンテンツのプレビュー URL に署名します。npx emdash auth secret で生成します。 |
データベースとストレージ
| 変数名 | 説明 | 例 |
|---|---|---|
EMDASH_SITE_URL | ブラウザー向けの公開オリジン(未設定時は SITE_URL にフォールバック) | https://example.com |
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 });
};
ライブネスプローブで /health を確認するようプラットフォームを設定します。