☰
Cloudreve云盘系统源码部署指南:从解压到跑通
2026/10/9 3:07:17 网站建设 项目流程

简介:这份资源是Cloudreve云盘系统的完整源码包,并附带一份安装配置视频教程,面向希望自建私有云盘、学习PHP Web应用部署的开发者与运维人员。Cloudreve支持本地存储与多种云存储后端,适合用来搭建个人或团队的文件管理与分享平台。压缩包共约2000个文件,以PHP源码为主体(2393个),辅以JavaScript、HTML、CSS等前端资源,以及SQL建库脚本、JSON配置、字体图标与图片素材,整体约57MB,目录结构完整,便于二次开发与功能裁剪。教程中针对安装过程中常见的伪静态URL Rewrite规则、fileinfo扩展缺失、PHP版本需7.0以上等问题给出了具体处理思路,并说明了数据库用户名与库名一致的填写方式,能帮助读者少走弯路。目前已有576人学习下载,适合需要快速跑通云盘系统、理解其部署流程与排错方法的读者参考。

1. Cloudreve 云盘系统源码:从解压到跑通,先搞清楚你要面对什么

很多人拿到Cloudreve云盘系统源码+带视频教程.zip的第一反应是解压、找install、双击运行,然后卡在数据库连接或者 500 报错上。Cloudreve 是一套用 Go 写的自托管网盘系统,支持本地存储、对象存储、WebDAV、多用户和分享链接,源码包里通常包含后端二进制或 Go 工程、前端静态资源、数据库迁移文件和一份视频教程。它解决的核心问题是:你不想把文件交给第三方网盘,但又需要一个能分配账号、能生成分享链接、能对接对象存储的私有文件管理入口。适合谁?手里有服务器、有域名、愿意花一个下午把环境跑通的后端或运维从业者。不适合谁?只想双击 exe 当桌面软件用的人。这一章先把「源码到手之后到底在跑什么」讲清楚,后面再拆部署、存储对接和缩略图这些真正卡人的点。

2. 部署前必须定下来的三件事:运行方式、数据库、存储后端

2.1 运行方式选二进制还是源码编译

Cloudreve 的发布形态有两种:一种是官方预编译的二进制文件,解压后直接./cloudreve就能启动;另一种是完整 Go 源码,需要自己go build。源码包里如果已经带了编译好的可执行文件,优先用二进制跑通,再考虑改源码。原因很直接:Go 的交叉编译和依赖拉取在国内网络环境下容易翻车,而二进制版本已经把依赖静态链接进去了。

判断方法很简单,解压后看目录里有没有一个几 MB 到几十 MB 的、没有扩展名的可执行文件,或者cloudreve.exe。有就直接用。

# 解压后进入目录,先看文件结构 unzip Cloudreve云盘系统源码+带视频教程.zip -d cloudreve-src cd cloudreve-src ls -lh # 如果看到 cloudreve 或 cloudreve.exe,给它执行权限 chmod +x cloudreve # 首次启动,它会自动生成 conf.ini 和数据库文件 ./cloudreve

首次启动的输出里会打印初始管理员账号和密码,这个只显示一次,必须立刻记下来。启动后默认监听5212端口,浏览器访问http://服务器IP:5212就能看到安装向导或登录页。

参数说明:conf.ini是主配置文件,首次启动自动生成。里面[Database]段决定用 SQLite 还是 MySQL,[System]段里的Mode决定运行模式。如果你只是自己用,SQLite 完全够,零配置;如果要给团队用、并发上传下载多,换 MySQL。

2.2 数据库选 SQLite 还是 MySQL

这是部署阶段第一个真正影响后续维护的选择。SQLite 的优势是零依赖、单文件、备份就是复制一个.db文件;劣势是并发写入弱,多人同时操作时容易锁表。MySQL 的优势是并发稳、方便远程管理;劣势是多了一个要维护的服务。

我一般会这样判断:用户数少于 10 人、以个人或小团队为主,SQLite;超过 10 人或者要对接外部系统读数据库,MySQL。切换方式是在conf.ini里改:

[Database] ; 类型可选 sqlite / mysql Type = mysql Host = 127.0.0.1 Port = 3306 User = cloudreve Password = 你的密码 Name = cloudreve Charset = utf8mb4

改完重启,Cloudreve 会自动建表。注意Charset必须是utf8mb4,否则中文文件名和 emoji 会出问题,这是血泪经验。

2.3 存储策略:本地、对象存储还是两者混用

Cloudreve 的存储策略是在后台「存储策略」里配置的,不是写死在配置文件里。本地存储适合小规模、文件不出服务器;对象存储(比如 S3 兼容的各类服务)适合文件多、要 CDN 加速、要节省服务器带宽的场景。

