Node.js へのデプロイ

このページ

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",
			}),
		}),
	],
});

ビルドと実行

  1. プロジェクトをビルドします。
npm run build
  1. データベースを初期化します。

    npx emdash init --database ./data/emdash.db
  2. サーバーを起動します。

    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_PATHSQLite データベースのパス/data/emdash.db
HOSTサーバーのホスト0.0.0.0
PORTサーバーのポート4321
S3_ENDPOINTS3 エンドポイント URLhttps://xxx.r2.cloudflarestorage.com
S3_BUCKETS3 バケット名my-media-bucket
S3_ACCESS_KEY_IDS3 アクセスキーAKIA...
S3_SECRET_ACCESS_KEYS3 シークレットキー...
S3_PUBLIC_URLメディアの公開 URLhttps://cdn.example.com

永続ストレージ

SQLite には永続ディスクが必要です。ホスティングで次を用意してください。

  • マウントしたボリュームまたは永続ディスク
  • データベースディレクトリへの書き込み権限
  • データベースファイルのバックアップ手段

ヘルスチェック

ロードバランサー用にヘルスチェック用エンドポイントを追加します。

export const GET = () => {
  return new Response("OK", { status: 200 });
};

ライブネスプローブで /health を確認するようプラットフォームを設定します。