尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Cloudreve部署指南:从零搭建私有网盘与对象存储实践

Cloudreve部署指南:从零搭建私有网盘与对象存储实践 老实说我是被 Cloudreve 的部署速度圈粉的。当时手里正好有一台空闲的 2 核 4G 云服务器想给团队搞一套内部资料共享空间翻了翻 Nextcloud 的安装文档又看了眼 Seafile 的配置复杂度最后决定先拿 Cloudreve 试试。结果从下载到跑起来前后不到十分钟Web 后台一开清爽得不像一个开源网盘该有的样子。后来我又给它接上对象存储、挂上离线下载、套上 HTTPS现在团队几十个人用它传大文件、分享链接、挂 WebDAV稳得很。这篇文章我就把完整部署过程、踩过的坑、以及我认为值得注意的细节全部整理出来。1. 先想清楚为什么需要一台专属网盘1.1 网盘服务的痛点先聊点实际的。很多人一开始觉得“网盘嘛免费的就够用了”真用起来才发现一堆问题非会员下载限速到怀疑人生文件动不动就被“和谐”分享链接隔几天就失效手机照片想自动备份还得买会员。如果你只是存点小文件那问题不大可一旦涉及工作资料、项目素材、团队协作第三方网盘的不确定性就非常致命。自己的网盘至少能解决三件事一是文件在你自己手里存储和备份策略完全可控二是速度不走服务商限速通道大文件传输全看你的服务器带宽和客户端网络三是分享链接、生命周期、访问权限都能自己定不用迁就别人的规则。说白了这是一种“数字资产自托管”的思路成本不高但换来的是长期安心。1.2 Cloudreve 能做什么Cloudreve 是一款基于 Go 语言开发的开源网盘程序最大的特点就是“轻”。整个程序就是一个可执行的二进制文件不依赖复杂的运行时环境部署门槛极低。功能上它覆盖了一个网盘该有的基本能力文件上传下载、目录管理、分享链接、回收站、多用户、用户组、存储策略配额、在线预览等。比较亮眼的是它的存储层设计。Cloudreve 可以对接多种存储后端本地磁盘、阿里云 OSS、腾讯云 COS、AWS S3、OneDrive 等。这意味着你可以把“网盘管理界面”和“文件物理存储”拆开小文件放本地磁盘大文件丢对象存储甚至让不同用户组使用不同的存储策略。这套机制很适合做给团队或者个人用灵活度很高。另外它还支持 WebDAV 协议配合本地的 RaiDrive、挂载工具能直接把网盘映射成电脑里的一个磁盘目录日常使用体验接近本地文件。1.3 和 Nextcloud / Seafile 怎么选很多人在选自建网盘方案时都会纠结 Nextcloud、Seafile 和 Cloudreve 这三者。我个人的理解是这样的维度CloudreveNextcloudSeafile部署复杂度极低单文件运行较高依赖 PHP、数据库等中等分服务端和客户端资源占用很低2 核 2G 都很宽裕偏高需要使用 PHP-FPM 等组件中等依赖 MySQL文件同步能力一般主要通过 WebDAV强官方客户端全平台同步强自定义同步协议效率高在线编辑弱强支持 OnlyOffice 协作弱存储策略很灵活支持多后端主要本地存储支持 S3 等后端适合人群个人、中小企业做分享网盘想要完整协同办公套件对文件同步效率要求高的团队如果你需要一个“拿来就能用、分享为主、不折腾”的网盘Cloudreve 很合适如果要完整的企业协作、在线文档、任务管理那套Nextcloud 更对口如果核心诉求就是多端同步、要高效增量传输Seafile 表现更好。Cloudreve 的长处在于“快”不仅是部署快日常维护也几乎没有存在感。1.4 部署前的需求确认动手之前先把需求想明白否则后面容易反复折腾。我建议你问自己几个问题有多少用户使用几个人和几百人的方案完全不同。文件主要存在哪本地磁盘、对象存储还是 NAS需要外网访问吗需不需要域名和 HTTPS是否需要离线下载、WebDAV 这些扩展能力我先说我这边的背景一台云服务器2 核 4G系统 Ubuntu 22.04数据盘独立挂载用户大概 20 人的团队文件以设计稿、视频素材为主单文件经常超过 2G。基于这个需求我最终选了 Cloudreve 本机数据盘 Nginx 反向代理 Lets Encrypt 证书的方案。整个过程我会在下面的章节里逐步展开。2. 部署前的准备清单2.1 服务器资源怎么定Cloudreve 本身非常省资源官方推荐的最低配置是 1 核 512M但那是“能跑”的标准。真正要好用我认为至少要满足这几个底线CPU1 核够用2 核更好主要影响缩略图生成、文件哈希计算和多用户并发。内存1G 可以跑2G 体验更稳。如果还打算运行 MySQL、Redis建议至少上 2G。磁盘看文件量。系统盘和数据盘最好分开数据盘独立挂载方便备份和扩容。带宽对内网团队无所谓公网分享就要看上行带宽。家用宽带通常上行小云服务器按流量计费也要留意。我用的这台是 2 核 4G系统盘 40G额外挂载了一块 200G 数据盘。日常峰值大概 8 个用户同时上传下载没有出现过资源不足的情况。2.2 域名与解析虽然直接用http://服务器IP:5212也能访问但如果要长期用我的建议是务必配一个域名原因很简单一是方便记忆和分享二是只有有了域名才能顺利配置 HTTPS不暴露明文流量也免去每次访问都要输 IP 和端口号的麻烦。域名这一步提前做DNS 生效有时间差别让部署等域名。我习惯在开始安装前就把pan.example.com这个二级域名解析到服务器 IP 上TTL 设短一点比如 300 秒这样部署完直接就能解析到测试起来很顺。2.3 挂载数据盘很多人容易忽略这一步。数据盘的好处是把“程序”和“数据”分离系统出问题要重装、扩容、迁移都不影响数据盘里的文件。我的服务器购买时附带了 200G 数据盘先在服务商控制台完成了云盘挂载然后登录服务器分区、格式化、挂载到/data目录。# 查看磁盘设备信息 lsblk # 对 /dev/vdb 分区 fdisk /dev/vdb # 格式化文件系统 mkfs.ext4 /dev/vdb1 # 创建挂载点并挂载 mkdir -p /data mount /dev/vdb1 /data # 写入 fstab让重启后自动挂载 echo /dev/vdb1 /data ext4 defaults 0 0 /etc/fstab这里有个小经验fstab 写错会导致服务器开机失败。写完以后务必执行mount -a验证一遍再reboot检查一次别偷懒。2.4 安装基础组件Cloudreve 是单二进制运行但为了完整方案我提前安装了 Nginx、MySQL 和 Redis。Nginx 用于反向代理和 HTTPS 终止MySQL 用于数据存储比默认的 SQLite 更适合多用户场景Redis 用于缓存和任务队列可以提升大文件上传和多任务下载的稳定性。apt update apt upgrade -y apt install -y nginx mysql-server redis-server wget tar三个服务都装好后先确认状态正常systemctl status nginx systemctl status mysql systemctl status redis-serverMySQL 安装完默认可能只有 root 账号我这里顺手创建了专用的数据库和用户避免 Cloudreve 直接使用 root 连接算是规范化操作。这一步在后面配置conf.ini时正好用上。3. 安装初始化从二进制文件到管理员账号3.1 下载和解压Cloudreve 的 Release 发布页提供了各平台编译好的压缩包服务器端通常选择linux_amd64版本。如果你的服务器是 ARM 架构记得选arm64先执行uname -m确认一下再下载。mkdir -p /opt/cloudreve cd /opt/cloudreve wget https://github.com/cloudreve/Cloudreve/releases/latest/download/cloudreve_3.8.3_linux_amd64.tar.gz tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz chmod x cloudreve看到目录里只有一个cloudreve可执行文件和一个README.md你就能理解我为什么说“轻”了。没有任何依赖库不需要安装 Python、PHP、Node.js一个文件就是全部程序。3.2 首次运行与管理员账号首次运行 Cloudreve 时它会自动生成conf.ini配置文件并创建默认的管理员账号和随机密码。cd /opt/cloudreve ./cloudreve启动日志里会明确打印Admin user created: admin Admin password: xxxxxxxxxxxx这行日志只会在首次启动出现。如果你手滑丢了终端记录后续只能通过数据库重置密码所以看到密码后立刻登录后台改掉。登录方式浏览器访问http://服务器IP:5212默认端口是 5212账号是admin密码用刚才日志里输出的随机密码。第一次登录后去右上角的管理面板把密码改掉。另外我建议如果这台服务器还打算给别人开账号先把“用户注册”关掉改成管理员手动创建用户避免陌生人随意注册这一点非常实际。3.3 用 systemd 守护进程直接./cloudreve跑在终端SSH 一断开进程就没了。要长期运行必须让 Cloudreve 作为系统服务常驻。我的做法是创建一个独立的运行用户再用 systemd 管理。useradd -r -s /bin/false cloudreve chown -R cloudreve:cloudreve /opt/cloudreve然后创建 systemd 服务文件/etc/systemd/system/cloudreve.service[Unit] DescriptionCloudreve Documentationhttps://cloudreve.org Afternetwork.target Wantsnetwork-online.target [Service] Usercloudreve Groupcloudreve WorkingDirectory/opt/cloudreve ExecStart/opt/cloudreve/cloudreve Restartalways RestartSec5 LimitNOFILE1048576 [Install] WantedBymulti-user.target启动并设置开机自启systemctl daemon-reload systemctl enable --now cloudreve systemctl status cloudreve这里注意WorkingDirectory很重要Cloudreve 的 SQLite 数据库文件和上传临时文件默认是相对于工作目录的如果启动路径不对会出现找不到数据库或者文件存到奇怪位置的问题。以后凡是重启服务器这个服务都会自动拉起不用再手动操作。3.4 从 SQLite 切换到 MySQLCloudreve 默认使用 SQLite适合单机、小规模测试。但我的使用场景是多用户并发SQLite 在写入频繁时容易锁库所以我一开始就想好要迁到 MySQL。操作方法很简单暂停服务把现有数据库连接信息写进conf.ini再重新启动。在/opt/cloudreve/conf.ini中写入[System] Listen :5212 Mode master [Database] Type mysql Host 127.0.0.1 Port 3306 User cloudreve Password YourSafePassword Name cloudreve TablePrefix cd_ [Redis] Server 127.0.0.1:6379 Password DB 0对应的 MySQL 初始化语句我用的是CREATE DATABASE cloudreve CHARACTER SET utf8mb4; CREATE USER cloudrevelocalhost IDENTIFIED BY YourSafePassword; GRANT ALL PRIVILEGES ON cloudreve.* TO cloudrevelocalhost; FLUSH PRIVILEGES;改完配置重启 Cloudreve它会自动在 MySQL 中创建所有数据表。如果之前 SQLite 里已经有数据官方提供了迁移工具我第一次部署时还没有正式数据所以直接切库完全没有迁移负担。这里给你的建议是上线之前想清楚用什么数据库别等数据多了再折腾迁移。4. 存储策略选型本地、对象存储还是 S34.1 本地存储简单直接Cloudreve 后台的“存储策略”可以理解成“文件放在哪、怎么放”的规则。最基础的策略就是本地存储文件上传后直接写到服务器上的某个目录。在后台管理面板里新增存储策略时选择“本机存储”填写存储路径比如/data/cloudreve/files再设置一个用于访问的根地址。之后所有用户上传的文件都会落到这个目录按日期和随机子目录组织。本地存储的优点是没有额外的流量费用和 API 调用费用速度取决于服务器磁盘和带宽。缺点是容量受限于服务器磁盘备份也要自己搞定。我的方案是日常给团队用的大文件放本地数据盘毕竟对象存储按流量计费团队内部频繁上传下载这个成本不可忽略。4.2 对象存储给网盘加个“无限容量”如果你的团队有大文件分享、长期归档、外网下载的需求把 Cloudreve 对接阿里云 OSS、腾讯云 COS 或任意 S3 兼容存储是很划算的。Cloudreve 后台内置了这些平台的 SDK 对接只需要填密钥、Bucket、地域等信息。以阿里云 OSS 为例新增存储策略时选择“阿里云 OSS”填好AccessKeyId、AccessKeySecret、Bucket、EndPoint和自定义域名。这里的自定义域名不是必须的但没有的话下载链接会直接暴露 OSS 默认域名走公网流量速度一般。建议给 OSS 绑定一个 CDN 或自定义域名同时配置好跨域 CORS否则浏览器端分片上传会报错。一个很实用的玩法是“本地存储 对象存储”组合给普通用户组分配本地存储给文件归档或对外分享分配对象存储策略。用户上传文件前可以选择存储策略系统会根据策略把文件落到不同后端。这样既控制了成本又保留了扩展性。4.3 路径与权限规划无论选择哪种存储后端路径规划都要提前做。我的目录设计供你参考/data ├── cloudreve │ ├── files # Cloudreve 本地存储文件目录 │ └── temp # 临时文件/分片上传目录权限方面因为 Cloudreve 服务运行用户是cloudreve所以/data/cloudreve和下面的文件目录必须确保这个用户有权读写。常见问题就是目录属主是 root导致上传文件时 500 报错。排查方法很简单chown -R cloudreve:cloudreve /data/cloudreve chmod -R 750 /data/cloudreve另外上传临时目录和最终文件目录最好放在同一个文件系统下否则分片合并时需要跨文件系统拷贝影响性能。我一开始临时目录放在系统盘/tmp正式文件放在数据盘/data测试时发现合并大文件明显变慢后来把临时目录也挪到数据盘就好了。5. 反向代理与 HTTPS 落地5.1 Nginx 配置从 5212 到 443Cloudreve 默认监听 5212 端口但我不太建议直接暴露这个端口给外部用户。一是裸 HTTP 传输不安全二是端口看起来不够专业三是 Nginx 能在前面处理更多事HTTPS、压缩、限流、静态缓存等。我的 Nginx 配置如下server { listen 80; server_name pan.example.com; client_max_body_size 0; proxy_request_buffering off; location / { proxy_pass http://127.0.0.1:5212; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 600s; proxy_send_timeout 600s; } }这里有几个关键点client_max_body_size 0表示不对上传体积做限制否则 Nginx 默认 1M 会直接挡掉大文件。如果不想完全放开也可以设成20g。proxy_request_buffering off关闭请求缓冲让文件流式转发。对于大文件上传很有用能降低内存占用和延迟。proxy_set_header X-Forwarded-Proto $scheme是必须的否则 Cloudreve 在 HTTPS 环境下生成回跳链接时可能误判成 HTTP。5.2 自动签发 HTTPS 证书域名解析没问题后我直接用 acme.sh 签发 Lets Encrypt 证书。整个过程不用人工干预证书快到期前还能自动续期。curl https://get.acme.sh | sh ~/.acme.sh/acme.sh --issue -d pan.example.com --nginx签发成功后安装证书到 Nginx 目录~/.acme.sh/acme.sh --install-cert -d pan.example.com \ --key-file /etc/nginx/ssl/pan.key \ --fullchain-file /etc/nginx/ssl/pan.pem \ --reloadcmd systemctl reload nginx再增加一个强制跳转的配置server { listen 80; server_name pan.example.com; return 301 https://$host$request_uri; }改完后nginx -t systemctl reload nginx再访问https://pan.example.com浏览器地址栏的小锁就出现了。整个 HTTPS 授权的成本为零过程只要几分钟。如果不想折腾 acme.shCaddy 会更省事它的配置文件里写一行 reverse_proxy自动就能完成证书申请和续期适合图省事的用户。5.3 防火墙与端口收敛部署完成后我做的第一件事就是收紧防火墙。云服务器通常有两层防火墙服务商安全组和系统防火墙。两层都要检查。安全组方面我只放开 80、443 和 SSH 端口5212 端口不对公网开放。系统防火墙如果没有特殊需求可以不开 UFW 或 firewalld但前提是安全组已经收紧。如果你习惯用 UFW可以这样ufw allow 22/tcp ufw allow 80/tcp ufw allow 443/tcp ufw enableSSH 端口我建议改成非默认端口并且禁止 root 密码登录只保留密钥登录。对于长期在公网部署服务的人来说这一步能挡住绝大多数自动扫描攻击。另外Cloudreve 后台建议开启登录失败锁定防止管理员账号被暴力尝试。5.4 数据库与文件的定时备份网盘里都是真金白银的数据备份必须从一开始就做。我的备份分两层第一层是数据库。如果用的是 SQLite直接备份.db文件即可如果用了 MySQL用mysqldump定期导出 SQLmysqldump -ucloudreve -pYourPassword cloudreve /data/backup/cloudreve_db_$(date %F).sql第二层是文件数据。本地存储的文件目录直接做增量同步到另一台机器或对象存储rsync -av --delete /data/cloudreve/files /data/backup/我用 cron 设定每天凌晨 3 点执行一次数据库备份每周做一次全量文件同步并且保留最近 7 天的数据库备份。备份目录也记得做清理不然时间长了磁盘会被备份塞满。刚开始我吃过一次教训备份脚本没有加清理策略跑了俩月数据盘差点被撑爆。6. 常见问题与排查实录6.1 上传大文件失败或超时这个是我遇到最多的一个问题。如果你已经配置了client_max_body_size 0还是会在大文件上传时中断通常要从这几个方向排查确认请求是走 Nginx 还是直连 5212。如果直连服务正常、走 Nginx 失败问题大概率在 Nginx 超时配置上。把proxy_read_timeout和proxy_send_timeout调大比如 600s就能解决。检查 Cloudreve 后台的“上传设置”看单文件大小限制和分片大小配置。Cloudreve 的分片上传机制本身支持超大文件但后台如果限制了上传体积照样会被拦下来。如果是对象存储上传失败检查 CORS 跨域是否配置正确以及密钥是否还算有效。查看磁盘空间和dmesg排除磁盘满、inode 耗尽的问题。6.2 502 Bad GatewayNginx 报 502 时第一反应不是看 Nginx而是看 Cloudreve 进程是否还活着。我的排查顺序是systemctl status cloudreve journalctl -u cloudreve -n 50最常见的原因有两个一是 Cloudreve 进程因为内存不足被 OOM Killer 杀掉二是数据库连接异常后进程僵死。如果是内存不足看dmesg里有没有Out of memory记录然后考虑加 Swap 或者降低 MySQL 的 Buffer Pool 占用。如果是数据库问题检查数据库服务和conf.ini里的账号密码是否正确。6.3 存储策略显示不可用在后台新建存储策略时有时候测速或者测试连接会报错。针对本地存储最常见的原因是目录不存在或权限不对针对对象存储除了密钥错误还有可能是 Bucket 地域填错了。确认一下你在使用的存储服务商的控制台里查到的 Region、Endpoint 是否和后台填的一致。许多 S3 兼容服务的 Endpoint 格式各不相同粘贴时不要带https://前缀只要 host 部分就行后端会自动拼接协议。6.4 离线下载功能怎么接 Aria2Cloudreve 支持离线下载可以把 HTTP、FTP、磁力链接交给 Aria2 去拉取文件下载完成后再自动收录到网盘。这个功能很讨喜但需要单独部署 Aria2 并开启 RPC 服务。我是在同一台服务器上安装的 Aria2apt install -y aria2准备配置/etc/aria2.confenable-rpctrue rpc-listen-alltrue rpc-secretYourAria2Secret dir/data/cloudreve/downloads continuetrue max-concurrent-downloads5 max-connection-per-server16 min-split-size20M split8然后后台启动aria2c --conf-path/etc/aria2.conf在 Cloudreve 管理面板的“离线下载”设置里填上http://127.0.0.1:6800/jsonrpc和 RPC Secret保存后就能发起离线任务了。注意Aria2 的下载目录要确保 Cloudreve 服务用户有读取权限否则下载完成后文件无法自动移入网盘目录。6.5 内存占用优化Cloudreve 本身占用很低但如果同机跑 Nginx、MySQL、Redis、Aria2小内存服务器就需要做一些取舍。我的建议是MySQL 的innodb_buffer_pool_size改小到 256M 或 512M默认分配的 128M 到 1G 对网盘场景来说不用给太多。如果内存紧张到 1G 以下可以考虑先放弃 MySQL直接用 SQLite减少一个守护进程的常驻开销。给服务器配 1G 到 2G 的 Swap避免瞬时并发导致 OOM。我在这台 4G 服务器上还开了 2G Swap高峰期明显更稳。7. 几个我后来觉得“早该知道”的细节部署完成、跑顺之后有几个小细节是我后来才补上的对日常使用体验影响很大。第一个是 WebDAV 的挂载Cloudreve 支持 WebDAV 协议我用本地的挂载工具把网盘映射成了电脑上的一个盘符传文件就像操作本地文件夹一样这在处理大量散文件时非常方便。第二个是分享链接的管理后台可以查看所有用户的分享记录并设置有效期和下载次数限制我按团队要求把链接默认有效期设成 30 天避免一堆过期链接占着心理上的安全感。第三个是上传前先在后台把“缩略图生成”相关参数调好否则存了大量图片后打开目录时缩略图加载会很慢。还有一个容易忽略的点Cloudreve 后台的“参数设置”里有个站点 URL 配置很多人忘记改。如果你通过域名访问却还留着默认的 IP 地址生成的分享链接、WebDAV 地址都会是错的。第一天上线就因为这个同事点我分享出去的链接发现打不开排查了半天才发现是站点 URL 没改。就我个人实际使用下来Cloudreve 是一套非常“轻而不糙”的方案。它没有把功能堆得满满当当而是把一个网盘最核心的事情做好了文件存得进去、拿得出来、分享得出去。对于不想折腾 Nextcloud、又需要一台可靠私有网盘的人来说这套部署流程基本可以照抄。如果你后续想进一步扩展还可以研究下对接 S3 做混合云存储、部署多实例、用 CDN 加速下载链路。部署过程中遇到的具体问题也欢迎带着日志信息和配置来讨论我已经把能想到的坑都写在上面了希望你能少走点弯路。
返回列表