EmDash 支持手动部署到任意自己的服务器(VPS、独立主机、云服务器等),使用 Node.js + SQLite 模式(无需 Cloudflare)。 它基于 Astro 框架,打包后就是一个标准的 Node.js 服务端应用(dist/server/entry.mjs),非常适合自托管。
通用部署方法
以下是两种最常用、最推荐的手动部署方式(2026 年最新 v0.x 版本通用):
前提条件(所有方式通用)
- 服务器:Linux(推荐 Ubuntu/Debian/CentOS)或任意支持 Node.js 的系统
- Node.js 版本:v22 LTS 或更高(强烈推荐 22.15+)
- pnpm(推荐)或 npm(npm install -g pnpm)
- 持久化存储目录(存放 SQLite 数据库,不能和代码部署目录混在一起,否则更新时会被覆盖)
- 域名 + HTTPS(Passkey 登录要求 HTTPS,生产环境必须)
- 端口:默认 4321(可改)
方式一:纯 Node.js 手动部署(推荐 VPS 用户,最灵活)
-
创建项目(选择 Node.js 模板) 在服务器上执行:
Bashnpm create emdash@latest my-site- 项目名:my-site(可自定义)
- 部署目标:选择 “Node.js”(不是 Cloudflare)
- 模板:选 blog / marketing / portfolio 等
Bashcd my-site pnpm install # 或 npm install -
配置 Astro(重要!) 编辑 astro.config.mjs,确保是 server 模式 + Node standalone:
JavaScriptimport { defineConfig } from 'astro/config'; import node from '@astrojs/node'; import emdash from 'emdash'; export default defineConfig({ output: 'server', adapter: node({ mode: 'standalone' }), integrations: [emdash()], }); -
生成密钥并设置环境变量
Bashnpx emdash auth secret把生成的密钥添加到 .env 文件(或系统环境变量):
envEMDASH_AUTH_SECRET=你的密钥1
EMDASH_PREVIEW_SECRET=你的密钥2
DATABASE_PATH=/var/data/emdash/emdash.db # 必须是持久化路径
HOST=0.0.0.0
PORT=4321
NODE_ENV=production -
创建持久化数据库目录
Bashmkdir -p /var/data/emdash chown -R $USER:$USER /var/data/emdash -
构建项目
Bashpnpm build # 或 npm run build -
初始化数据库 + 种子数据
Bashpnpm bootstrap # 或 npx emdash init && npx emdash seed -
启动服务(推荐用 PM2 或 systemd)
推荐 PM2(最简单):
Bashnpm install -g pm2 pm2 start dist/server/entry.mjs --name emdash \ --env production \ -- --port 4321 pm2 save pm2 startup或者 systemd(系统级服务): 创建 /etc/systemd/system/emdash.service:
ini[Unit] Description=EmDash CMS After=network.target [Service] Type=simple User=www-data # 或你的用户 WorkingDirectory=/path/to/my-site ExecStart=/usr/bin/node dist/server/entry.mjs Restart=always EnvironmentFile=/path/to/my-site/.env LimitNOFILE=65535 [Install] WantedBy=multi-user.targetBashsudo systemctl daemon-reload sudo systemctl enable --now emdash -
设置反向代理(Nginx 推荐) 示例 Nginx 配置(/etc/nginx/sites-available/emdash):
nginxserver { listen 443 ssl; server_name your-domain.com; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; location / { proxy_pass http://127.0.0.1:4321; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }重载 Nginx:sudo nginx -s reload
访问 https://your-domain.com/_emdash/admin 完成首次设置向导(Passkey 注册)。
方式二:使用 Docker 部署(最推荐,隔离最好)
仓库自带 Dockerfile 和 compose.yaml,超级简单:
# 1. 克隆或创建项目后
cd my-site
# 2. 启动(自动 build + 运行)
docker compose up -d --build
compose.yaml 默认会映射端口、持久化 SQLite 卷。 你也可以直接用官方仓库的 compose.yaml 启动演示站点。
常见问题 & 注意事项
- 数据库持久化:DATABASE_PATH 一定要指向 /var/data/ 这类独立目录。
- 插件沙箱:Node.js 模式下插件在进程内运行(安全性稍低,但功能完整)。
- 更新:拉取新代码 → pnpm install → pnpm build → 重启服务。
- 官方文档参考:
- GitHub 主仓库:https://github.com/emdash-cms/emdash (有 Dockerfile / compose.yaml)
- 模板说明:https://github.com/emdash-cms/emdash/blob/main/TEMPLATES.md
在宝塔面板使用 Docker 功能部署 EmDash的方法
在宝塔面板使用 Docker 功能部署 EmDash(Node.js 模式)
EmDash 官方提供了 Dockerfile 和 compose.yaml,非常适合宝塔的 Compose 项目 部署。下面是 2026 年最新 v0.1.x 版本 的实用教程,已在宝塔面板(推荐 8.x+ 版本)上验证过。
前提条件
- 宝塔面板已安装 Docker 插件(软件商店 → 搜索 “Docker” → 一键安装)
- 宝塔已安装 Node.js 版本管理器(用于创建项目,推荐 Node 22 LTS)
- 服务器端口 4321 未被占用(可自定义)
- 准备好域名 + 宝塔 SSL 证书(生产环境必须 HTTPS)
步骤 1:创建 EmDash 项目(在服务器上生成代码)
- 打开宝塔 终端(或 SSH 登录)。
- 执行以下命令创建项目:
Bash
mkdir -p /www/wwwroot/emdash && cd /www/wwwroot/emdash npm create emdash@latest . -- --yes --template blog # 可选模板:blog / marketing 等- 部署目标选择 Node.js(不是 Cloudflare)。
- 进入项目目录:
Bash
cd /www/wwwroot/emdash
步骤 2:生成密钥并创建持久化数据目录
# 生成两个密钥(复制保存好)
npx emdash auth secret
npx emdash auth secret
创建持久化目录(重要!数据库必须持久化):
mkdir -p /www/docker/emdash/data
chmod -R 777 /www/docker/emdash/data
在项目根目录新建 .env 文件(宝塔文件管理器 → 新建文件):
EMDASH_AUTH_SECRET=上面生成的第一个密钥
EMDASH_PREVIEW_SECRET=上面生成的第二个密钥
DATABASE_PATH=/app/data/emdash.db
HOST=0.0.0.0
PORT=4321
NODE_ENV=production步骤 3:使用宝塔 Docker Compose 部署
-
打开宝塔左侧 Docker → Compose 项目 → 添加项目。
-
项目名称:填 emdash(随意)。
-
Compose 文件来源 选择 从目录导入:
- 目录路径填:/www/wwwroot/emdash
- 宝塔会自动读取项目里的 compose.yaml。
-
如果没有自动读取,可手动编辑 compose.yaml(推荐使用绑定挂载方式,更直观):
把 compose.yaml 内容替换为下面(已优化适配宝塔):
YAMLservices: emdash: build: . ports: - "4321:4321" volumes: - /www/docker/emdash/data:/app/data # 关键:持久化数据 restart: unless-stopped environment: - EMDASH_AUTH_SECRET=${EMDASH_AUTH_SECRET} - EMDASH_PREVIEW_SECRET=${EMDASH_PREVIEW_SECRET} - DATABASE_PATH=/app/data/emdash.db - HOST=0.0.0.0 - PORT=4321 -
点击 保存并启动(或 部署)。
-
等待构建完成(第一次会下载 node:22-alpine 并构建,大概 1-3 分钟)。
步骤 4:设置 Nginx 反向代理(宝塔推荐方式)
- 宝塔 网站 → 添加站点(填你的域名)。
- 站点创建后,点击 设置 → 反向代理 → 添加反向代理:
- 代理目录:/
- 目标 URL:http://127.0.0.1:4321
- 发送域名:保持默认
- 开启 SSL(申请或导入证书)。
- 保存后访问 https://你的域名/_emdash/admin 即可看到 EmDash 安装向导(Passkey 注册)。
常见问题 & 优化
- 数据库丢失:必须使用上面 /www/docker/emdash/data 挂载目录,否则重启容器数据就没了。
- 构建失败:确认项目目录里有 package.json、astro.config.mjs、Dockerfile。
- 端口冲突:改 compose.yaml 中的 4321:4321 为其他端口(如 54321:4321),然后反向代理对应端口。
- 更新 EmDash:进入项目目录 git pull(或重新 create)→ Docker Compose 项目 → 重建。
- 插件沙箱:Node.js + Docker 模式下插件在容器内运行,安全性比 Cloudflare Workers 稍低但完全够用。
部署完成后,你就可以直接在 EmDash 里使用 AI 代理(MCP)生成页面和功能了!


苹果CMS V10版手动添加代码实现自动生成网站地图的方法
wordpress的HTML5播放器插件分享,自建插件,如有错误请评论区反馈。
网站404页面的设置与404页面3秒后跳回首页的设置技巧
WordPress的HTML5魔方幻灯片插件,免费幻灯片插件分享,自建插件,如果有什么BUG请在评论区反馈。
如何提高网站速度与抗攻击能力:wordpress、cloudflare、waf与memcached的完整教程
刚刚用ChatGPT-4O写了一个WordPress主题,你们来验证一下它的代码是否准确。
评论抢沙发