Cloudflare 参数
NodeWarden 的默认部署目标是 Cloudflare Workers。仓库会把前端构建到 dist/,Worker 同时处理 API 和静态资源。
运行结构
浏览器 / 官方客户端
|
v
Cloudflare Worker
|-- 静态资源 ASSETS -> dist/
|-- API 路由 -> src/router.ts
|-- D1 -> 账号、密码项、文件夹、附件元数据、Send、配置
|-- R2/KV -> 附件与 Send 文件正文
|-- Durable Object -> 前端实时通知src/index.ts 会先尝试用 ASSETS 返回前端资源。属于 /api/、/identity/、/icons/、/notifications/、/.well-known/、/config 等路径的请求会交给 Worker API 处理。
wrangler.toml 绑定
默认 wrangler.toml 使用这些绑定:
name = "nodewarden"
main = "src/index.ts"
compatibility_date = "2024-01-01"
[assets]
binding = "ASSETS"
directory = "./dist"
not_found_handling = "single-page-application"
run_worker_first = false
[triggers]
crons = [ "*/5 * * * *" ]
[[d1_databases]]
binding = "DB"
database_name = "nodewarden-db"
database_id = "00000000-0000-0000-0000-000000000000"
[[durable_objects.bindings]]
name = "NOTIFICATIONS_HUB"
class_name = "NotificationsHub"
[[r2_buckets]]
binding = "ATTACHMENTS"
bucket_name = "nodewarden-attachments"crons = [ "*/5 * * * *" ] 会每 5 分钟唤起一次 scheduled handler。真正是否执行备份,由备份配置里的时区、开始时间、间隔和上次运行时间决定。
必需资源
| 绑定 | 必需 | 用途 |
|---|---|---|
DB | 是 | D1 数据库,保存结构化数据。 |
JWT_SECRET | 是 | JWT、附件短链、Send 短链、备份配置 runtime 加密都会用到。 |
NOTIFICATIONS_HUB | 是 | 用于网页端实时同步、备份进度通知。 |
ASSETS | 是 | 部署网页前端静态资源。 |
ATTACHMENTS | 推荐 | R2 附件和 Send 文件存储。 |
ATTACHMENTS_KV | 可选 | KV 附件和 Send 文件存储 fallback。 |
数据库自动初始化
NodeWarden 不要求你手动执行 SQL。Worker 第一次处理请求时会调用:
src/index.ts->ensureDatabaseInitialized()src/services/storage.ts->initializeDatabase()src/services/storage-schema.ts->ensureStorageSchema()
初始化逻辑会先创建 config 表,然后读取 config.schema.version。如果版本不同,会运行一批幂等 SQL,并把新版本写回 config 表。
这意味着更新后只要 schema 版本变了,现有实例会自动补齐表、列和索引。
仓库里的 database_id 是占位值,用来让新 clone 的项目在登录前也能通过 Wrangler 配置解析。npm run deploy 和 npm run deploy:kv 会先运行 scripts/ensure-d1.cjs,自动复用或创建 nodewarden-db,然后把真实 id 写回 当前使用的 Wrangler 配置文件。
R2 部署
R2 是推荐模式。优点是大文件限制更宽松,附件和 Send 文件不用塞进 D1。
npm run deploy确保 Cloudflare 项目里有 R2 bucket,并且绑定名称叫 ATTACHMENTS。
KV 部署
KV 模式适合不想绑卡、只需要小附件的实例。
npm run deploy:kvKV 模式使用 wrangler.kv.toml,绑定名是 ATTACHMENTS_KV。代码会把单个对象限制压到 Cloudflare KV 的 25 MiB 以内。
Demo 部署
仓库有 Demo 专用脚本:
npm run deploy:demo这个脚本会先执行 npm run build:demo,再把 dist 部署到 Pages 项目。正式实例不要用 Demo 模式保存真实数据。