部署到 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", }), }), ],});- 构建项目:
npm run build-
初始化数据库:
Terminal window npx emdash init --database ./data/emdash.db -
启动服务器:
Terminal window node ./dist/server/entry.mjs
服务器默认运行在 http://localhost:4321。
生产环境存储
Section titled “生产环境存储”在生产环境中,建议使用 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
Section titled “Docker”创建 Dockerfile:
FROM node:22-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run build
FROM node:22-alpineWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/node_modules ./node_modulesCOPY --from=builder /app/package.json ./
ENV HOST=0.0.0.0ENV PORT=4321
EXPOSE 4321CMD ["node", "./dist/server/entry.mjs"]构建并运行:
docker build -t my-emdash-site .docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site生产环境必需
Section titled “生产环境必需”| 变量 | 描述 |
|---|---|
EMDASH_AUTH_SECRET | 用于签署会话 Cookie 和身份验证令牌。使用 npx emdash auth secret 生成。 |
EMDASH_PREVIEW_SECRET | 用于签署草稿内容的预览 URL。使用 npx emdash auth secret 生成。 |
数据库与存储
Section titled “数据库与存储”| 变量 | 描述 | 示例 |
|---|---|---|
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 端点作为存活探针。