一、项目起始

1. 看见别人的云盘,于是搭建了一个 AList

很久很久以前,笔者看到了朋友搭建的 AList(现在已经被卖了,更推荐 OpenList),感觉拥有一个属于自己的云存储非常高端。于是 笔者就在之前买的阿里云轻量应用服务器(2C2G、40G 存储、200M 峰值带宽)上部署了 AList。

最开始笔者的域名是 qiqinb.cn,于是就把它放在了 alist.qiqinb.cn。当时也没折腾什么 CDN、OSS,域名就直接 A 到了服务器 IP。(阿里云的 IP 默认只有 5Gbps 的 DDoS 防护,现在看确实不太够用)

有了 AList 之后,那段时间可谓是天天倒腾它,废寝忘食地研究主题定制、界面 UI 优化这些东西。那段时间非常快乐 出门需要拷文件都不用带 U 盘了 全部存到自己的服务器里。

2. 服务器流量跑多,被限速了!

好景不长。有一次活动 笔者剪了一个大概 700 多 M 的视频文件,直接用自己的 AList 直链分享给身边的人。因为下载的人比较多,把 200Mbps 带宽跑满了好几分钟。

非常遗憾,艹,我的轻量服务器被限速了 。上行/下行只剩 20Mbps,比百度网盘还慢。

从这之后,笔者才意识到 依靠阿里云轻量这种峰值带宽服务器来做网盘是不太现实的(根据我的了解 阿里这个轻量好像是用一台带宽达几G的母鸡开了一些小鸡 给很多个人一起用)。如果真要做,也应该把这台机器作为源站,再套一层 CDN 回源,并设置强缓存,才不至于很快被限速。不过那时候还没玩到这一步......

3. 尝试使用家里云,发现太不稳定

后来,笔者开始了最早的一次尝试:使用之前买的家里云小板板 OrangePi Zero 2W,安装 Ubuntu 并部署 AList

笔者的家庭宽带是中国移动 500M(上行为 100M),其实拿来做网盘差不多够用。但是家宽有一个很严重的问题:它是 NAT 环境,并没有分配给你可用的公网 IP。

解决这个问题有一个很常见的方法,就是 FRP。但是 FRP 需要一台有公网 IP 的服务器,而且如果想跑满家宽的 100M 上行,就意味着这台服务器的上行带宽也至少要大于 100M。继续使用阿里云轻量服务器,仍然会遇到限速问题;其他大带宽服务器,价格也并不便宜。

所以笔者选择了一个野路子:NAT 打洞

当时笔者用了一个叫 Lucky 的工具实现 NAT 打洞,可以获得一个能直接在公网访问的 IP + 端口,但是这个地址并不固定。根据观察,大概几个小时就会变化一次。

当时的思路是:用一台带宽很小的公网服务器做重定向。事实证明这个思路是可行的,笔者用朋友的阿里云 99 计划服务器(2C2G、3M 固定带宽)实现了 MVP。但是最终发现,SLA 太低了,三天两头炸一次,几乎没法正常使用

4. 意识到必须得使用云服务器!

这时笔者意识到,想把云盘正儿八经跑起来,家里云这条路确实有点折磨,还是得用云服务器

但是如果真的买固定带宽,动辄十几元/Mbps/月。想用上 500M,一个月至少要 5k 多块钱,还不算机器本身的成本。

不过其实没必要用固定带宽。云服务器的带宽还有另一种计费方式:提供较大的峰值带宽,并赠送一定的月流量。这种方式的价格就友好很多。

笔者最开始用的是物语云计算(www.wuyuidc.com,非广告 也不是aff,我诚心推荐)。主要原因是他们家的宁波电信云服务器带宽是独享 500Mbps,随时可以跑满,每月赠送 1T 双向流量,2C2G 才 56 元/月。(现在,2026-06-17,物语云暂时好像没卖这个服务器了,可能是国内监管原因吧)

笔者在这台机器上部署了 AList,用起来还比较舒服。

5. 开始准备搞能赚钱的网盘,计划用 Cloudreve,但无法实现

后来笔者看到朋友的网盘是对外开放注册的 而且还能赚钱。当时也打算做一个能卖空间的网盘,虽然那时只是一个很不成熟的想法。

随后笔者就到处找这类网盘程序。具体是怎么找到的已经记不清了,反正最后找到了一个开源程序,叫做 Cloudreve

