支持基于 SQLite 和本地文件系统的 Docker 私有化部署#101
Conversation
- 实现封装 `better-sqlite3` 的 `SqliteDatabase` 适配器,兼容并模拟 Cloudflare `D1Database` 接口。 - 扩展 `blob-store.ts` 以支持本地文件系统级别的附件及 Send 文件读写。 - 新增 [server.ts](cci:7://file:///root/VsCodeProject/nodewarden/src/server.ts:0:0-0:0) 作为 Node.js HTTP 服务入口(基于 Express),无缝对接原有的 Worker 路由处理逻辑。 - 增加 [Dockerfile](cci:7://file:///root/VsCodeProject/nodewarden/Dockerfile:0:0-0:0)、[docker-compose.yml](cci:7://file:///root/VsCodeProject/nodewarden/docker-compose.yml:0:0-0:0) 和 `.env.example` 文件,支持一键容器化部署。 - 新增 Cloudflare Cache API (`caches`) 的内存级 Polyfill,解决原生 Node 运行环境中的限流器报错。 - 修改 [package.json](cci:7://file:///root/VsCodeProject/nodewarden/package.json:0:0-0:0),补充后端运行依赖并新增相关的本地开发/构建脚本。 - 在中英文 README 中补充详细的 Docker 本地部署文档。
|
为了方便在非 Cloudflare 环境(私有化/本地)部署,本 PR 引入了 Node.js 兼容层:
注:由于本地测试时间有限,目前已在基础流程上跑通,请作者重点关注 D1 模拟层 与 Worker 路由对接 的稳定性,感谢! |
|
最后补充说明一下我为什么想要这个功能: 容灾与云同步协同:由于 nodewarden 已支持云端备份/还原,若多个实例(CF Worker + 本地 Node 节点)挂载同一云端存储,则天然形成了一套多活容灾与自动同步方案。本地化部署让这一特性的应用场景从单一云端拓宽到了“云+端”的混合架构。 “逃生舱”方案(Vendor Lock-in Mitigation):尽管 Cloudflare 极具公信力,但作为生产力工具,我们需要具备脱离单一平台依赖的能力。万一 CF 服务异常或定价策略调整,这套适配层能确保用户无缝切换至私有节点,保障业务连续性。 内网环境下的一致性体验:在纯内网或私有云场景下,虽然有 Vaultwarden 等选择,但对于习惯了 nodewarden 交互逻辑和特性的用户来说,这套 PR 提供了低迁移成本的内网私有化方案。 |
将 fs 和 path 修改为动态导入,确保代码在 Cloudflare Workers 环境下可以正常编译,仅在 LOCAL_ATTACHMENTS_DIR 存在时加载。
- 将 `fs/promises` 和 `path` 的静态导入改为动态导入 - 仅在启用本地存储模式时加载 Node.js 相关模块 - 需在 wrangler.toml 中开启 `nodejs_compat` 标志以支持构建
|
@shuaiplus 大佬啥时候能reviews一下呀,这个feature有机会合并吗?🥺🥺🥺 |
|
以前写nodecrypt的时候,总有人想要docker版本,我折腾了好几天,最终还是弄出来了个勉强能用的,结果过几天又不能用了,于是把docker都删掉了。 再等一下几天,我有大把时间的时候好好测试一下。 但是我还是有疑问,既然cf崩了,cf跑路了,cf不让免费用了,用户为什么还要用nodewarden,直接用成熟的vaultwarden不好吗,咱是不是应该把中心放在如何导出跟vaultwarden目录一样的data文件,到时候直接拿这个文件创建vaultwarden就可以直接用? |
NodeWarden:从“数据备份”向“实例级容灾”的演进目前 Vaultwarden 在应对多实例同步和极端场景下的灾备时,依然存在明显的短板。NodeWarden 的核心价值,在于通过原生镜像同步彻底解决这些底层的工程挑战。 1. 全量“镜像级”同步:实现真正的状态对等传统的 JSON 导出仅是静态的数据镜像,而 NodeWarden 追求的是全实例状态的实时对等:
2. 对现有方案痛点的深度思考Vaultwarden 虽然生态成熟,但在某些产品逻辑上确实给深度用户带来了不便,这也正是 NodeWarden 的差异化机会:
3. NodeWarden 的核心买点依旧是 CloudflareNodeWarden 本地化部署也仅仅是一个可选项,给有需求的用户提供的一个方案,大家使用 NodeWarden 肯定是 CF优先,只是在我提到的一些场景下本地化确实是一个加分项,如果我们维护本地化的代价没有那么大的话,多一个选项肯定是加分项 |
|
兄弟,你能搞一个docker和workers同步的吗,不然搞docker意义不大。要是两边能同步一个没了一个能继续用,这个就很牛了。 |
对呀,我本来的愿景就是这个,通过帅总写好的云备份就可以实现呀,一边没有了,另一边挂同一个云备份直接执行恢复就行了。 |
|
ok,我测试一下,workers导出备份,docker导入 |
|
@shuaiplus 帅总,啥时候方便review一下呀?🥺🥺🥺 |
|
出差中,一直抽不出来时间来测试🙁,再等等,肯定会合并的 |
better-sqlite3的SqliteDatabase适配器,兼容并模拟 CloudflareD1Database接口。blob-store.ts以支持本地文件系统级别的附件及 Send 文件读写。.env.example文件,支持一键容器化部署。caches) 的内存级 Polyfill,解决原生 Node 运行环境中的限流器报错。