配置对象存储时需要填的几个关键参数:Bucket名称、Endpoint地址、AccessKey和SecretKey、以及是否使用路径风格(Path Style)。很多 S3 兼容服务要求开启 Path Style,否则会报RequestTimeTooSkewed或者签名错误。上传前先在后台点「测试连接」,通过了再启用。

提示:存储策略可以建多个,然后按用户组分配。比如管理员用本地,普通用户用对象存储,这样既能控制成本,又方便迁移。

3. 把 Cloudreve 跑成能用的网盘:反向代理、HTTPS 与上传限制

3.1 用 Nginx 反代 5212 端口并配 HTTPS

直接暴露 5212 端口能用,但不安全也不方便。标准做法是 Nginx 反代,顺便上 HTTPS。下面是一段可以直接抄的配置:

server { listen 80; server_name pan.example.com; # 强制跳 HTTPS return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name pan.example.com; ssl_certificate /etc/nginx/ssl/pan.example.com.crt; ssl_certificate_key /etc/nginx/ssl/pan.example.com.key; # 上传大文件必须放开这个限制 client_max_body_size 2048m; 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; # 支持 WebSocket,用于实时通知 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 大文件上传超时时间拉长 proxy_read_timeout 3600s; proxy_send_timeout 3600s; } }

逻辑说明:client_max_body_size控制 Nginx 允许的最大请求体,默认 1MB,不改的话上传超过 1MB 的文件直接 413。proxy_read_timeout和proxy_send_timeout默认 60 秒,大文件上传或慢速网络下会断,拉到 3600 秒。Upgrade和Connection两行是 WebSocket 必需,少了它后台的实时状态更新会失效。

参数怎么改:client_max_body_size按你允许的最大单文件来设,比如要传 2GB 就写2048m。注意 Cloudreve 后台「参数设置」里也有一个上传大小限制,两处要一致,否则会出现「Nginx 放行了但应用层拒绝」的情况。

3.2 后台必调的四个参数

登录管理员后台后,进「参数设置」,有四个地方我每次都会改:

第一,站点 URL。填https://pan.example.com,不填的话分享链接和回调地址会生成127.0.0.1,别人打不开。

第二,上传大小限制。和 Nginx 的client_max_body_size保持一致。

第三,默认用户组容量。新用户注册后默认给多少空间,按需设,别给无限。

第四,是否允许注册。公开站点建议关掉注册,改成管理员手动建号,否则容易被扫到批量注册。

# 改完配置后重启 Cloudreve 让部分设置生效 # 如果是 systemd 管理的: systemctl restart cloudreve # 如果是直接跑的,Ctrl+C 后重新执行 ./cloudreve

3.3 用 systemd 托管,避免 SSH 断开就挂

直接./cloudreve跑在前台,SSH 一断进程就没了。用 systemd 托管是标准做法:

# /etc/systemd/system/cloudreve.service [Unit] Description=Cloudreve After=network.target [Service] Type=simple WorkingDirectory=/opt/cloudreve ExecStart=/opt/cloudreve/cloudreve Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl enable cloudreve systemctl start cloudreve systemctl status cloudreve

逻辑说明:WorkingDirectory必须是 Cloudreve 所在目录,因为它要读写同目录下的conf.ini和数据库文件。Restart=on-failure保证进程崩溃后自动拉起。enable保证开机自启。改完配置后systemctl restart cloudreve即可。

4. 缩略图、WebDAV 与分享链接:三个最容易踩坑的功能

4.1 缩略图不显示,先查这三处

Cloudreve 的缩略图依赖两个条件:文件类型在允许列表里,以及生成缩略图的组件可用。图片缩略图一般开箱即用,视频缩略图需要额外的ffmpeg。如果你发现图片有缩略图但视频没有,大概率是服务器上没装 ffmpeg。

# 检查 ffmpeg 是否存在 which ffmpeg # 没有就装(以 Debian/Ubuntu 为例) apt update && apt install -y ffmpeg # 装完重启 Cloudreve systemctl restart cloudreve

参数说明:Cloudreve 后台「参数设置」里有缩略图相关开关,确认「生成缩略图」是开启状态。另外,对象存储策略下缩略图默认存在本地,如果服务器磁盘小,要留意thumbnails目录的增长。

注意:视频缩略图生成是 CPU 密集型操作,大量视频上传时服务器负载会明显上升。如果视频多,建议错峰上传或者单独跑一台机器处理。

4.2 WebDAV 挂载失败,多半是路径和权限

Cloudreve 支持 WebDAV,可以把网盘挂载到本地文件管理器。挂载地址是https://pan.example.com/dav,用户名密码就是 Cloudreve 的账号密码。常见失败原因有三个:一是 Nginx 没转发 WebDAV 需要的PROPFIND等方法,二是用了 HTTP 但客户端强制要求 HTTPS,三是账号没开启 WebDAV 权限。

Nginx 默认是转发所有方法的,但如果你的配置里加了limit_except之类的限制,要放开。另外,Windows 资源管理器挂载 WebDAV 对 HTTPS 证书要求严格,自签证书会失败,建议用正规证书。

4.3 分享链接打不开,检查站点 URL 和伪静态

分享链接生成的是完整 URL,如果后台「站点 URL」填的是127.0.0.1,分享出去别人自然打不开。改完站点 URL 后,已经生成的旧分享链接不会自动更新,需要重新生成。

另一个坑是伪静态。Cloudreve 的前端路由依赖 Nginx 的try_files,如果没配,刷新页面会 404。在location /里加一行:

location / { proxy_pass http://127.0.0.1:5212; # 其他 proxy_set_header 保持不变 }

Cloudreve 本身是 Go 服务,路由由它自己处理,所以不需要像 PHP 那样配try_files。但如果你在前面又套了一层静态服务器,就要注意别把请求截胡了。

5. 避坑与排查:五个真实翻车记录

现象一:启动报database is locked。原因:SQLite 在并发写入时锁表,常见于多人同时上传或后台任务和前台请求撞车。解决:换 MySQL,或者把 SQLite 的journal_mode改成 WAL。改法是在conf.ini的数据库配置里加_journal_mode=WAL,但最稳的还是换 MySQL。

现象二:上传大文件到 99% 失败。原因:Nginx 的client_max_body_size或proxy_read_timeout太小,也可能是对象存储的分片上传超时。解决:先确认 Nginx 两处参数,再看 Cloudreve 后台的上传限制,最后检查对象存储的 CORS 配置是否允许分片请求。

现象三:后台改完配置,前台没变化。原因:部分配置存在数据库里,改完需要重启进程才生效;还有一部分是浏览器缓存。解决:systemctl restart cloudreve,然后强制刷新浏览器(Ctrl+Shift+R)。如果还不行,看conf.ini有没有被覆盖。

现象四:视频缩略图全是黑屏。原因:ffmpeg 没装,或者视频编码格式 ffmpeg 不支持。解决:装 ffmpeg,然后用ffmpeg -i 视频文件手动测一下能不能解码。如果是 HEVC 等格式,确认 ffmpeg 编译时带了对应解码器。

现象五:WebDAV 挂载后无法写入。原因:用户组权限里没给 WebDAV 写权限,或者存储策略是只读的。解决:后台「用户组」里检查该组的 WebDAV 权限,再检查存储策略的读写设置。两个都放开才能写。

6. 进阶:用 API 和定时任务把 Cloudreve 接进现有系统

Cloudreve 提供了一套 REST API,可以用它做自动化上传、批量建用户、同步文件列表。API 的认证方式是先拿一个长期 token,然后在请求头里带Authorization: Bearer <token>。token 在后台「API」页面生成。

下面是一个用 Python 调 API 上传文件的例子:

import requests BASE = "https://pan.example.com/api/v3" TOKEN = "你的API_TOKEN" headers = { "Authorization": f"Bearer {TOKEN}", # 不要手动设 Content-Type,让 requests 自己处理 multipart } # 上传文件到根目录,uri 为 / 表示根目录 with open("test.zip", "rb") as f: files = {"file": ("test.zip", f)} data = {"uri": "/", "policy_id": "1"} # policy_id 在后台存储策略里看 resp = requests.post(f"{BASE}/file/upload", headers=headers, files=files, data=data) print(resp.status_code) print(resp.json())

逻辑说明:uri是目标目录,policy_id是存储策略 ID,不传会用默认策略。返回的 JSON 里如果有code: 0表示成功。注意 API 上传也受后台的上传大小限制,大文件要分片。

参数怎么调:policy_id可以在后台存储策略列表的 URL 里看到,或者调/api/v3/policy接口列出。分片上传的接口是/api/v3/file/upload配合/api/v3/file/upload/part,适合超过几十 MB 的文件。

再进一步,可以用 cron 定时调 API 做备份同步:

# 每天凌晨 3 点把本地目录同步到 Cloudreve 0 3 * * * /usr/bin/python3 /opt/scripts/sync_to_cloudreve.py >> /var/log/cloudreve_sync.log 2>&1

验证方法:跑完脚本后去 Cloudreve 网页端看文件在不在,再调/api/v3/file接口列出目录确认。如果失败,先看日志里的 HTTP 状态码,401 是 token 问题,413 是大小限制,500 看 Cloudreve 自己的日志。

我自己的习惯是:任何自动化脚本先手动跑一遍,确认返回code: 0再挂 cron。另外 token 不要硬编码在脚本里,放环境变量或者单独的配置文件,权限设 600。这套东西跑顺之后,Cloudreve 就不只是一个网盘,而是你现有系统的一个文件存储层。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询