快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」


文档日期:2026.8.14
适用仓库:openlist-eo(OpenList-Worker → EdgeOne Makers 无服务器移植版)
文档目标:从零到可访问生产环境,覆盖介绍、架构、功能、本地/云端部署、流水线与扩展。
这里十分感谢@时光大佬提供的思路❤️❤️❤️,然后由@One借助咸鱼cursor来完成openlist-eo版的开发,亲测十分丝滑哦。
效果demo:https://openlisteo.onedayxyy.cn/s/oneyp




https://cnb.cool/onedayxyy/OneOpenlistEoPublic
OneOpenlistEo(openlist-eo) 是将 OpenList-Worker 适配到腾讯云 EdgeOne Makers 的无服务器云盘网关。
它解决的核心问题是:
git push)即可发版。| 项 | 说明 |
|---|---|
| 运行形态 | EdgeOne Makers:静态前端 + Node Cloud Functions |
| 后端框架 | Hono(打包为 cloud-functions/[[default]].js) |
| 前端 | Vite + React(构建产物到 public/) |
| 默认存储 | EdgeOne Blob(模拟 KV,存元数据/配置) |
| 可选存储 | 远程 MySQL / MariaDB / PostgreSQL / SQL Server(ENABLE_D1=true) |
| 推荐场景 | 天翼等网盘挂载 + 文件夹分享 + 302 预览/下载 |
定位说明:上游 OpenList-Worker 仍在演进,本仓库目标是「零服务器可用」,并非 100% 复刻 Docker 完整版 OpenList。部分管理能力(索引、加密落地、部分驱动细节)可能与规划文档不完全一致,以线上实际行为为准。
/d/*、/sd/* 等)。/s/:sid)。/sd/:sid/...,无需登录。内置多类驱动(能力因上游完成度而异),例如:
本仓库重点验证场景:天翼云盘 + 302 + 文件夹分享。
| 方式 | 适用 |
|---|---|
本地 npm run deploy | 联调、紧急热修 |
推送 main → CNB 流水线 | 正式发版、可审计、可钉钉通知 |
middleware.js 做 SPA rewrite:前端路由刷新不 404。 1浏览器
2 ├─ 静态前端(Vite/React → public/)
3 │ /files /s/:sid /login /admin/...
4 └─ 动态路径
5 /api/* /d/* /p/* /sd/* /dav/* /@setup/* /ping
6 └─ middleware.js(透传 or rewrite 到 /)
7 └─ cloud-functions/[[default]].js (Hono onRequest)
8 ├─ EdgeOne Blob KV(默认,BLOB_STORE)
9 └─ 可选 REMOTE_D1(MySQL/Postgres 等)
10 └─ 各网盘驱动 → 302 直链 / API| 路径 | 作用 |
|---|---|
src/ | 后端业务(Hono 路由、Manage、驱动) |
src/eo/entry.ts | EdgeOne 入口:注入 Blob KV、规范化 Request body |
src/eo/blobKv.ts | Blob 模拟 KV |
src/drive/ | 各网盘驱动实现 |
src/route/ | /api/*、/d、/sd、分享等路由模块 |
pages/ | React 前端源码 |
scripts/build-backend.mjs | esbuild 打包后端 → cloud-functions/[[default]].js |
cloud-functions/ | 构建产物(勿手改,已 gitignore) |
public/ | 前端构建产物(勿手改,已 gitignore) |
middleware.js | SPA rewrite / API 透传(必须保留在仓库根目录) |
.cnb.yml | CNB:main push 后构建并部署 |
.env / .env.example | 本地环境变量模板 |
docs/ | 架构/功能设计资料(可能超前于实现) |
1npm run install:all
2 │
3 ├─ 根目录依赖 + prisma generate
4 └─ pages/ 前端依赖
5
6npm run build
7 │
8 ├─ build:backend → esbuild src/eo/entry.ts
9 │ → cloud-functions/[[default]].js
10 └─ build:frontend → vite build
11 → public/(静态资源)
12
13edgeone makers deploy
14 │
15 └─ 上传静态层 + Cloud Functions + middleware/api/*。middleware.js 区分静态、SPA、API。MountManage / FilesManage / ShareManage / UsersManage 等。BasicDriver + 各网盘 files.ts / utils.ts。| 项 | Cloudflare Worker | 本仓库 EdgeOne |
|---|---|---|
| 运行时 | Workers | Node Cloud Functions |
| KV | CF KV | EdgeOne Blob |
| D1 | CF D1 | 默认关;可切远程库 |
| 静态资源 | Workers Assets | Makers 静态 + middleware |
| 部署 | wrangler | edgeone makers deploy |
| 配置文件 | wrangler.jsonc(遗留参考) | .env + Makers 环境变量 + .cnb.yml |
| 功能 | 说明 |
|---|---|
| 公开分享页 | /s/:sid、/share/:sid,支持子路径深链 |
| 分享下载 | /sd/:sid/... |
| 直链下载/预览 | /d/*(直链)、/p/*(代理,慎用) |
| 媒体浏览 | 图片懒加载缩略图、视频预览等(视驱动能力) |
| 模块 | 路径示例 | 能力 |
|---|---|---|
| 文件管理 | /files | 列表、预览、上传、下载、重命名、移动、复制、删除 |
| 我的文件 | /files/my | 个人空间视图 |
| 媒体库 | /media/video 等 | 视频/音乐/图片/书籍分类浏览 |
| 分享管理 | /user/shares | 创建/停用/删除分享,自定义短链 |
| 任务 | /user/tasks | 异步任务查看 |
| 离线下载 | /user/offline-download | 视驱动支持 |
| 云复制/移动/解压 | /user/cloud-* | 同盘或跨盘操作(能力因驱动而异) |
| 账号 | /user/profile 等 | 资料、改密、连接配置 |
| 模块 | 路径示例 | 能力 |
|---|---|---|
| 挂载管理 | /admin/mounts | 添加/编辑网盘挂载点 |
| 用户 / 分组 | /admin/users、/admin/groups | 账号与权限分组 |
| OAuth | /admin/auth | 第三方登录相关配置 |
| 站点 / 外观 | /admin/site-settings、/admin/appearance | 站点级设置 |
| 分享策略 | /admin/share-settings | 分享全局选项 |
| 媒体库管理 | /admin/media | 扫描路径、刮削(需 TMDB_API_KEY 等) |
| 备份恢复 | /admin/backup | 备份相关入口 |
| 前缀 | 用途 |
|---|---|
/api/auth/* | 登录、登出、2FA 等 |
/api/fs/* | 文件列表/读写/搜索/上传 |
/api/share/* | 分享 CRUD |
/api/task/* | 任务 |
/api/admin/* | 管理接口 |
/api/public/* | 公开设置、媒体公开接口 |
/d/* /p/* | 下载 / 代理 |
/sd/* | 分享下载 |
/dav/* | WebDAV(软认证) |
/@setup/* | 首次初始化 |
/ping | 健康检查 |
| 依赖 | 版本要求 | 说明 |
|---|---|---|
| Node.js | ≥ 18(建议 20) | 与 CNB 镜像 node:20 对齐 |
| npm | 随 Node 自带即可 | 用于 install:all |
| EdgeOne CLI | ≥ 1.6.0 | 低版本在 CI/无头环境易挂起 |
| Git | 任意近年版本 | 推送触发流水线 |
| 账号 | 腾讯云 EdgeOne(中国站或国际站) | 部署目标 |
Windows(PowerShell)与 Linux/macOS(Bash)均可;下文同时给出常见命令。
1git clone https://cnb.cool/onedayxyy/openlisteo.git
2cd openlisteo若使用本机已有目录(例如 d:\openlist-eo),直接进入即可。
1npm i -g edgeone
2edgeone -v
3# 确认 ≥ 1.6.0;过低请重装| 名称 | 用途 | 获取 |
|---|---|---|
JWT_SECRET | 登录鉴权(必填,建议 ≥16 位随机串) | 自行生成,如 openssl rand -hex 32 |
| EdgeOne 登录 | 本地 edgeone login 或 API Token | 控制台 / CLI |
EDGEONE_API_TOKEN | CNB 无人值守部署 | EdgeOne Pages 设置页 |
钉钉 SECRET / WEBHOOK | 流水线结束通知(可选) | 钉钉机器人 |
1# 根目录 + pages 前端一并安装
2npm run install:all该命令等价于:
1npm install
2npm install --prefix pages根目录 postinstall 会执行 prisma generate(远程库场景需要)。
.env1# Windows
2copy .env.example .env
3
4# Linux / macOS
5cp .env.example .env编辑 .env(示例):
1JWT_SECRET=请替换为足够长的随机字符串
2ENABLE_D1=false
3REMOTE_D1=
4BLOB_STORE=openlist-meta-v4
5TMDB_API_KEY=| 变量 | 必填 | 说明 |
|---|---|---|
JWT_SECRET | 是 | 未配置时登录会失败(如 503 JWT_SECRET_NOT_CONFIGURED) |
ENABLE_D1 | 否 | 默认 false:用 Blob KV |
REMOTE_D1 | 条件 | ENABLE_D1=true 时填写 mysql://... / postgres://... 等 |
BLOB_STORE | 否 | Blob 命名空间;换名相当于换一套元数据空间 |
TMDB_API_KEY | 否 | 媒体刮削 |
.env已在.gitignore中,不要提交到仓库。
先确认 CLI 环境变量(Skill / 推荐习惯):
1# Windows PowerShell
2$env:PAGES_SOURCE="skills"
3
4# Bash
5export PAGES_SOURCE=skills登录(二选一站点,不要猜):
1edgeone login --site china
2# 或
3edgeone login --site global无头/CI 环境可用 Token:
1edgeone login --token "你的_EDGEONE_API_TOKEN"检查登录状态:
1edgeone whoami本地 .env 不会自动变成线上配置,部署前请写入 Makers 环境变量:
1# PowerShell 示例
2$env:PAGES_SOURCE="skills"
3edgeone makers env set JWT_SECRET "你的密钥"
4edgeone makers env set ENABLE_D1 "false"
5edgeone makers env set BLOB_STORE "openlist-meta-v4"
6# 可选
7# edgeone makers env set TMDB_API_KEY "xxxx"
8# edgeone makers env set REMOTE_D1 "mysql://user:pass@host:3306/db"也可在腾讯云控制台对应项目的环境变量页手动配置,效果相同。
1# 方式 A:一键(先编后端再起 makers 网关)
2npm run dev
3
4# 方式 B:分步
5npm run build
6$env:PAGES_SOURCE="skills" # Bash: export PAGES_SOURCE=skills
7edgeone makers dev浏览器打开本地地址(通常为):
1http://127.0.0.1:8088/说明:
edgeone makers dev,以便 Blob / 函数行为贴近线上;npm run build:backend(或完整 build);pages 下按 Vite 习惯热更新(以实际 makers 代理行为为准)。1# PowerShell
2$env:PAGES_SOURCE="skills"
3npm run deploy
4
5# 或预发环境
6npm run deploy:previewnpm run deploy 内部流程:
npm run build(后端 + 前端)edgeone makers deploy部署成功后,CLI 会输出访问 URL。若 URL 带 ?eo_token=...&eo_time=...:
whoami/部署输出获取。控制台入口(示例形态):
1https://console.cloud.tencent.com/edgeone/pages在项目列表中找到 openlist-eo(或你部署时指定的名称)查看域名、日志、环境变量。
1npm run build检查产物:
cloud-functions/[[default]].js 存在public/ 下有 index.html 与静态资源middleware.jsCNB 与本地默认项目名为 openlist-eo。若要新建站点:
1$env:PAGES_SOURCE="skills"
2npx --yes edgeone@latest makers deploy -n 你的项目名 --json首次会创建项目;之后同名即更新。
| 动作 | PowerShell | Bash |
|---|---|---|
| 设 PAGES_SOURCE | $env:PAGES_SOURCE="skills" | export PAGES_SOURCE=skills |
| 复制 env | copy .env.example .env | cp .env.example .env |
| 部署 | npm run deploy | npm run deploy |
/@setup/*)。若沿用演示初始账号,请立刻改密:
admin)/admin/mounts)。/s/<短链或UUID>,验证:1GET /ping
2GET /api/system/health # 若已启用函数正常时应返回成功响应;若 5xx,优先查 JWT_SECRET、Blob、构建产物是否缺失。
仓库根目录 .cnb.yml 已配置:
mainpushbuild-and-deploy推送到 main 后自动:安装依赖 → 构建 → EdgeOne 部署 → 统计耗时 → 钉钉通知。
| 阶段 | 做什么 |
|---|---|
| set env | 记录开始时间戳 |
| install-and-build | npm run install:all + npm run build(镜像 node:20) |
| deploy-edgeone | npx edgeone@latest makers deploy -n openlist-eo -t $EDGEONE_API_TOKEN --json |
| 计算耗时 | 导出 CUSTOM_ENV_BUILD_TIME |
| 钉钉通知 | 发送「构建部署完成,耗时 …」 |
密钥通过 imports 注入:
1imports:
2 - https://cnb.cool/onedayxyy/secret/-/blob/main/envs.yml密钥仓库至少应包含:
| 变量 | 用途 |
|---|---|
EDGEONE_API_TOKEN | 部署鉴权;缺失则跳过部署(构建仍会完成) |
SECRET | 钉钉加签 |
WEBHOOK | 钉钉机器人地址 |
1本地改代码 → git add/commit → git push origin main
2 → CNB 自动构建部署 → 钉钉通知 → 浏览器验证本地 npm run deploy | CNB push main | |
|---|---|---|
| 速度 | 通常更快(本机构建) | 依赖 Runner 排队 |
| 一致性 | 依赖本机 Node/CLI | 固定 node:20 |
| 审计 | 弱 | 有构建记录 |
| 适用 | 联调、热修 | 正式发布 |
建议:联调用本地;合并到 main 的正式版本走 CNB,避免「只本地上了线、仓库代码未推送」。
build-and-deploy 是否成功。/ping。| 现象 | 可能原因 | 处理 |
|---|---|---|
| 打开站点 401 | 预览 URL 截断了 eo_token | 使用完整 URL;或绑定自定义域名后按控制台指引访问 |
| 503 / 无法登录 | 未配置 JWT_SECRET | edgeone makers env set JWT_SECRET ... 后重新访问 |
| Blob / KV 报错 | 未走 makers 运行时;或 BLOB_STORE 异常 | 用 edgeone makers dev / 确认线上函数环境 |
| 分享页刷新 404 | 缺少 middleware.js 或未部署最新 | 确认根目录 middleware 已随项目部署 |
| 预览卡、流量暴涨 | 驱动开了代理中转 | 改为 302 |
| 视频无法播 | 直链失效、Referer/Cookie、路径 UUID 缺失 | 查驱动 downFile、网络 302 目标 |
| CNB 只构建不部署 | 无 EDGEONE_API_TOKEN | 写入密钥仓库 envs.yml |
本地一堆 deploy*.log / *.cookie | 调试残留 | 可删;已在 .gitignore |
本地调试可能产生(均已忽略提交):
deploy*.log、npm-*.log*.cookie、curl-*、create-*.json、live-*定期清理根目录残留,保持仓库干净。
git revert / 回退到已知好的 commit 并 push main,让 CNB 重新部署;或npm run deploy(紧急)。元数据在 Blob / 远程库中,代码回滚不会自动清空挂载与分享配置;更换 BLOB_STORE 相当于换空库,慎用。
JWT_SECRET 使用高熵随机串,且勿提交 Git。EDGEONE_API_TOKEN、钉钉 Webhook 只放密钥仓库。api、admin、assets 等)。| 方向 | 做法 |
|---|---|
| 持久化升级 | ENABLE_D1=true + REMOTE_D1 接入托管 MySQL/Postgres,便于备份与复杂查询 |
| 新媒体能力 | 配置 TMDB_API_KEY,完善媒体库扫描/刮削 |
| 更多驱动 | 在 src/drive/ 按现有模板实现,并注册到 DriveSelect.ts |
| 自定义域名 | EdgeOne 控制台绑定域名,减少对 eo_token 预览链的依赖 |
| 预发环境 | npm run deploy:preview 或流水线增加 preview 阶段 |
| 通知渠道 | 在 .cnb.yml 增加企微/飞书等插件,逻辑同钉钉阶段 |
| 前端主题/i18n | pages/src/theme、pages/src/i18n 已有基础,可继续产品化 |
src/eo/entry.ts → esbuild 产物,勿直接手改 cloud-functions/。middleware.js 的 PASS_THROUGH(若新路径需进函数)。src/route/index.ts 的 PUBLIC_ROUTE_PREFIXES)。OneOpenlistEo 用 EdgeOne Makers 把 OpenList-Worker 变成「可分享、可 302、可 CI」的无服务器网盘前端:
JWT_SECRET → 登录 EdgeOne → 同步远程环境变量;npm run dev;main 走 CNB;联调可用本地 npm run deploy;按本文第 5–8 章顺序操作,即可从零完成一套可对外访问的生产部署,并具备可持续发版能力。
| 脚本 | 作用 |
|---|---|
npm run install:all | 安装根目录 + pages 依赖 |
npm run build | 构建后端 + 前端 |
npm run build:backend | 仅打包 Cloud Function |
npm run build:frontend | 仅构建 Vite 前端 |
npm run dev | 本地 makers 开发 |
npm run deploy | 构建并部署生产 |
npm run deploy:preview | 构建并部署预发 |
| 路径 | 说明 |
|---|---|
/ | 站点首页(文件/导航) |
/login | 登录 |
/files | 文件管理 |
/s/:sid、/s/:sid/* | 公开分享(含深链) |
/admin/mounts | 挂载管理 |
/user/shares | 我的分享 |
/ping | 存活检查 |
1mysql://<user>:<pass>@<host>:<port>/<db>
2maria://<user>:<pass>@<host>:<port>/<db>
3pgsql://<user>:<pass>@<host>:<port>/<db>
4postgres://<user>:<pass>@<host>:<port>/<db>
5sqlserver://<host>:<port>;database=<db>;username=<u>;password=<p>同时设置:
1ENABLE_D1=true
2REMOTE_D1=<上述连接串>https://cnb.cool/onedayxyy/openlisteohttps://cnb.cool/onedayxyy/secret| 日期 | 说明 |
|---|---|
| 2026.8.14 | 首版:介绍 / 架构 / 功能 / 本地与 CNB 部署 / 扩展总结 |
— End of OneOpenlistEo部署文档-2026.8.14 —
精选 · 友链 · 更多

One的公众号
爱折腾博客的小白