CloudDisk:基于 Cloudflare Workers 的免费个人网盘,无需 VPS、MySQL,支持 R2+D1+KV 一键部署
如果你一直想拥有一个属于自己的网盘,但又不想买 VPS、维护数据库或者折腾复杂环境,那么这个基于 Cloudflare Workers 的开源项目 CloudDisk 值得看看。整个系统运行在 Cloudflare 免费套餐上,文件存储使用 R2,数据库使用 D1,会话数据使用 KV,不需要 MySQL,也不需要服务器。支持多用户登录、文件夹管理、分享链接、在线预览、Office 文档查看、文本在线编辑、大文件断点续传、协作者权限管理等功能。无论是个人备份、开发者存放代码文件、团队共享资料,还是搭建自己的私有网盘,都可以直接部署到 Cloudflare,一键完成,几乎零维护成本,非常适合独立开发者、个人站长和轻量团队使用。

基于 Cloudflare Workers 的轻量级个人网盘,仅面向 Cloudflare 云端部署,免费、无需 VPS、无需 MySQL。
国内用户说明 部署或使用 Cloudflare 时,部分功能(如绑定支付方式、升级套餐、开通特定服务等)可能需要账户关联 Visa 或 Mastercard。若国内银行卡无法完成验证,可参考作者实测的跨境虚拟卡开通方式:虚拟信用卡实测与开卡指南。
功能介绍
CloudDisk 适合个人或小团队,在 Cloudflare 免费套餐内搭建私有网盘:数据存于 R2,元数据在 D1,登录会话在 KV,全程 Serverless。
文件与目录
- 文件夹层级浏览、新建文件夹 / 新建文件(任意后缀,如
.md、.py、.json) - 上传 / 下载 / 删除 / 重命名,支持拖拽上传与上传进度显示
- 大文件(≥ 5MB)分片上传,中断后可续传(重新选择相同文件即可)
协作与权限
- 多用户注册登录,管理员可开关注册、管理用户与用户组
- 为文件或文件夹添加协作者:只读或可编辑
- 协作者搜索用户名自动补全,「与我共享」独立视图
- 用户组可配置上传、分享、协作、管理权限
分享
- 外链分享:可选密码、有效期、下载次数上限
- 支持文件夹分享(浏览子目录、预览、下载)
- 可选直链下载、在线预览、访客在线编辑(视文件类型与分享设置)
预览与编辑
- 在线预览:图片、PDF、音视频、文本、Office 文档(Word / Excel / PPT 等)
- 预览页显示完整链接并支持一键复制
- 文本类文件(≤ 2MB)在线编辑;图片等不可编辑类型不显示编辑入口
- 协作者权限与分享权限一致:只读不可编辑,可编辑才显示编辑按钮
体验与管理
- 全屏预览 / 编辑,操作结果 Toast 提示(成功、失败、API 错误)
- 设置页:修改密码、开放注册、用户 / 用户组管理(管理员)
- 页脚展示 Cloudflare 免费套餐相关限额说明(Workers / D1 / R2 / KV)
已部署用户升级:重新部署后需执行 D1 迁移
npm run db:migrate(或 Cloudflare Builds 部署命令中已包含)。
界面预览
| 登录 / 注册 | 文件列表 |
|---|---|
![]() |
![]() |
| 用户组管理 | 创建分享 |
|---|---|
![]() |
![]() |
技术栈
- Cloudflare Workers + Hono
- Cloudflare D1(元数据)+ R2(文件存储)+ KV(会话)
- Drizzle ORM + TypeScript + Tailwind CSS
一键部署到 Cloudflare
在「Configure resources」步骤确认:D1 =
cloud-disk,KV =cloud-disk,R2 =cloud-disk-files。项目名称 / Worker 名称 /APP_NAME默认留空,请按需自行填写(留空APP_NAME时界面显示CloudDisk)。
若提示「已存在具有该名称的存储库」 一键部署会在你的 GitHub 账号下新建一个 fork 仓库。本项目不再预填项目名称,请在部署页自行填写 Git 仓库名称(例如
my-cloud-disk)。若你已有源码仓库,建议跳过一键按钮,改用 Dashboard 连接已有仓库(见下文)。
若你已有该源码仓库,想直接部署(不 fork) 可跳过一键按钮,在 Cloudflare Dashboard → Workers & Pages → Create → 连接 GitHub 仓库
gsvps/cloud-disk,按wrangler.toml配置资源后部署即可。
点击按钮后,Cloudflare 会读取 wrangler.toml 并自动创建 D1、KV、R2。默认命名如下:
| 资源 | 默认名称 | 说明 |
|---|---|---|
| 项目名称 / Worker 名称 | 留空(需自填) | 不在仓库中预填;部署页由用户指定 |
应用显示名APP_NAME |
留空(可选) | 留空时界面默认显示CloudDisk |
| D1 | cloud-disk |
用户与文件元数据(wrangler.toml 指定) |
| KV | cloud-disk |
登录会话(与 D1 同名,类型不同不冲突) |
| R2 | cloud-disk-files |
上传文件(wrangler.toml 指定) |
部署完成后访问 Workers 域名,首次打开会引导创建管理员账号。
高级设置默认值
点击一键部署后,展开「高级设置」时,以下参数会自动预填,一般无需修改:
| 参数 | 默认值 | 来源 |
|---|---|---|
| 项目名称 / Worker 名称 | 留空 | 由用户在部署页填写 |
应用显示名APP_NAME |
留空 | 可选;未设置时应用内为CloudDisk |
| 构建命令 | npm run build |
package.json → scripts.build |
| 部署命令 | npm run deploy |
package.json → scripts.deploy |
| 预览部署命令 | npx wrangler versions upload |
Cloudflare 平台默认 |
| Node.js 版本 | 22 |
.nvmrc / engines.node |
| 生产分支 | main |
仓库默认分支 |
| D1 数据库 | cloud-disk |
wrangler.toml |
| KV 命名空间 | cloud-disk |
package.json / 部署页默认 |
| R2 存储桶 | cloud-disk-files |
wrangler.toml |
说明:D1、KV、R2 默认名称已在仓库中预填;部署页一般保持默认即可。
高级设置里其他字段要不要管?
| 字段 | 是否需要理会 | 说明 |
|---|---|---|
| 非生产分支部署命令 | 一般不用 | 默认npx wrangler versions upload,仅在你用非 main 分支做预览部署时才需要 |
| 路径(根目录) | 留空即可 | 本项目不是 monorepo,根目录就是仓库根 |
| API 令牌 | 一键部署不用填 | 点按钮时 Cloudflare 会引导授权;仅本地wrangler CLI 需要登录 |
| 变量名称 / 变量值 | APP_NAME 可留空 |
无密钥类变量;APP_NAME 留空即可 |
手动部署步骤
1. Fork 并克隆仓库
git clone https://github.com/gsvps/cloud-disk.git
cd cloud-disk
npm install
2. 登录 Cloudflare
npx wrangler login
3. 创建 Cloudflare 资源(可选)
D1、KV、R2 可按需预先创建,或使用部署页自动创建:
npx wrangler d1 create cloud-disk
npx wrangler kv namespace create cloud-disk
npx wrangler r2 bucket create cloud-disk-files
4. 构建并部署
npm run build
npm run db:migrate
npx wrangler deploy --name cloud-disk
仓库未预填 Worker 名称时,本地部署需通过
--name指定(名称需与 Cloudflare Dashboard 中 Worker 一致)。
该命令会依次:构建 CSS → 执行 D1 远程迁移 → 部署 Worker。
API 规范
所有接口返回统一 JSON 格式:
{ "success": true, "data": {} }
{ "success": false, "error": { "code": "BAD_REQUEST", "message": "..." } }
主要接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/health |
健康检查 |
| GET | /api/auth/setup-status |
是否需要初始化 |
| POST | /api/auth/setup |
首次创建管理员 |
| POST | /api/auth/login |
登录 |
| POST | /api/auth/register |
注册新用户 |
| POST | /api/auth/logout |
退出 |
| GET | /api/user/me |
当前用户 |
| GET | /api/user/search?q= |
搜索用户(协作) |
| GET | `/api/files?scope=mine | shared` |
| GET | /api/files/:id/preview |
在线预览 |
| GET | /api/files/:id/content |
读取文本内容 |
| PUT | /api/files/:id/content |
保存文本内容 |
| POST | /api/files/:id/collaborators |
添加协作者 |
| GET | /api/shares |
我的分享列表 |
| POST | /api/shares |
创建分享链接 |
| GET | /api/share/:token |
分享页信息(公开) |
| GET | /api/share/:token/download |
分享下载(公开) |
| POST | /api/files/folders |
创建文件夹 |
| POST | /api/files/upload |
上传文件 |
| GET | /api/files/:id/download |
下载文件 |
| PATCH | /api/files/:id |
重命名/移动 |
| DELETE | /api/files/:id |
删除 |
目录结构
cloud-disk/
├── src/
│ ├── index.ts # 入口
│ ├── db/ # Drizzle schema
│ ├── routes/ # API 路由
│ ├── middleware/ # 认证中间件
│ └── lib/ # 工具函数
├── public/ # 前端静态资源
├── migrations/ # D1 迁移
└── wrangler.toml
CloudDisk 常见问题(FAQ)
CloudDisk 是什么?
CloudDisk 是一个基于 Cloudflare Workers 的开源个人网盘项目,文件存储使用 Cloudflare R2,对象元数据使用 D1 数据库,会话信息使用 KV 存储。整个系统运行在 Cloudflare Serverless 平台上,无需 VPS、无需 MySQL,支持免费部署。
CloudDisk 需要购买 VPS 或服务器吗?
不需要。
CloudDisk 完全基于 Cloudflare Workers 运行,文件保存在 R2,对象信息保存在 D1,登录状态存储在 KV,整个系统无需购买 VPS,也不需要维护服务器。
CloudDisk 可以免费使用吗?
可以。
普通个人用户可以直接使用 Cloudflare 免费套餐部署 CloudDisk,在免费额度内满足日常文件存储、备份和分享需求。
实际使用限制以 Cloudflare 官方最新免费套餐规则为准。
CloudDisk 使用哪些 Cloudflare 服务?
CloudDisk 主要依赖以下服务:
- Cloudflare Workers:应用运行环境
- Cloudflare R2:文件存储
- Cloudflare D1:数据库
- Cloudflare KV:登录会话存储
整个系统采用 Serverless 架构,无需传统数据库和服务器。
CloudDisk 支持多用户吗?
支持。
用户可以注册账号、登录系统,管理员可以开启或关闭注册功能,还可以管理用户和用户组,实现多人共同使用同一个网盘。
CloudDisk 支持团队协作吗?
支持。
CloudDisk 支持:
- 文件协作者
- 文件夹协作者
- 用户组权限
- 只读权限
- 编辑权限
- 与我共享视图
适合个人、小团队或开发者共享文件。
CloudDisk 支持文件分享吗?
支持。
用户可以生成分享链接,并设置:
- 分享密码
- 有效期
- 下载次数限制
- 文件夹分享
- 公开下载
- 在线预览
满足文件分发和资料共享需求。
CloudDisk 支持文件夹分享吗?
支持。
分享文件夹后,访问者可以浏览子目录、在线预览文件以及下载文件,体验类似传统网盘。
CloudDisk 支持大文件上传吗?
支持。
对于大于 5MB 的文件,CloudDisk 会自动采用分片上传方式。
如果上传过程中断,重新选择同一个文件即可继续上传,无需重新开始。
CloudDisk 支持断点续传吗?
支持。
大文件采用分片上传机制,网络中断后重新选择相同文件即可恢复上传。
CloudDisk 支持在线预览哪些文件?
支持多种文件在线预览,包括:
- 图片
- 视频
- 音频
- TXT 文本
- Markdown 文件
- Word 文档
- Excel 表格
- PowerPoint 文件
具体预览效果取决于文件类型。
CloudDisk 支持在线编辑文件吗?
支持。
2MB 以下的文本文件支持在线编辑,例如:
- TXT
- Markdown
- JSON
- Python
- JavaScript
- TypeScript
图片、视频等二进制文件不支持编辑。
CloudDisk 支持 Office 文档预览吗?
支持。
用户可以在线查看:
- Word(DOC、DOCX)
- Excel(XLS、XLSX)
- PowerPoint(PPT、PPTX)
无需下载到本地即可浏览内容。
CloudDisk 支持哪些文件类型?
CloudDisk 支持任意后缀文件上传,例如:
- .txt
- .md
- .json
- .js
- .ts
- .py
- .zip
- .mp4
- .jpg
没有固定文件格式限制。
CloudDisk 是否支持拖拽上传?
支持。
用户可以直接拖拽文件上传,同时支持上传进度显示。
CloudDisk 是否支持权限控制?
支持。
管理员可以配置:
- 用户组权限
- 上传权限
- 分享权限
- 协作权限
- 用户管理权限
不同用户可以拥有不同操作权限。
CloudDisk 是否支持访客访问?
支持。
创建分享链接后,访客无需登录即可访问分享内容。
可以根据需要设置密码、有效时间以及下载次数限制。
CloudDisk 支持在线编辑共享文件吗?
支持。
当分享设置允许编辑时,访客或协作者可以在线编辑文件。
如果权限设置为只读,则不会显示编辑按钮。
CloudDisk 如何部署到 Cloudflare?
有两种方式:
一键部署
通过 Deploy to Cloudflare 按钮自动创建:
- Workers
- D1 数据库
- KV 命名空间
- R2 存储桶
部署完成后即可使用。
CloudDisk 是否需要 MySQL 数据库?
不需要。
CloudDisk 使用 Cloudflare D1 数据库保存文件和用户信息,不依赖 MySQL、MariaDB 或 PostgreSQL。
CloudDisk 使用什么技术栈?
CloudDisk 基于:
- Cloudflare Workers
- Hono
- TypeScript
- Drizzle ORM
- Tailwind CSS
- Cloudflare R2
- Cloudflare D1
- Cloudflare KV
属于纯 Serverless 架构。
CloudDisk 适合哪些人使用?
适合:
- 独立开发者
- 个人站长
- 小团队
- 自媒体创作者
- 技术爱好者
- NAS 用户
- 个人文件备份用户
- Cloudflare 开发者
CloudDisk 和 Nextcloud 有什么区别?
CloudDisk 更轻量。
| 对比项目 | CloudDisk | Nextcloud |
|---|---|---|
| VPS | 不需要 | 需要 |
| MySQL | 不需要 | 需要 |
| Docker | 不需要 | 推荐 |
| 部署难度 | 简单 | 较复杂 |
| 运行环境 | Cloudflare Workers | Linux 服务器 |
| 维护成本 | 极低 | 较高 |
| 适合个人使用 | ✔ | ✔ |
| 免费部署 | ✔ | ✘ |
CloudDisk 是否开源?
是。
CloudDisk 是一个开源项目,开发者可以自行 Fork、修改和部署,也可以基于项目进行二次开发,构建属于自己的私人网盘系统。
CloudDisk 适合作为私人云盘吗?
非常适合。
对于个人用户、开发者和小团队来说,CloudDisk 可以作为 Google Drive、Dropbox、OneDrive 等云盘的轻量替代方案,实现低成本、可控、可自托管的私有网盘。






