简介:这份资源是Cloudreve云盘系统的完整源码包,并附带一份安装配置视频教程,面向希望自建私有云盘、学习PHP Web应用部署的开发者与运维人员。Cloudreve支持本地存储与多种云存储后端,适合用来搭建个人或团队的文件管理与分享平台。压缩包共约2000个文件,以2393个PHP脚本为核心,辅以251个JS、151个HTML、62个CSS等前端资源,另有SQL建库脚本、JSON配置、字体图标与图片素材,整体约57.07MB,目录结构完整,覆盖后端逻辑、前端界面与数据库脚本。教程中重点讲解了安装目录指向/CloudreveInstaller/index.php、PHP版本需7.0以上、URL Rewrite伪静态规则调整、fileinfo扩展开启以及数据库用户名与库名一致的配置要点,并给出常见报错的排查思路。目前已有576人学习下载,适合需要快速跑通云盘系统、理解其部署流程与目录组织的读者参考。
1. Cloudreve 云盘系统源码拆解:从零搭一套能跑通的私有网盘
手里有一台闲置的 2 核 4G 云主机,想给自己团队搭个内部文件共享盘,又不想每个月给公有云盘交订阅费——这是很多人搜「Cloudreve 云盘系统源码」时最真实的出发点。Cloudreve 是一套用 Go 写的开源网盘程序,支持本地存储、对象存储对接、多用户、分享链接、离线下载、WebDAV 挂载,前端是 Vue 打包好的静态资源,后端编译成单个二进制文件,部署起来比想象中轻。标题里还带了个「带视频教程.zip」,说明拿到手的往往是一整套源码加讲解材料,但真正卡住人的从来不是「有没有教程」,而是环境怎么配、数据库怎么连、反向代理怎么设、缩略图为什么不显示。这篇笔记就按一线部署的顺序,把 Cloudreve 从源码到跑通、再到调优和排错的完整路径讲清楚,适合想自建网盘的后端、运维,也适合拿它当 Go 项目练手的人。
2. 先搞清楚 Cloudreve 的架构和选型理由
2.1 为什么是 Go 单二进制而不是 PHP 网盘
搜「php源码」的人很多,市面上的老牌网盘程序也确实以 PHP 居多,比如各种基于 ThinkPHP 或 Laravel 的网盘。但 Cloudreve 从 3.x 开始用 Go 重写后端,这个选择直接决定了它的部署形态。Go 编译出来是一个静态链接的二进制文件,不依赖 PHP-FPM、不依赖 Composer、不依赖一堆扩展,扔到服务器上给个执行权限就能起。对个人和小团队来说,这意味着少装一整套运行环境,少一层「PHP 版本不对导致白屏」的玄学问题。
代价是它不像 PHP 源码那样改一行刷新就生效。你要改后端逻辑,得重新编译;前端要改,得走 npm 构建流程。所以拿到「源码 + 视频教程」这套东西时,先分清你是要「直接用编译好的版本部署」,还是「改源码二次开发」。前者只需要二进制和配置文件,后者才需要 Go 工具链和 Node 环境。绝大多数人其实是前者,但被「源码」两个字带偏,一上来就折腾编译,反而把简单的事搞复杂。
2.2 核心组件与数据流向
Cloudreve 的运行结构可以拆成四块:Web 服务、数据库、存储策略、缓存。Web 服务负责处理 HTTP 请求和前端静态资源;数据库存用户、文件元信息、分享记录,默认支持 SQLite、MySQL、PostgreSQL;存储策略决定文件实际落在哪,可以是本地磁盘,也可以是 S3 兼容对象存储、OneDrive、阿里云 OSS 等;缓存用 Redis 或内存,影响会话和部分高频读取。
数据流向大致是:用户在前端点击上传 → 请求打到后端 → 后端按当前用户绑定的存储策略决定上传目标 → 文件流写入存储 → 元信息写数据库 → 返回文件 ID 和访问路径。缩略图是在这个流程之外单独触发的,后端根据文件类型调用对应的生成器,生成后缓存起来。理解这条链路,后面排查「上传成功但列表不显示」「缩略图 404」就有方向了。
2.3 部署形态:裸机、Docker 还是面板
常见做法有三种。裸机直接跑二进制,最轻,适合熟悉 Linux 的人;Docker 部署,环境隔离干净,升级回滚方便,适合不想污染宿主机的场景;宝塔之类的面板部署,图形化操作,适合不熟命令行的用户,但面板本身会占资源,且和 Cloudreve 的权限、端口容易打架。
我一般推荐 Docker,尤其是团队用。原因不是 Docker 多高级,而是 Cloudreve 升级频繁,二进制升级要手动替换文件、处理权限,Docker 一条docker compose pull && up -d就完事,出问题回滚镜像 tag 即可。下面按 Docker 路线展开,裸机部署的关键差异我会在对应位置点出来。
3. 从源码到跑通:Cloudreve 的最小可运行部署
3.1 环境准备与依赖清单
先明确最低要求。Cloudreve 3.x 对系统要求不高,1 核 1G 能跑起来,但要开缩略图、离线下载、多用户并发,建议 2 核 2G 起步。需要的东西:
| 组件 | 作用 | 是否必须 |
|---|---|---|
| Cloudreve 二进制/镜像 | 主程序 | 必须 |
| 数据库 | 存元信息 | SQLite 可省,生产建议 MySQL |
| Redis | 缓存与会话 | 可选,多用户建议开 |
| 反向代理 | HTTPS、域名 | 生产必须 |
| 存储后端 | 实际存文件 | 本地或对象存储 |
如果走 Docker,宿主机只需要装好 Docker 和 Docker Compose。数据库和 Redis 可以用容器一起编排,也可以外接已有的。这里给一套自包含的 compose,把 Cloudreve、MySQL、Redis 都放进去,适合从零开始的人。
3.2 用 Docker Compose 拉起完整服务
先建目录,写docker-compose.yml:
version: "3.8" services: cloudreve: image: cloudreve/cloudreve:latest container_name: cloudreve restart: unless-stopped ports: - "5212:5212" # 默认 Web 端口 volumes: - ./data:/cloudreve/data # 程序数据、配置、SQLite - ./uploads:/cloudreve/uploads # 本地存储策略的落盘目录 environment: - CR_CONF_Database.Type=mysql - CR_CONF_Database.Host=db - CR_CONF_Database.Name=cloudreve - CR_CONF_Database.User=cloudreve - CR_CONF_Database.Password=change_me_strong - CR_CONF_Redis.Server=redis:6379 depends_on: - db - redis db: image: mysql:8.0 container_name: cloudreve-db restart: unless-stopped environment: - MYSQL_ROOT_PASSWORD=change_root_strong - MYSQL_DATABASE=cloudreve - MYSQL_USER=cloudreve - MYSQL_PASSWORD=change_me_strong volumes: - ./mysql:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 redis: image: redis:7-alpine container_name: cloudreve-redis restart: unless-stopped volumes: - ./redis:/data逻辑说明:Cloudreve 容器通过环境变量CR_CONF_*覆盖配置文件里的对应项,这样不用进容器改 conf.ini。CR_CONF_Database.Type=mysql告诉它用 MySQL 而不是默认 SQLite;Host=db用的是 compose 内部服务名,容器间通过这个解析。volumes把数据目录和上传目录挂出来,容器删了数据还在。
参数说明:5212是 Cloudreve 默认端口,映射到宿主机后先别急着暴露公网,等反向代理配好再关掉直接访问。MySQL 的--character-set-server=utf8mb4必须加,否则中文文件名和 emoji 会出问题,这是血泪经验。密码字段全部换成强密码,别用示例值。
启动:
docker compose up -d docker compose logs -f cloudreve看到日志里输出初始管理员账号密码就说明起来了。第一次启动会初始化数据库表结构,如果 MySQL 还没就绪,Cloudreve 可能报连接失败,等几秒重启容器即可,或者给 db 加 healthcheck。
3.3 初始化配置与管理员账号
浏览器访问http://服务器IP:5212,用日志里的初始账号登录,第一件事是改密码。然后进「管理面板 → 存储策略」,确认默认策略的路径。如果用的是上面 compose 里的本地存储,路径应该指向/cloudreve/uploads,对应宿主机./uploads。
接着配站点 URL。在「基础设置」里把「站点 URL」改成你最终要用的域名,比如https://pan.example.com。这个值影响分享链接、回调地址、缩略图 URL 的生成,配错了会出现「分享链接打不开」「缩略图裂图」。很多人部署完发现分享出去的链接是内网 IP,就是这里没改。
3.4 反向代理与 HTTPS 配置
生产环境必须上反向代理。Nginx 配置示例:
server { listen 443 ssl http2; server_name pan.example.com; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; client_max_body_size 10g; # 大文件上传必须放开 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 3600s; # 大文件上传/下载别被超时切断 } }逻辑说明:client_max_body_size是 Nginx 默认 1M 的限制,不改的话超过 1M 的文件直接 413,这是新手最常见的翻车点。proxy_read_timeout默认 60s,传大文件或离线下载时会被切断,调到 3600s。X-Forwarded-Proto让后端知道真实协议是 HTTPS,否则生成的链接可能是 http。
配好后把 compose 里的端口映射改成127.0.0.1:5212:5212,只允许本机访问,公网走 Nginx。裸机部署的话,Cloudreve 配置文件里也有对应的监听地址和端口项,改完重启进程。
4. 存储策略、缩略图与性能调优
4.1 本地存储与对象存储怎么选
本地存储简单直接,文件落在服务器磁盘,适合单机、数据量不大、对成本敏感的场景。缺点是扩容要加盘、迁移要手动搬、多机部署没法共享。对象存储(S3 兼容、OSS、COS 等)适合数据量大、要多机、要 CDN 加速的场景,文件不占服务器磁盘,但要走外网流量,有费用。
选型判断很简单:单机、总量 500G 以内、访问不频繁,本地存储够用;要多节点、要挂 CDN、数据上 T,直接上对象存储。Cloudreve 支持一个用户绑定多个存储策略,也可以按用户组分配,所以混合用也行——热数据放本地,冷数据放对象存储。
配对象存储时几个参数容易填错:Endpoint 要带协议和端口,Bucket 名要精确,AccessKey 和 SecretKey 别搞反,区域(Region)要和 Bucket 实际所在地一致。填完点「测试」不通,先检查这几项,再检查服务器出网是否正常。
4.2 缩略图生成:为什么你的图不显示
搜「cloudreve缩略图」的人多半遇到了图片列表全是默认图标。缩略图依赖后端能识别文件类型并调用生成器。几个关键点:
第一,存储策略里要开启「生成缩略图」选项,默认可能是关的。第二,图片格式要在支持列表里,常见 jpg、png、gif、webp 支持,一些冷门格式不行。第三,如果用了对象存储,缩略图可能生成在本地缓存目录,要确保该目录可写。第四,视频缩略图依赖 ffmpeg,容器里默认可能没装,需要自己构建镜像或挂载 ffmpeg。
排查顺序:先看存储策略开关,再看后端日志有没有生成失败记录,再看缓存目录权限,最后确认 ffmpeg 是否存在。日志里通常会明确写「ffmpeg not found」或「unsupported format」,别瞎猜。
4.3 缓存、并发与上传限制调参
Redis 开了之后,会话和部分元信息走缓存,多用户场景响应明显变快。配置项在CR_CONF_Redis下,除了 Server 还可以设密码和 DB 序号。如果 Redis 和 Cloudreve 不在同一网络,注意防火墙。
上传限制分几层:Nginx 的client_max_body_size、Cloudreve 自身的上传大小限制、PHP 无关(因为是 Go)。Cloudreve 后台「上传设置」里有单文件大小上限,默认可能偏小,按需调大。另外分片上传的并发数和分片大小也影响大文件体验,网络差的环境把分片调小、并发调低更稳。
并发方面,Go 本身处理并发能力强,瓶颈通常在数据库连接数和磁盘 IO。MySQL 连接池在配置文件里可调,磁盘 IO 靠 SSD 或对象存储解决。如果发现上传时整个站点卡顿,多半是磁盘写满或 IO 打满,先看iostat和磁盘剩余空间。
5. 部署 Cloudreve 最容易踩的坑
5.1 现象:上传大文件报 413 或中途失败
原因:Nginx 的client_max_body_size默认 1M,或者proxy_read_timeout太短,大文件传到一半被切断。也可能是 Cloudreve 后台上传上限没调。
解决:Nginx 里把client_max_body_size调到实际需要的值,比如 10g;proxy_read_timeout和proxy_send_timeout都调到 3600s;Cloudreve 后台同步调大单文件上限。改完nginx -s reload。
5.2 现象:分享链接打开是内网 IP 或 404
原因:站点 URL 没配或配错,后端生成链接时用了默认值或请求头里的 Host。反向代理没传X-Forwarded-Proto时,HTTPS 站点可能生成 http 链接。
解决:后台「基础设置」里把站点 URL 写成最终域名,带 https。Nginx 配置里确保proxy_set_header Host $host和X-Forwarded-Proto $scheme都在。改完清一下缓存再试。
5.3 现象:中文文件名乱码或上传后名字变问号
原因:数据库字符集不是 utf8mb4,或者 MySQL 连接字符集没设对。SQLite 一般没这问题,MySQL 默认可能是 latin1 或 utf8(三字节,存不下 emoji)。
解决:建库时指定CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,MySQL 启动参数加--character-set-server=utf8mb4。已经建好的库要改表和列的字符集,麻烦,所以一开始就配对。
5.4 现象:容器重启后数据没了或配置丢失
原因:没挂 volume,或者挂载路径写错。Cloudreve 容器里数据在/cloudreve/data,上传文件在存储策略指定的目录,两个都要挂出来。
解决:compose 里确认./data:/cloudreve/data和上传目录的映射都在。如果之前没挂,数据在容器层,容器一删就没了,只能重新初始化。这是最没后悔药的一种,部署第一天就要挂好。
5.5 现象:缩略图一直转圈或 404
原因:存储策略没开缩略图、格式不支持、缓存目录不可写、ffmpeg 缺失,或者站点 URL 配错导致缩略图 URL 拼错。
解决:按 4.2 的顺序逐项排查,重点看后端日志的具体报错。视频缩略图确认 ffmpeg 在容器内可执行,docker exec -it cloudreve which ffmpeg能验证。
6. 进阶:把 Cloudreve 用成团队文件中枢的几个技巧
跑通只是起点,真正让 Cloudreve 在团队里站住脚,靠的是几个细节。第一,用 WebDAV 挂载。Cloudreve 支持 WebDAV,可以把网盘挂到本地文件管理器或 IDE 里,改代码、传素材不用开浏览器。地址一般是https://你的域名/webdav,用账号密码或应用专用密码登录。挂载后大文件操作走系统原生,体验比网页好很多。
第二,按用户组分配存储策略和配额。团队里不同角色需求不同,设计组要大空间放素材,开发组要 WebDAV 和 API,行政只要分享。在「用户组」里分别设存储策略、单文件上限、总配额,比所有人共用一个策略清晰得多。配额别设太死,留点余量,否则用户传一半被拒很影响体验。
第三,离线下载和定时任务。Cloudreve 的离线下载依赖 Aria2,配好后可以把磁力、直链丢给服务器下,下完自动进网盘。Aria2 的 RPC 地址和密钥在后台配,注意 Aria2 和 Cloudreve 要在同一网络能互通。定时任务可以清理过期分享、回收站,避免磁盘被垃圾占满。
第四,备份策略。要备份三样:数据库、data目录(含配置和密钥)、上传文件目录。数据库用mysqldump定时导,data 和上传目录用 rsync 或对象存储同步。密钥文件丢了,已加密的数据可能解不开,所以 data 目录的备份和数据库同等重要。我一般写个脚本每天凌晨跑,保留最近 7 天,出问题能快速回滚。
第五,监控和日志。Cloudreve 日志在 data 目录下,出问题先看日志。配合docker stats看资源占用,磁盘用df -h定期查。设个磁盘使用率告警,80% 就该处理,别等写满导致上传全失败。这些都是运维习惯,不复杂,但能省掉很多半夜救火。
我自己踩过最深的一次坑,是早期部署时图省事没挂 data 目录,升级容器时数据全丢,用户和分享记录一夜回到解放前。从那以后,任何有状态的服务,我第一件事就是确认 volume 挂载,第二件事是验证备份能恢复。Cloudreve 这套东西本身不复杂,难的是把部署、存储、备份、监控这几件事当成一个整体来对待。希望帮到你。
本文还有配套的精品资源,点击获取