个人云盘

Node.jsExpress

想解决什么

自建网盘要么得装一堆依赖,要么登录流程比用网盘本身还麻烦。想要一个打开网址就能用、不用登录、也不怕被扫的私人空间。

做法

磁盘即数据库 —— 不引入任何数据库,目录结构本身就是文件的组织方式,所有元信息实时从文件系统读取。

全格式在线预览 —— 图片、视频、音频、PDF、代码都能直接预览;Office 文档走在线预览,老格式先用 LibreOffice 转成 PDF 再显示。

全程流式处理 —— 上传下载不把整个文件读进内存;打包下载也是流式的,边压缩边传输,再大的目录也不会把内存吃满。

几个关键设计

配额四层防护 + 边传边掐:上传前先校验、传输中实时统计、超限立即中断连接、落盘时再兜底一次。既挡得住恶意的大流量请求,也不会因为一次上传把磁盘写满。

分片上传与断点续传:大文件切片上传,中断后从已完成的分片继续,不用从头再来。

全盘搜索:直接遍历文件系统,不依赖预建索引。

安全隔离

服务以专用系统用户运行,数据目录权限 700、归该用户所有,代码目录对运行用户只读。

systemd 单元启用了 ProtectSystem=strict、ProtectHome、PrivateTmp、NoNewPrivileges,再用 ReadWritePaths 只放行数据目录 —— 服务即使被攻破,能碰到的东西也被限制在数据目录里。

部署

Node 服务监听本机端口,nginx 全站反代。