不用服务器也能跑网盘聚合:OpenList Worker 部署教程(Cloudflare Workers 详细版)
摘要
OpenList 官方的 TypeScript + Serverless 移植版:后端由 Go 重写为 Hono.js,跑在 Cloudflare Workers / EdgeOne / 阿里云 ESA,无需自备服务器。详细部署教程覆盖一键部署与 Wrangler 手动部署、D1 自动预配、DB_FORMAT × DB_DRIVER 存储后端选择、环境变量全表、部署后安装向导初始化、定时任务与常见问题。
不用服务器也能跑网盘聚合:OpenList Worker 部署教程(Cloudflare Workers 详细版)
GitHub:https://github.com/OpenListTeam/OpenList-Worker 官方文档:https://doc.oplist.org.cn/guide/installation/worker 开源协议:AGPL-3.0
一、OpenList Worker 是什么?
OpenList 是流行的开源文件列表 / 网盘聚合程序(AList 的社区延续),但原版是 Go 程序,得跑在服务器或容器里——一台 VPS 又是固定开销。
OpenList Worker(仓库 OpenList-TSWorker)是 OpenList 官方的 TypeScript + Serverless 移植版:后端从 Go 重写为运行在边缘平台上的 TypeScript 服务,前端复用官方 OpenList-Frontend(SolidJS)。无需自备服务器,一键部署,跑在 Cloudflare 免费额度内就行。
项目 | 技术栈 |
|---|---|
后端 | Hono.js(TypeScript) |
运行平台 | Cloudflare Workers / EdgeOne Functions / 阿里云 ESA / Vercel / AWS Lambda |
数据库 | Cloudflare D1(SQLite)、MySQL / MariaDB / PostgreSQL / SQL Server、Cloudflare KV |
前端 | OpenList-Frontend(SolidJS) |
各平台能力对比
平台 | 持久化 | 一键部署 | 说明 |
|---|---|---|---|
Cloudflare Workers | D1 / KV / JSON | ✅ | 推荐,全球边缘网络 |
EdgeOne Makers(国际站 / 中国站) | EdgeOne Blob / KV | ✅ | 腾讯云边缘平台 |
阿里云 ESA | EdgeKV | ✅ | 阿里边缘函数 |
Vercel | 内存(JSON) | — | 默认无持久化 |
AWS Lambda | 内存(JSON) | — | 用 |
划重点:Vercel 和 Lambda 默认没有持久化,配置会丢;要长期用请选 Cloudflare Workers 或 EdgeOne / ESA。
下面是 Cloudflare Workers 的详细部署流程——这是官方推荐、也是最适合国内用户的选择(晚点还会说 EdgeOne,它的优势是国内节点)。
二、部署前准备
一个 Cloudflare 账号(免费)
Node.js 18+ 与 pnpm
三、方式一:一键部署(最省事)
点官方文档里的 Deploy to Cloudflare Workers 按钮,Cloudflare 会拉取仓库、引导你填环境变量(至少 JWT_SECRET)并完成部署。
⚠️ 常见坑:如果 Cloudflare 提示「无法获取存储库内容(cannot fetch repository content)」,不是你的错——先 Fork 本项目到你自己的 GitHub 账号,再用「连接到 GitHub 仓库」的方式部署,不要直接用一键部署 URL。
四、方式二:Wrangler 手动部署(推荐,可控性最好)
第 1 步:克隆并安装依赖
第 2 步:配置 wrangler.jsonc
这里要配两件事:环境变量(至少 JWT_SECRET)和 KV / D1 绑定。
第 3 步:处理 D1 数据库(推荐用自动预配)
Cloudflare 现在支持 Automatic resource provisioning(自动资源预配):在 wrangler.d1.jsonc 里省略 database_id,wrangler(需 >= 4.45.0)在部署时会自动创建同名 D1 数据库并把 ID 回写进配置——不用手动建库、不用复制粘贴 UUID。
注意这里的绑定名是 DB,变量名 DB_FORMAT=sql + DB_DRIVER=d1 是官方推荐的 Cloudflare 组合(SQL 格式与 Go 后端完全兼容)。
第 4 步:部署
第 5 步:部署后在 Worker 后台补配置
部署完成后,去 Cloudflare Dashboard 的 Worker 页面配置:
KV namespace 绑定(如果要用 KV 存数据)
环境变量 / Secrets(见第六节)
五、数据存储后端怎么选?(重点)
OpenList Worker 把持久化拆成两个正交的层,理解这一点就不会配错:
DB_FORMAT—— 数据怎么序列化存DB_DRIVER—— 用哪个底层存储系统
DB_FORMAT(存储格式)
值 | 说明 |
|---|---|
| 整个对象序列化为单个 JSON 值,适合 KV / Blob 存储 |
| 分 key 存储,每实体一条记录(避免大 JSON) |
| 关系表,与 Go 后端完全一致(用于 D1 / MySQL) |
DB_DRIVER(数据库驱动)
值 | 说明 | 适用平台 |
|---|---|---|
| 自动检测可用驱动(优先级:blob → cfkv → kv → d1 → memory) | 通用 |
| 腾讯 EdgeOne Blob / 阿里云 ESA Blob | EdgeOne / ESA |
| Cloudflare KV REST API(需 | 外部 / 跨账号 |
| Cloudflare KV binding | Cloudflare Workers |
| Cloudflare D1(SQLite) | Cloudflare Workers |
| Cloudflare Durable Objects(SQLite) | Cloudflare Workers |
| 外部 MySQL | Node.js 容器运行时 |
推荐组合
向后兼容:旧的
DB_DRIVER=json会自动转换为DB_FORMAT=map+ 自动检测驱动。
表名对齐(用 sql 格式时)
sql 格式采用列式表,命名策略与 Go 后端的 GORM 一致:snake_case + 复数表名 + 固定前缀 x_。
Go 结构体 | 表名 |
|---|---|
|
|
|
|
|
|
|
|
|
|
(仅 TS)Plugin |
|
前缀固定为 x_,无需额外配置就能和 Go 后端共用同一个物理数据库——想从原版 OpenList 平滑迁到 Worker 版,这是关键设计。
六、环境变量 / Secrets 全表
变量 | 必要 | 默认值 | 说明 |
|---|---|---|---|
| 推荐 | — | JWT 签名密钥,同时用于数据加密与定时任务鉴权。未配置时自动生成并持久化到 KV |
| 可选 |
| 存储格式: |
| 可选 |
| 数据库驱动: |
| 可选 | — | Cloudflare 账号 ID( |
| 可选 | — | Cloudflare KV namespace ID( |
| 可选 | — | Cloudflare API token( |
| 可选 | — | MySQL 连接串(或用下面分项) |
| 可选 | — | MySQL 分项配置( |
| 可选 | — | 跳过安装向导,用该密码自动初始化 admin |
| 可选 | — | CORS 允许白名单(逗号分隔) |
| 可选 |
| 单次整体上传( |
| 可选 |
| 分片上传单片大小上限(字节) |
| 可选 | — | 前端静态资源 CDN 地址,支持 |
| 可选 | — | 允许作为种子数据来源的主机白名单 |
💡
JWT_SECRET是唯一强烈建议配的:不配虽然能跑(自动生成持久化到 KV),但你一旦清空 KV 数据,加密数据就解不开了。生产环境请显式设置一个长随机串。
七、部署后初始化(不用配 ADMIN_PASS)
部署完成后,首次访问站点会自动进入安装向导,在浏览器里设置管理员账号与密码即可完成初始化——无需预先配置 ADMIN_PASS。
配了 ADMIN_PASS 的话则跳过向导直接自动初始化;万一忘了管理员密码,两种补救方式:临时设置 ADMIN_PASS 重新部署,或清空已持久化的配置后重跑向导。
八、定时任务(token 刷新)
JWT_SECRET 同时充当定时任务鉴权密钥:任务入口是 POST /api/task/refresh。
EdgeOne 上用 edgeone.json 配 cron:
Cloudflare Workers 侧用 Cron Triggers 触发同一路径,payload 里的 cron_secret 填相同的 JWT_SECRET 即可。
九、本地开发
十、常见问题
Cloudflare 提示「无法获取存储库内容」 先 Fork 本项目,再通过「连接到 GitHub 仓库」部署,不要直接用一键部署 URL。
保存设置后刷新又恢复原样(ESA / EdgeOne) 通常是 KV/CDN 缓存一致性问题。项目已对 /api/* 的 GET 响应强制 no-cache 并实现了模块级 KV 缓存;若仍复现,检查 KV 命名空间是否正确绑定、是否只读。ESA 的 EdgeKV 是最终一致性的,跨节点同步有延迟属正常。
部署后配置丢了 / 服务起不来 检查存储绑定:Serverless 环境(Workers / EdgeOne / ESA)禁止静默回退到内存存储——没有可用持久化后端时服务会直接报错,而不是"看起来能跑但数据丢"。请确认 D1 或 KV 绑定正确。
想和原版 OpenList 共用数据 用 DB_FORMAT=sql,表名带固定 x_ 前缀,与 Go 后端物理表完全一致,可指向同一个数据库。
十一、总结路线
场景 | 怎么做 |
|---|---|
只想最快跑起来 | 一键部署(记得先 Fork) |
要可控 / 要长期维护 | Wrangler 手动部署 + D1 自动预配( |
主要面向国内访问 | 考虑 EdgeOne Makers(腾讯云节点), |
想沿用原版数据 |
|
想省钱到极致 | Cloudflare 免费层:Workers + D1 + KV 全在免费额度内 |
OpenList Worker 目前仍在活跃开发中(仓库标注 WIP),边缘适配和安全加固的提交很密集。它把「文件列表服务」这类本该常驻的进程彻底 Serverless 化,配合 Cloudflare 的免费额度,基本等于零成本零运维——如果你之前因为不想养 VPS 而放弃自建 OpenList,现在可以重新考虑了。
相关文章
暂无相关文章
