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

来自@One,one是小白,让Cursor写的。🤣
文档更新日期:2026-08-08
本地私有仓库:
D:\oneyp,(远程:https://cnb.cool/onedayxyy/oneyp)本地公开仓库:
/d/我的开源项目/oneypp,远程开源库:https://cnb.cool/onedayxyy/oneypp线上环境以你当前 EdgeOne / 七牛实际配置为准;本文不包含任何真实密钥。密钥只放在 EdgeOne 控制台、本地
.env或 CNB Secret 中。
文档怎么分工(互链)
| 文档 | 用途 |
|---|---|
README.md | 项目速览、特性、本地开发入口、目录结构 |
DEPLOY.md | 上线前简版勾选清单(七牛 / Pages / CNB / 冒烟) |
本文 OneYp部署文档-2026-08-08.md | 完整说明:简介、优势、功能、分步部署、限制、FAQ |
建议:日常对照勾选用 DEPLOY.md;首次部署或排障读本文;功能与仓库概览看 README.md。
OneYP(OneYp)是一款面向个人 / 小团队的可分享云盘:管理员在后台管理目录与文件,通过链接把目录或单个文件分享给访客;访客在独立门户浏览与预览,无需注册。
技术路线与 OneImg 同构:(OneImg开源库:https://cnb.cool/onedayxyy/oneimgpublic)
| 层级 | 技术 |
|---|---|
| 边缘计算 / API | 腾讯云 EdgeOne Pages Functions |
| 元数据 | EdgeOne KV(绑定名 ADMIN_KV) |
| 文件实体 | 对象存储(七牛 Kodo,或 S3 兼容:阿里云 OSS / 腾讯云 COS / MinIO 等) |
| 前端 | 静态 SPA(管理端 public/admin、分享端 public/share) |
| CI/CD | CNB 推送 master → edgeone makers deploy |
| 鉴权 | JWT(HS256)+ HttpOnly Cookie;分享可选密码 + 限流 |
定位:轻量、可自托管配置、双域名分流(管理 / 分享),适合个人网盘、作品集分享、临时文件分发等场景。
边缘部署、运维成本低
无自建 Node 服务与数据库;Pages Functions + KV + 对象存储即可上线。
双域名清晰隔离oneypa.* 管后台,oneyp.* 走分享门户,同一 Pages 项目、同一套代码,按 Host 分流。
多存储可切换
后台「设置」图形化配置七牛或 S3 兼容;同一时间只启用一套,冷启动可用环境变量 QINIU_* 兜底。
大文件友好
≤20MB 可走 Function 上传;更大文件优先浏览器直传对象存储(七牛表单 / S3 预签名 PUT),减轻边缘函数体积与超时压力。
私有桶也能预览 🟢🟢🟢
媒体默认经同源 /api/.../media 代理(支持 Range),CDN 未绑好或私有桶时仍可预览。
分享可控
可选密码、过期时间、自定义 slug;密码错误有递增限流,降低爆破风险。
自动化发布
CNB 流水线写版本戳、部署 EdgeOne,可选钉钉通知;提交命中监控路径才触发,避免无效构建。
本地可完整调试scripts/local-server.mjs 模拟 Functions + 内存 KV,便于改 API / 前端而不必每次上线。
oneypa)| 能力 | 说明 |
|---|---|
| 登录 | ADMIN_PASSWORD;JWT Cookie admin_token |
| 目录浏览 | 对象键前缀(默认 drive/);列表 / 网格;主题浅色 / 深色 |
| 上传 | 拖拽上传;大文件直传;失败时有 CORS / 大小相关提示 |
| 新建目录 | 写入文件夹标记对象 .keep |
| 删除 | 文件或整目录(递归列举后删除) |
| 文件夹排序 | 拖拽排序,写入 KV folder-order:* |
| 分享 | 对当前目录或文件:密码、过期小时、自定义 id/slug;列表 / 复制链接 / 撤销 |
| 存储设置 | 添加 / 编辑 / 删除 / 测试 / 启用七牛或 S3 |
| 系统诊断 | 拉取 /api/setup/status(JWT、密码、KV、存储、域名绑定等) |
| 预览 | 图片 / 视频 / 音频 / PDF / 文本 / Markdown(其它类型可下载) |
oneyp)| 能力 | 说明 |
|---|---|
| 门户首页 | 提示使用 /s/{id} 链接进入 |
| 分享页 | /s/{id};密码门禁;仅可浏览分享子树 |
| 布局 | 列表 / 网格;懒加载目录统计与封面 |
| 预览 | 与管理端同类;尊重分享记录中的下载策略字段 |
| 无上传 | 访客只读 |
GET /api/health — 存活与版本GET /api/version — 版本字符串GET /api/setup/status — 部署就绪诊断(无需登录即可看大体状态;敏感细节以控制台与设置页为准)_oneyp_test_/ping-*.txt 1浏览器
2 ├─ oneypa.onedayxyy.cn → 管理后台(登录 / 文件 / 分享 / 存储设置)
3 └─ oneyp.onedayxyy.cn → 访客分享门户 /s/{id}
4
5EdgeOne Pages 项目「oneyp」
6 ├─ Functions
7 │ ├─ functions/index.js GET /(按 Host 分流登录页 / 门户)
8 │ └─ functions/[[default]].js API + SPA 回落
9 ├─ 静态资源 public/(outputDirectory)
10 └─ KV:ADMIN_KV
11 ├─ share:* / share_index 分享记录(索引最多约 500 条)
12 ├─ folder-order:* 目录排序
13 ├─ ratelimit:* 登录 / 分享密码限流
14 └─ storage:config 多存储配置(后台「设置」写入)
15
16对象存储(同一时间只启用一套)
17 ├─ 七牛 Kodo(冷启动可用 QINIU_*;支持 vframe 视频封面)
18 └─ 或 S3 兼容(OSS / COS / MinIO 等;视频封面多为占位)域名分流规则(functions/index.js):
| Host 特征 | 行为 |
|---|---|
含 oneypa(如 oneypa.onedayxyy.cn) | 管理端登录页 / 后台 |
以 oneyp. 开头且非 oneypa(如 oneyp.onedayxyy.cn) | 公开分享门户首页 |
localhost / 127.0.0.1 / *.pages.dev | 默认管理端 |
| 其它未匹配 | 默认管理端 |
请求大致路径:
1GET / → 登录页或分享门户首页(按 Host)
2* /api/* → Functions API
3* /admin/* → public/admin/index.html
4* /s/* 、 /share/* → public/share/index.html
5静态 /js 、 /css 等 → public/| 项目 | 值 |
|---|---|
| CNB 仓库 | https://cnb.cool/onedayxyy/oneyp |
| EdgeOne Pages 项目名 | oneyp(见 edgeone.json / .cnb.yml) |
| KV 绑定名 | ADMIN_KV(必须与代码一致) |
| 管理域 | https://oneypa.onedayxyy.cn |
| 分享域 | https://oneyp.onedayxyy.cn |
| 七牛媒体域(示例) | oneypqn.onedayxyy.cn(须与桶「域名管理」已绑定域名一致) |
| 分享链接公网源 | SHARE_PUBLIC_ORIGIN=https://oneyp.onedayxyy.cn |
| CI 密钥仓库 | https://cnb.cool/onedayxyy/secret → envs.yml(需对本仓库授权) |
| 输出目录 | public |
| 应用版本 | public/version.json / functions/lib/version.js(部署时由 scripts/write-version.mjs 写入) |
开源脱敏副本本地路径(若有):D:\我的开源项目\oneypp(不含 .env 与私有域名硬编码)。
相关文档:README.md(速览)· DEPLOY.md(简版勾选,与本文 附录 C 同步)· 本文(详解)。
按顺序确认:
oneypa.xxxoneyp.xxxEDGEONE_PAGES_API_TOKEN(或 EDGEONE_API_TOKEN),且对本仓库 imports 授权SECRET / WEBHOOK,用于部署完成通知建议按 A → B → C → D → E → F 顺序完成。首次上线约 30–60 分钟(含域名生效时间)。
https://cnb.cool/onedayxyy/oneypCREATE_CNB_REPO.md:1cd /d/oneyp
2git remote add origin https://cnb.cool/onedayxyy/oneyp.git
3git push -u origin masterhttps://cnb.cool/onedayxyy/secret/-/blob/main/envs.ymlEDGEONE_PAGES_API_TOKEN(或兼容名 EDGEONE_API_TOKEN)SECRET、WEBHOOKonedayxyy/oneyp 授权可读(否则 .cnb.yml 的 imports 拿不到 Token,部署阶段会直接失败并打印中文错误提示)。S3 兼容可跳过 B 中七牛特有项,改在上线后用后台「设置」配置(见步骤 F)。冷启动仍建议至少能让管理端登录,再在 UI 里配存储。
创建 / 选择桶
oneeoyp);也可用现有桶 + 对象前缀 drive/访问控制
QINIU_PRIVATE=true/api/.../media 代理;域名签名能力仍建议打开,避免个别直链场景失败。)绑定媒体域名
oneypqn.onedayxyy.cn)QINIU_DOMAIN 时必须是该列表里已绑定的域名oneypcdn.onedayxyy.cn 未绑定时)→ 七牛返回 no such domain,预览裂图/api/setup/status 的 bucketDomains / domainBound 核对配置域名是否真在桶上配置 CORS(浏览器直传必需)
| 项 | 建议值 |
|---|---|
| 允许源 | https://oneypa.onedayxyy.cn、本地 http://127.0.0.1:8090 等 |
| Method | 至少 GET / POST / PUT / HEAD / OPTIONS |
| Header | * |
| 视情况 | 分享域若需浏览器直连存储,也一并加入 |
拿到密钥
QINIU_AKQINIU_SKstorage:config)S3 兼容补充要点(阿里云 OSS / 腾讯云 COS / MinIO 等):
PUT)vframe:视频封面多为占位图oneyp(与 edgeone.json 的 name、.cnb.yml 中 -n oneyp 一致)。ADMIN_KV(大小写一致)| 变量 | 必填 | 说明 |
|---|---|---|
ADMIN_PASSWORD | 是 | 管理后台登录密码(生产请用强密码) |
JWT_SECRET | 是 | JWT 签名密钥,可用 openssl rand -base64 32 生成 |
SHARE_PUBLIC_ORIGIN | 是 | 生成分享链接用的公网源,如 https://oneyp.onedayxyy.cn |
QINIU_AK / QINIU_SK | 可选 | 冷启动;后台保存 storage:config 后以 KV 为准 |
QINIU_BUCKET | 可选 | 如 oneeoyp |
QINIU_DOMAIN | 可选 | 已绑定媒体域名 |
QINIU_REGION | 可选 | 默认 z0 |
QINIU_PATH_PREFIX | 可选 | 默认 drive |
QINIU_PRIVATE | 可选 | 默认 true |
完整变量见 第 13 节。本地模板见 .env.example。
oneyp):oneypa.onedayxyy.cn → 管理oneyp.onedayxyy.cn → 分享public(仓库内 edgeone.json 已写 outputDirectory: "public")。部署前在本地确认以下文件存在且内容合理:
| 文件 | 作用 |
|---|---|
edgeone.json | 项目名、KV 绑定、缓存头、outputDirectory |
.cnb.yml | push master 触发流水线 |
functions/[[default]].js | 全部 API |
functions/index.js | 根路径 Host 分流 |
public/admin/index.html | 管理 SPA |
public/share/index.html | 分享 SPA |
scripts/write-version.mjs | CI 写版本戳 |
.cnb.yml 触发条件(ifModify):仅当以下路径有变更时才部署:
functions/**public/**scripts/**edgeone.json.cnb.yml流水线实质步骤:
node scripts/write-version.mjs → 写入 public/version.json 与 functions/lib/version.jsnpm install -g edgeone@${EDGEONE_CLI_VERSION}(默认版本 1)edgeone makers deploy . -n oneyp -t "$TOKEN"1cd /d/oneyp
2# 确认改动会命中 ifModify 路径,否则不会部署
3git status
4git add -A
5git commit -m "feat: 你的中文说明"
6git push origin master提交信息约定:中文描述 + 保留 feat / fix / chore 等前缀(见 .cursor/rules/commit-messages.mdc),例如:feat: 完善部署文档与冒烟清单。
部署后自检:
edgeone makers deploy 成功https://oneypa.onedayxyy.cn — 应出现登录页https://oneyp.onedayxyy.cn — 应出现分享门户提示页https://oneypa.onedayxyy.cn/api/health、/api/setup/status 查看 JSON 就绪字段若未触发部署:检查 push 是否改到监控路径;检查 Secret imports;检查分支是否为 master。
https://oneypa.onedayxyy.cn,使用 ADMIN_PASSWORD 登录。/api/setup/status)jwt / password / kv 为就绪;storage.ready 为 true;七牛场景下 domainBound 尽量为 true。/s/{id}。S3 在后台填写的字段对照:
| 字段 | 说明 |
|---|---|
| AccessKey / SecretKey | 密钥;编辑时 Secret 留空表示不修改 |
| Bucket | 桶名 |
| Endpoint | 如 https://oss-cn-hangzhou.aliyuncs.com 或 MinIO 地址 |
| Region | 如 cn-hangzhou / us-east-1 |
| Path-Style | MinIO 建议勾选 |
| 公有访问域名 | 可选 |
| 对象键前缀 | 默认 drive |
注意:同一时间只启用一套;切换存储不会自动迁移旧文件。
1cd /d/oneyp
2cp .env.example .env
3# 编辑 .env:填入 ADMIN_PASSWORD、JWT_SECRET,以及可选 QINIU_*
4node scripts/local-server.mjs| 地址 | 用途 |
|---|---|
| http://127.0.0.1:8090/ | 管理端(默认) |
| http://127.0.0.1:8090/admin/ | 管理 SPA |
| http://127.0.0.1:8090/s/{id} | 分享页 |
可选本地变量:PORT(默认 8090)、HOST(默认 127.0.0.1)。
说明:
http://127.0.0.1:8090。打开管理域,输入 ADMIN_PASSWORD。登录失败次数过多会触发递增锁定(依赖 KV):约 6 / 9 / 12 / … 次失败后锁定 1 分钟 → 3 分钟 → … → 最长约 24 小时。
密钥在接口响应中脱敏;编辑时 Secret 留空表示不修改。
/s/oneblog)部署或大改后建议逐项勾选:
oneypa 可打开登录页并成功登录/api/health 返回 service: oneyp 与版本号kv 就绪;storage.ready 为 trueQINIU_DOMAIN / 配置域名在 bucketDomains 中,domainBound 为真https://oneyp.onedayxyy.cn/s/{id} 可打开以下为当前版本已知限制与待办,部署与排障时请知情预期:
| 类别 | 说明 |
|---|---|
| 存储切换不迁数据 | 只启用一套后端;切换后「看不见」旧文件是预期行为,切回原存储即可 |
| Function 上传上限 | 经 Function 的 multipart 上传约 ≤20MB;更大文件必须直传 |
| S3 无视频截帧 | 无七牛 vframe;海报接口可能 404,前端用占位封面 |
| 分享索引上限 | share_index 最多保留约 500 个分享 id |
| 依赖 KV | 登录限流、分享密码限流、分享元数据、存储配置均依赖 ADMIN_KV;未绑定会 503 或功能异常 |
| 本地非持久 | 本地内存 KV,重启丢分享与后台存储配置 |
| 移动 / 重命名 | 存在 POST /api/drive/move API,管理端 UI 尚未完整暴露 |
| 下载策略字段 | 分享记录支持 canDownload;创建分享 UI 当前默认允许下载,细粒度开关可能不完善 |
| 目录删除上限 | 递归删除有分页上限(多页列举),超大目录需留意超时 / 截断风险 |
| 文本预览截断 | 管理端文本预览约截断到 20 万字符 |
| 目录统计缓存 | 文件夹 inspect 有短缓存(约 120s),刚上传后封面 / 统计可能略延迟 |
| 未做 UI 的能力 | 七牛 HLS / pfop 库函数存在,UI 未接;断点续传体验仍待增强(见 README.md「后续」) |
| 域名未绑定 | QINIU_DOMAIN 填错会导致预览裂图(no such domain) |
| CORS 未配 | 直传失败,浏览器控制台可见跨域错误 |
| 密钥误提交风险 | .env、真实 AK/SK、Pages Token 绝不能进 Git |
no such domainQINIU_DOMAIN(或后台配置的域名)填了未在桶「域名管理」绑定的域名。
oneypcdn.onedayxyy.cn,但桶上实际只绑了 oneypqn.onedayxyy.cn(或尚未完成绑定)→ 七牛返回 no such domain,图片/视频裂图。/api/setup/status 看 bucketDomains / domainBound。绑定域名后仍失败时,检查该域名是否开启私有下载 / 签名访问(与 QINIU_PRIVATE=true 配套)。未开签名时,带 token 的媒体 URL 可能被拒。也可先依赖同源 /api/drive/media 或 /api/s/{id}/media 代理验证文件本身是否可读,再回头修域名侧私有访问。
给对象存储配置 CORS,允许管理域(及本地调试源)。七牛直传多为 POST 表单,S3 直传为 PUT。
Pages 环境变量缺少 JWT_SECRET 或 ADMIN_PASSWORD(或未配置可用的 KV 回退)。改完环境变量后需等待 / 重新部署使边缘生效。
预期行为:文件实体在原桶 / 前缀下,不会自动迁移。切回原存储即可看到。
检查:是否 push 到 master;变更是否落在 ifModify 路径;CNB 是否成功 imports 到 Token;流水线日志是否报「缺少 EDGEONE_PAGES_API_TOKEN」。
确认 Pages 绑定名称恰为 ADMIN_KV。分享创建、存储保存、限流都依赖它。
检查 SHARE_PUBLIC_ORIGIN(或别名 PUBLIC_SHARE_ORIGIN)是否为分享域完整 origin(含 https://,无多余路径)。
确认两个域名都绑到同一项目,且 Host 命名符合分流规则(管理域含 oneypa,分享域为 oneyp. 前缀且不是 oneypa)。
.env.example 对齐)| 变量 | 必填 | 说明 |
|---|---|---|
ADMIN_PASSWORD | 是* | 管理员明文密码 |
JWT_SECRET | 是* | JWT HMAC 密钥 |
SHARE_PUBLIC_ORIGIN | 生产建议必填 | 分享链接公网源 |
QINIU_AK | 可选 | 七牛 AK(冷启动) |
QINIU_SK | 可选 | 七牛 SK |
QINIU_BUCKET | 可选 | 桶名 |
QINIU_DOMAIN | 可选 | 桶已绑定媒体域名 |
QINIU_REGION | 可选 | 默认 z0 |
QINIU_PATH_PREFIX | 可选 | 默认 drive |
QINIU_PRIVATE | 可选 | 默认 true;公有桶可 false |
*也可写入 KV 作为回退:JWT_SECRET、ADMIN_PASSWORD(以及可选 ADMIN_PASSWORD_HASH)。
.env.example 的变量| 变量 | 说明 |
|---|---|
ADMIN_PASSWORD_HASH | 使用 PBKDF2 哈希代替明文密码(env 或 KV) |
PUBLIC_SHARE_ORIGIN | SHARE_PUBLIC_ORIGIN 的别名 |
| 变量 | 默认 | 说明 |
|---|---|---|
PORT | 8090 | 本地端口 |
HOST | 127.0.0.1 | 绑定地址 |
envs.yml)| 变量 | 说明 |
|---|---|
EDGEONE_PAGES_API_TOKEN / EDGEONE_API_TOKEN | EdgeOne 部署 Token |
SECRET / WEBHOOK | 钉钉通知(可选) |
EDGEONE_CLI_VERSION | 流水线内默认 "1" |
CNB_COMMIT / CNB_COMMIT_SHORT | 供版本脚本使用 |
存储解析优先级:KV storage:config 中启用的后端 → 否则环境变量 / KV 中的 QINIU_*(虚拟 id env-qiniu)→ 否则报未配置。
| 路径 | 说明 |
|---|---|
edgeone.json | Pages 项目名、KV 绑定、缓存头 |
.cnb.yml | CNB → EdgeOne 部署流水线 |
.env.example | 环境变量模板(无私密) |
functions/index.js | GET / Host 分流与登录页 |
functions/[[default]].js | 全部 API + SPA 回落 |
functions/lib/storage.js | 多存储门面 |
functions/lib/qiniu.js / s3.js | 存储适配器 |
functions/lib/share.js | 分享元数据(KV) |
functions/lib/auth.js | JWT / 密码 / 限流 |
functions/lib/folder-order.js | 目录排序 |
functions/lib/path.js | 路径安全与 .keep |
public/admin/ | 管理 SPA |
public/share/ | 分享 SPA |
public/js/admin.js / share.js | 前后端交互主逻辑 |
scripts/local-server.mjs | 本地调试服务器 |
scripts/write-version.mjs | 部署版本戳生成 |
DEPLOY.md | 简版部署勾选清单(与本文附录 C 对齐) |
CREATE_CNB_REPO.md | 远程仓库创建说明 |
README.md | 项目速览与特性 |
.env、真实 AK/SK、Pages Token 提交进 GitJWT_SECRET 与足够强度的 ADMIN_PASSWORD(或改用 ADMIN_PASSWORD_HASH){年}.{月}.{日}-{commit前6位}(Asia/Shanghai),由 scripts/write-version.mjs 在 CI 写入public/version.json;Functions 使用 functions/lib/version.js 中的 APP_VERSIONedgeone.json 内 "version": "1.0.0" 为 Pages 项目元数据,不等于应用构建版本master 为准;提交信息使用中文并保留 conventional 前缀| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health | 健康检查 |
| GET | /api/version | 版本 |
| GET | /api/setup/status | 部署诊断 |
| POST | /api/auth/login | 登录 |
| GET/POST | /api/auth/logout | 登出 |
| GET | /api/auth/verify | 会话校验 |
| GET/POST/PUT/DELETE | /api/settings/storage... | 存储配置与测试 / 启用 |
| GET | /api/drive/list | 列目录 |
| POST | /api/drive/upload-token | 直传凭证 |
| POST | /api/drive/upload | Function 上传(≤20MB) |
| POST | /api/drive/mkdir / delete / move | 目录与文件操作 |
| GET | /api/drive/media | 管理端媒体代理 |
| GET/POST/DELETE | /api/shares… | 分享管理 |
| GET/POST | /api/s/{id}… | 公开分享浏览 / 鉴权 / 媒体 |
1Day 0
2 ├─ A. CNB 仓库 + Secret 授权
3 ├─ B. 对象存储桶 + 域名 + CORS
4 ├─ C. EdgeOne Pages + KV + 环境变量 + 双域名
5 ├─ E. push master 自动部署
6 └─ F. 登录 → 启用存储 → 冒烟清单全勾选
7
8日常迭代
9 └─ 改 functions/public/scripts/edgeone.json/.cnb.yml → push master → 看流水线与钉钉DEPLOY.md 对齐的勾选清单与仓库根目录 DEPLOY.md 同结构,便于在完整文档内一次勾完;任一侧变更时请两边同步。
oneeoyp,也可暂用现有桶 + drive/ 前缀)QINIU_PRIVATE=trueoneypqn.onedayxyy.cn)→ QINIU_DOMAINoneypcdn 未绑定时 → no such domain,预览裂图)https://oneypa.onedayxyy.cn、本地调试源;Method 含 GET/POST/PUT 等;Header *oneypADMIN_KV.env.example / 本文第 13 节oneypa.onedayxyy.cn(管理)、oneyp.onedayxyy.cn(分享)SHARE_PUBLIC_ORIGIN=https://oneyp.onedayxyy.cnenvs.yml 对本仓库授权 EDGEONE_PAGES_API_TOKENmaster 触发部署/s/{id} 可预览更细的验收项见本文 第 10 节。项目速览见 README.md。
文档结束。若线上域名、桶名或 Secret 路径有变更,请优先改本文件第 5 节对照表、附录 C 与 DEPLOY.md,避免后人照抄过期值。
精选 · 友链 · 更多

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