Cloudreve 的前端是 React + Material UI,后端是 Go,整体做得比较漂亮,也比较完善。笔者在物语云的机器上部署了 Cloudreve,存储直接使用服务器硬盘。但是后来发现,这个程序不能直接拿来赚钱,因为付费功能是商业版才有的(当时是 599 元/1 个域名)。

于是笔者就暂时把它当作自己的个人网盘使用。

为此还特意取了一个很牛逼的名字:CDN 云盘
还注册了一个 .cn 域名:cdnpan.cn。(没用 .com 是因为已经被注册了)

后来用了一段时间,笔者想到一个不购买 Cloudreve 授权,但也能实现付费的方法。当时的思路是:让 Cloudreve 只负责文件管理,其他功能全部自己实现。

也就是说,文件管理页面通过 iframe 嵌入 Cloudreve 页面,而存储容量、CDN 流量的统计与计费全部单独开发。

但是这个方案也有问题。由于 Cloudreve 内部本身就有部分功能依赖 iframe 实现(比如图片预览 lightbox),如果再进行一层 iframe 嵌套,就会导致这部分功能无法正常使用。

6. 看来必须要自己开发一套网盘系统了

后面又折腾了一段时间,笔者发现 123 云盘的 WebDAV 功能,其实是一个用来做网盘的好东西。

笔者开通了一个月 123 云盘 VIP,尝试自己写一个网盘,并且对接 123 云盘。这时候网盘已经初具雏形了。

前端最开始就打算使用 Ant Design Vue,后端使用 Node.js。由于这个版本暂时还没有做公开注册等功能,只是一个用来测试能否正常对接 123 云盘的 MVP 版本,所以没有设计数据库。

这个版本使用 CDN 回源到物语云宁波电信大带宽服务器,再由服务器代理到 123 云盘的 WebDAV 接口。这样基本实现了一个简易的网盘。并且得益于 123 云盘极低的存储价格和免费的流量,这套方案的成本相当低。

7. 计划使用 123 云盘,但不稳定且速度慢

很快,用着用着就发现了问题:由服务器代理文件请求,会占用大量带宽。

事实上,这个问题是可以解决的。WebDAV 鉴权使用的是很基础的 Header 鉴权方式,其实只需要让 CDN 直接回源 123 云盘,并在回源时添加请求头:

Authorization: Bearer ${123云盘那边的应用密码}

这样就可以实现 CDN 直接回源,不再经过我的服务器代理。

但是为什么笔者没有继续使用 123 云盘呢?原因是那段时间 123 云盘刚好开始改革,直接砍掉了 OpenAPI 接口,甚至没有发什么正式通知。同时,几个套餐的存储配额也被直接砍掉一半。这个操作让笔者感觉 123 云盘实在不太靠谱。

另外,它的 WebDAV 接口性能也不太好,一个基础的 List 操作都需要 1.1s 左右。最终,笔者还是放弃了 123 云盘方案

二、是时候上一套商业级架构了

不知不觉,小半年过去了。走到这一步,才算是真正步入正轨。

1. 慢慢步入正轨,寻找方向,确定架构

这段时间,笔者开始疯狂看 Web、CDN、OSS 这些东西。只要有空,就去 B 站刷各种视频,比如蛋老师、鱼皮等等非常优秀的 UP 主。

当然,这还不够。笔者在一个融合 CDN 交流群(哪吒安全 CDN,www.nzcdn.com)结识了许多非常厉害的大佬:

  • @冰儿:前阿里程序员,Kotlin 后端大佬
  • @QiCloud:互联网运维架构大佬
  • @迅客科技:乐帆云核心程序员与领导,互联网全能大佬
  • @梦璃:高中生,但什么都搭建过,易支付、聚合登录、短信、云盘等等,全能大佬
  • @八九不离十:无敌人脉大佬,几乎所有云产品或其他东西都能找到免费/低价渠道,人脉无敌广

那段时间经常和这些大佬交流讨论,确实受益匪浅。

当然,要说 Web 领域最离不开什么,那一定是自己摸索和试错。笔者购买了许多云服务器,也体验了非常多 CDN,比如阿里云 CDN、阿里云 ESA、腾讯云 EdgeOne、百度智能云 CDN、白山云 CDN、金山云 CDN、字节跳动 CDN、华为云 CDN、网宿 CDN Pro、语鹿云盾 CDN、失控的防御系统 CDN 等等。

