Deno
スタンドアロンの Deno サーバとしてデプロイするには、ビルトインの deno アダプタを使用します。このアダプタは Deno のネイティブ Deno.serve() API を使用し、エッジ互換の fetch ハンドラとビルド時静的ルートマッピングを提供します。
システムに Deno がインストールされている必要があります:
curl -fsSL https://deno.land/install.sh | sh
追加のパッケージは不要です — アダプタは @lazarv/react-server に組み込まれています。
次に、react-server.config.mjs ファイルにアダプタを追加します:
export default {
adapter: "deno",
};
オプションを渡してアダプタをカスタマイズできます:
export default {
adapter: [
"deno",
{
name: "my-app", // アプリケーション名(生成される deno.json で使用)
},
],
};
設定オプション
name: アプリケーション名。package.jsonの name(スコープなし)または "react-server-app" にフォールバックします。
環境変数
生成されたサーバは実行時に以下の環境変数をサポートします:
PORT: サーバポート(デフォルト:3000)HOST: サーバホスト名(デフォルト:0.0.0.0)ORIGIN: サーバのオリジン URL を上書き
Deno アダプタはエッジビルドモードを使用し、サーバ全体を単一のファイルにバンドルします。ビルド時に以下を行います:
- サーバコードを
.deno/server/.react-server/server/edge.mjsにバンドル - すべての静的アセットを
.deno/static/にコピー - ビルド時静的ルートマップを含む
start.mjsスクリプトを生成し、Deno.readFile()で適切な MIME タイプ検出付きの静的ファイル配信を実現 - 簡単なデプロイのためのスタートタスク付き
deno.jsonを作成
静的ファイル(HTML、CSS、JS、画像など)はビルド時ルートマップから解決され、サーバハンドラを経由せず直接配信されます。
react-server CLI を使用してアプリケーションをビルドします:
pnpm react-server build [root]
これにより、以下の構造の .deno/ ディレクトリが生成されます:
.deno/
├── start.mjs # 静的ルートマップ付きエントリーポイント
├── deno.json # スタートタスク付き Deno 設定
├── static/ # すべての静的アセット
│ ├── assets/ # ハッシュ付きビルドアセット(CSS、JS)
│ ├── client/ # クライアントサイドバンドル
│ └── ... # 公開ファイル、プリレンダリング HTML
└── server/
└── .react-server/
└── server/
└── edge.mjs # バンドルされたサーバ
本番サーバを直接起動します:
deno run --allow-net --allow-read --allow-env --allow-sys .deno/start.mjs
または --deploy フラグを使用してビルドと即時起動を行います:
pnpm react-server build [root] --deploy
生成された deno.json のタスクを使用することもできます:
cd .deno
deno task start
Deno アダプタは自己完結型のサーバを生成するため、Deno が動作する場所ならどこでもデプロイできます:
- ベアメタル / VPS:
.deno/ディレクトリをコピーしてdeno task startを実行 - Deno Deploy:
deployctlを使用してデプロイ — Deno Deploy ドキュメントを参照 - Docker: 公式 Deno Docker イメージを使用
- Fly.io: Dockerfile を使用して
flyctlでデプロイ - Railway、Render: 起動コマンドを
deno run --allow-net --allow-read --allow-env --allow-sys .deno/start.mjsに設定
Dockerfile の例
FROM denoland/deno:latest
WORKDIR /app
COPY .deno/ .
EXPOSE 3000
CMD ["deno", "task", "start"]