对象存储方面,笔者也尝试过阿里云 OSS、腾讯云 COS、白山云 OSS、金山云 KS3、百度云 BOS 等等。还有太多其他尝试和试错,浪费的资金不少于 1k,这里就不展开说了。真想了解的话可以加笔者 QQ:2810132369

也就在这之后,笔者个人认为,自己终于有了一个还算比较丰富的互联网知识储备和运维能力。

显而易见,接下来笔者应该给自己的网盘上对象存储 + CDN。

对象存储内行人肯定知道,最出名的一定是阿里云 OSS。笔者花了 118 元买了一个 500GB / 12 月有效期 的存储资源包。(现在看来完全是浪费了......用都没用,快到期了,55555)

随后,笔者使用 AWS SDK 接入了阿里云 OSS,并使用阿里云 ESA 进行回源。

这样当然是(最?)稳定的,但是成本过于高昂。依靠朋友的人脉,笔者搞到了非常便宜且比较稳定的白山云 OSS,存储成本终于降下去一大截。

不过 ESA 的成本依然很高,所以笔者再次依赖人脉,搞到了非常非常白菜价的火山引擎 CDN(也就是字节跳动 CDN)。

2. 随后就是漫长的开发了......

技术栈还是跟之前一样。前端是 Vue + Vue Router,UI 组件库使用 Ant Design Vue;后端是 Node.js + Express,数据库使用 PostgreSQL。

代码仓库放在腾讯云原生构建平台(大力推荐!CNB.cool 真的非常好用,非常丝滑,可以一键打开一个 VS Code 网页,在云端开发)。

Tip:笔者在 CNB 其中之一的组织是 EdgeCOS

感谢冰佬帮忙搭建了一套丝滑好玩的 CI/CD 流程,提交代码后可以自动构建并部署到我的服务器。这给后续开发节省了大量不必要的时间。

写代码其实没什么好说的。这个开发过程可谓是提升了笔者整体 Coding 能力。当然,部分没什么技术含量的代码依旧是 Vibe Coding。

BTW,项目里确实有一小部分简单代码,还有部分前端 UI,是让 GPT-5.5 还有 Gemini 3.1 Pro 写的。主要就是一些重复度比较高、逻辑也不复杂的东西。核心架构、业务逻辑、权限、支付、存储、CDN 这些,还是笔者自己一点点写和调出来的。毕竟 AI 这玩意儿确实很快 很牛逼、但真让它把整个项目从头到尾写出来,那您还是想多了。

3. 不断优化升级,更新功能和架构

这部分就没什么逻辑可讲了。。。

基本就是每天坐在电脑前,看别人的网盘怎么做(其中参考最多的就是 123 云盘,别人做得确实好,没得说),然后再看看自己的网盘还差什么。接着就是写代码、验证、改 bug、验证、改 bug、再验证......

列几个那段时间做的比较大的升级:

  1. 将 OSS 扁平结构升级为 VFS 系统,支持秒传、复制、移动等功能;
  2. 增加工单系统,保障用户反馈能够及时处理;
  3. 接入支付渠道(微信和支付宝),支持项目产生资金收入;
  4. 增加 SMTP 邮件通知功能,确保用户可以及时收到通知;
  5. 增加回收站功能,文件删除后先进入回收站,再支持彻底删除;
  6. 增加基于白山云 OSS 的离线下载功能,丰富用户体验;
  7. 支持非常非常多类型文件的在线预览。

......修改的内容实在太多了,CNB 上代码提交次数都已经 500 次以上了。真的做了非常多功能,目前已经比较完善了。

4. 流量计算相关的事情

最近笔者又开始考虑一个问题:如果让用户随意跑流量,那很可能会破产。

考虑到需要精准、并且极低延迟地计算用户消耗的流量,笔者设计了一套方案:

服务器进行 CDN 远程鉴权并预扣流量 + 服务器接收 CDN 节点 HTTPS 推送过来的实时日志并进行返还

由于这个方案较为复杂,所以笔者单独写了一篇文章。感兴趣的话可以看看笔者给 EdgeCOS 设计的 CDN 直链架构:

https://space.qiqinb.com/archives/20.html

三、写在结尾

这个项目经历了太多,已经算是一个比较大型的项目了。

欢迎来体验:EdgeCOS.com

最后修改:2026 年 07 月 08 日
如果觉得我的文章对你有用,请随意赞赏!