用Docker+Cloudreve搭建私有云:一分钟搞定免费网盘

发布时间:2026/10/5 15:40:29
用Docker+Cloudreve搭建私有云:一分钟搞定免费网盘 上周有个朋友突然找我诉苦他要把几十个设计源文件发给客户微信传不了一百兆某度网盘下载要开会员还担心文件被莫名其妙吞掉。我说那你搞个私有云吧。他第一反应是那是搞技术的人玩的东西吧。我说其实你现在身边随便一台电脑给我一分钟我让你拥有一个免费、无广告、数据完全在自己手里的私有云。这篇文章就是把这套玩法完整写出来我用的是 Docker Cloudreve 这套组合全程只要一条命令小白也能照抄部署完以后你从浏览器就能上传、下载、共享文件还能挂载成电脑里的一个网络磁盘。我会把这台私有云的选型理由、部署步骤、外网访问方式、备份升级和常见坑位全部讲透目的是让你看完就能自己动手不用再看其他教程。1. 从网盘憋屈史说起为什么我最终选了一行命令的私有云1.1 大厂网盘到底哪里让人不爽先别急着谈技术我们来算一笔账。我自己其实是从很早的网盘时代就开始用云存储的人这些年免费空间从几个G缩到几百M下载速度从几兆一秒变成几十KB配套的广告和推广却越来越多。你存进去的文件理论上只属于你但使用体验一直被限速、广告、会员体系这三件事拿捏。更让人不踏实的是隐私。虽然网盘平台不会公开你的文件但资料在别人服务器上你要上传、要解析、要转码、要审核这些过程对普通用户来说是个黑盒。我见过周围有些做自由职业的朋友合同、身份证照片、客户源文件全放网盘上我说你们心真大。哪怕你不放敏感资料光是你积累的照片和文字也不希望哪天打开文件夹发现因为你太久没登录文件被清理了。所以私有云解决的不是存储空间不够的问题而是一个更基础的需求这些数据到底是放在别人的硬盘上还是放在你自己的硬盘上。私有云的本意就是把存储和服务的掌控权拿回来免费无广告只是顺带的赠品。1.2 私有云没有想象中高不可攀很多人听到私有云三个字第一反应是要搞一堆服务器、机柜、NAS还要会配置网络、负载均衡、分布式存储。实际上那个叫企业私有云。个人家用和几个人的小团队共享数据一台普通电脑就完全够用。你在家里用一台淘汰下来的笔记本或者一台几百块的迷你主机装个 Linux 系统或者干脆用 Windows然后装上 Docker最后跑一个云盘应用容器这个容器负责网页界面、用户登录、文件上传下载、分享链接、WebDAV 协议对接。外部设备通过浏览器访问就像用网盘一样但数据都在你自己的机器里。我所在的圈子有不少人一台旧 i3 笔记本、一块 2T 移动硬盘就撑起了全家人的照片和文件共享。这就是私有云最现实的样子——门槛比你想象的低得多。1.3 我对比过的几套开源方案和最终选择既然要自己控数据首选当然是开源方案。我前后试过 Nextcloud、Kodbox、Seafile、AList还有最终用的 Cloudreve。这几套的定位有差异我直接梳理成一张表方案部署难度资源占用中文支持免费无广告主要面向备注Nextcloud中等偏上较高PHP全家桶有官方中文开源免费多设备同步、协作办公功能全面但有点重小白配置会头皮发麻Kodbox中等中等原生中文有免费版在线网盘、文档预览可道云上手容易企业版收费入口明显Seafile中等中等有官方中文开源免费文件同步和加密同步很强但分享和界面设计相对偏工程师AList低很低原生中文免费聚合各类网盘、挂载分享更像管理工具不适合当主角Cloudreve低极低Go编写原生中文免费无广告轻量私有网盘单命令部署自带多存储策略我最后稳定用了 Cloudreve理由是它最贴合小白 1分钟部署 数据自我掌控这个定位。Go 语言编译出来的程序以轻量著称一个容器内存占用经常只有几十兆功能上又不缺支持用户体系、分享链接、离线下载、WebDAV还允许把存储桶接到阿里云OSS、腾讯云COS这类地方。Cloudreve 从底层设计上就是一个私有网盘不是为极客准备的玩具。可能你已经发现了我没有提那些商业化私有云盒子和成品NAS系统。不是说它们不好是它们跟你自己动手部署不是一回事。成品NAS买回来点几下也能用但价格不便宜系统升级、硬盘迁移、数据备份完全依赖厂商节奏。Docker 自建的方式所有逻辑你都看得见即使哪一天不用 Cloudreve 了你的文件目录也还在硬盘上换个反向代理随时接续。2. 装好Docker你的服务器才算真正开始2.1 三种常见设备选Docker的差异私有云需要一个长期开机的宿主这台机器可以是 Windows 电脑、Mac 电脑、Linux 服务器或者任意一台瘦终端。Docker 在这三类系统上的安装方式不太一样我按最常见的场景走一遍。Windows 用户早期 Docker 在 Windows 上跑需要装一个虚拟机体验很折腾。现在基本是安装 Docker Desktop它会自动让你启用 WSL2 后端。建议在控制面板-启用或关闭Windows功能里把适用于 Linux 的 Windows 子系统和虚拟机平台勾上然后重启。装完 Docker Desktop设置里把 WSL2 作为默认后端之后所有 docker 命令都能直接用。macOS 用户同样是 Docker DesktopApple Silicon 芯片的机器跑起来性能很稳内存占用比 Windows 环境还低一些。下载安装包后拖进 Applications 就行没什么坑。Linux 服务器/迷你主机没有图形界面直接命令行安装。如果你用的系统是 Ubuntu/Debian 系官方提供了一键脚本但我不建议盲敲curl | sh。更稳妥的方式是用系统自带的包管理器安装 docker.io 或 docker-ce然后把当前用户加入docker组这样不用每次敲命令都加 sudo。无论哪条路装完以后在终端敲一行docker version能看到 client 和 server 两段版本信息就说明 Docker 服务已经在跑了。这是后面一切操作的基础。2.2 部署前的目录规划与数据心智模型Docker 对小白来说最反直觉的一点是容器里的文件系统是临时的如果不做持久化容器一删数据就没了。心智模型可以用快递柜来理解容器是一个临时包裹里面放着程序文件而宿主机的目录是地下仓库只有你主动把包裹里的抽屉对接给仓库数据才真正落下来。部署 Cloudreve 之前我先在宿主机上规划好一个数据根目录比如/data/cloudreve或 Windows 下的D:\docker\cloudreve。在这个目录下会对应出几个子目录uploads放用户上传的文件avatar放头像temp放临时文件另外还会有一个conf.ini配置文件。这样设计的好处是整个服务的所有重要数据被收敛在一个目录里备份、迁移、重装都只跟这一个目录打交道。规划的时候顺便看一眼硬盘空间。df -h在 Linux 下可以查看挂载点容量Windows 用户直接在资源管理器里看分区剩余空间。我建议至少留出大于你预期数据总量一半的余量因为后续你很可能还想在 Docker 里跑别的服务。2.3 Docker安装与加速源配置的小白注意点Docker 装完只是第一步真正让小白劝退的是镜像拉不动。docker pull走的是公共镜像仓库国内网络环境有时会很慢一条命令卡半小时。这里有两个选择一是等Cloudreve 官方镜像体积不算大耐心点也能拉下来二是配置镜像加速器说白了就是指定一个国内可访问的镜像源来下载。配置方式大同小异Windows/Mac 在 Docker Desktop 的 Settings 里找到 Docker Engine 或 Registry mirrorsLinux 则编辑/etc/docker/daemon.json加入一行 registry-mirrors 配置然后重启 Docker。注意不要同时填太多源一般一两个够用即可。写配置的时候要保证 JSON 格式正确我见过不少人多了一个逗号重启后 Docker 直接起不来还以为是系统坏了。如果你实在不想碰加速配置也可以直接在部署时耐心等待或者把 Docker 镜像换成人人都能拉到的其它节点。这个环节完全是环境问题不影响私有云本身的功能。3. 一分钟部署全程解构那条docker run命令3.1 一键命令的逐段拆解假设你的 Docker 已经跑起来现在进入真正核心的部分。我要在终端里执行类似下面这条命令docker run -d \ --name cloudreve \ --restart unless-stopped \ -p 5212:5212 \ -v /data/cloudreve/uploads:/cloudreve/uploads \ -v /data/cloudreve/conf.ini:/cloudreve/conf.ini \ -v /data/cloudreve/temp:/cloudreve/temp \ -v /data/cloudreve/avatar:/cloudreve/avatar \ cloudreve/cloudreve:latest如果你是第一次用 Docker这条命令别看晕它的每一段都是在说把哪个抽屉对接进哪个仓库docker run -d创建并后台运行一个容器-d表示不会占住你的终端。--name cloudreve给这个容器起个名字方便以后用docker logs cloudreve、docker stop cloudreve去操作它。--restart unless-stopped这是小白最容易忽略但极其重要的一行。它让 Docker 在开机时自动拉起容器在容器意外退出时自动重启。没有它宿主机一重启你的私有云就静默宕机了而且你不会第一时间发现。-p 5212:5212端口映射。左边5212是宿主机对外暴露的端口右边5212是 Cloudreve 程序内部的监听端口。以后你在浏览器访问http://宿主机IP:5212就是访问私有云。四个-v分别把配置、上传文件、临时目录、头像目录挂载到宿主机。其中conf.ini那个挂载要提前准备一个空文件否则 Docker 会误以为你要挂载一个目录在容器里生成一个同名文件夹最终导致配置写不进去。命令里冒号后面的路径是容器内部路径Cloudreve 官方在这一点上做得比较规矩路径是固定的。唯一要改的是冒号前的宿主机路径Windows 下写成类似D:\docker\cloudreve\conf.ini也可以注意盘符和反斜杠。如果是 Linux 服务器建议路径里不要有中文和空格。3.2 第一次启动管理员账号和初始密码去哪找命令执行完终端会输出一长串容器 ID这表示容器已经创建并启动了。很多小白会在这一步以为我密码呢然后对着登录页一脸茫然。Cloudreve 对初学者的一个特点是初始管理员账号密码写在启动日志里。执行下面这条命令docker logs cloudreve日志里会有一行类似这样的信息Admin username: admin Admin password: 某个随机字符串这就是你第一把进入系统后台的钥匙。注意这个随机密码只有第一次初始化会输出之后不会再出现而且官方也建议登录后立刻改掉。我第一次部署的时候没存下密码后来只好删容器重新建才重新拿到口令。这个坑你必须躲开。如果你发现docker logs输出的内容很少甚至没有说明你可能用了旧版本镜像或者日志被清过。更禁用但有效的办法是删掉容器重新跑一次docker run重新生成管理员口令不过要注意如果已经配置过数据不要乱删。3.3 验证安装不是看到界面就结束能打开登录页只算成功了一半。我的习惯是部署完执行一套三连验证确保这台私有云真的能干活访问http://127.0.0.1:5212或http://局域网IP:5212确认登录页能加载。用日志里的初始账号密码登录进入后台创建自己的普通用户再退出后台用普通用户登录发一个几十M的测试文件上去。上传完成后在宿主机看一眼/data/cloudreve/uploads对应的目录里出现了新文件确认数据确实落在宿主机硬盘上。第 3 步是很多人会跳过的。只有当你亲眼看到文件出现在你规划的目录里你才算真正理解私有云和公共云盘的区别不是云端是你自己的磁盘。这一步验证完一套基础可用的私有云已经上线全程确实只需要一分钟剩下的时间都花在拉镜像上。4. 让私有云真正私有且好用存储、外网访问、备份与升级4.1 存储策略与容量规划Cloudreve 有个很强的地方在于存储策略。它支持本地存储也支持把文件放到对象存储平台。对个人用户我强烈建议先用本地存储也就是文件直接落在宿主机挂载的uploads目录下。理由很简单数据在自己手里恢复起来最直接不依赖任何第三方账号。容量规划上先想清楚这网盘主要是干嘛的。如果是存文档、照片、小视频一块几百 G 的硬盘能撑很久如果你打算拿它存高清电影素材那规划应该变成接大盘。Cloudreve 本身不对文件大小做硬性限制真正限制在上游如果你用了 Nginx 反向代理默认的单次上传体积限制是 1M必须手动改成更大体积如果你不经过反向代理直接裸跑一般不需要额外配置。我建议从一开始就在后台把用户配额设好别等到有人把硬盘塞满再来清。在管理面板-用户管理里可以给每个用户设置存储额度。对家人朋友给个 50-100G 足够给客户临时共享用分享链接连单个文件大小都能控制住。4.2 外网访问的几种靠谱姿势私有云搭建在内网机器以后你马上会面对一个问题人在外面怎么访问家里的文件。我先说结论在今天的网络环境里最简单的路线是买一台便宜的云服务器做中继或者用路由器的公网IP能力。如果你所在的宽带分配到了公网 IP或者你愿意折腾 IPv6那最正统的做法是在路由器上做一个端口转发把外网的某个端口映射到内网那台宿主机的5212端口然后在宿主机或云服务器上再套一层反向代理用 Nginx 或 Caddy 把 HTTP 加密成 HTTPS。Caddy 是我个人偏好的选择因为它的配置文件很短会自动申请和续期证书省掉手工处理证书的烦恼。加完 HTTPS 以后只要你知道一个域名或访问地址任何人在任何地方都能安全地打开你的私有云界面。如果家里没有公网 IP最简单的方案是用支持 UDP 打洞的开源组网工具把多台设备组成一个虚拟局域网手机和电脑上装上客户端在外面也能像在家里一样访问http://内网IP:5212。这种方案对小白友好但需要客户端常驻适合你自己用、家人用不太适合给陌生客户临时发链。还有一种更省事但需要花钱的方案直接把 Docker 跑在一台有公网 IP 的云服务器上。数据不在本地硬盘但服务端完全是你控制照样符合数据自己掌控的定义。三种方式没有绝对优劣我个人的建议是先用局域网用起来再逐步加反向代理网络复杂度最后再升级。4.3 备份意识数据自己掌控的前提是备份这是我这篇里最掏心窝子的一段。数据自己掌控不是把你硬盘一塞就完事而是你要有备份。很多人觉得数据放在自己硬盘上比放在网盘里安全但如果硬盘突然挂了又没有备份那就什么都没了。而且放在自己手里意味着你要为自己承担备份责任平台替你兜底的因素消失了。Cloudreve 的数据分两部分一部分是用户上传的实际文件另一部分是系统配置、用户账号、文件索引的数据库。对它的备份策略很简单定期把宿主机上/data/cloudreve这个目录整体打包然后拷到另一块磁盘、另一台机器或者按你的习惯上传到其它存储。Linux 下我常用一条 crontab 定时命令tar czf /backup/cloudreve-$(date %F).tar.gz /data/cloudreve这个压缩包就是全部家当。恢复的时候把压缩包解压到新机器相同路径重新docker run挂载同一个目录配置和文件就回来了。一台私有云真正的安全感不是硬件而是这套备份习惯。我自己的频率是每周一次自动打包重要版本更新前再手动加一次。4.4 升级与迁移Cloudreve 更新不算频繁但偶尔会发新版本。升级容器前先备份再执行docker pull cloudreve/cloudreve:latest docker stop cloudreve docker rm cloudreve docker run -d ... 同前面的命令看到没有升级流程其实就是拉新镜像、删旧容器、重新跑同一套挂载命令。因为数据都在宿主机目录里容器删掉不会伤到数据。如果你用的是 docker-compose那就更简单直接docker compose pull docker compose up -dCompose 会自动对比镜像差异并重建容器。平时维护时建议创建 docker-compose.yml 保存一份这样可以不用记住那一长串 docker run 参数。迁移到新机器同理把备份目录解压到新机器的相同位置再跑一次 compose 或 docker run 命令即可无缝接续。5. 我踩过的坑希望你直接跳过5.1 端口冲突与防火墙拦路部署中最常见的现象是命令执行成功网页打不开。第一嫌疑就是防火墙把端口拦了。Windows 和 macOS 桌面系统一般会弹窗询问是否允许 Docker 监听点允许就行Linux 服务器则要确认5212端口是否在防火墙放行列表中。Ubuntu 的 ufw 下可以用sudo ufw allow 5212/tcp第二嫌疑是端口被别的进程占用了。5212不算常见端口但如果你机器上之前跑过别的服务可能冲突。Linux 下用lsof -i :5212查看Windows 用netstat -ano | findstr 5212。如果被占把宿主机的映射端口换成一个高位端口比如-p 9521:5212访问时改成9521即可。记住容器内部端口不要改只有外部映射端口可以动。5.2 上传大文件失败排查我遇到过不少次类似场景小文件秒传大文件传一会就报错。排查顺序一般是这样的先看磁盘空间df -h确认不是硬盘满了。如果用了 Nginx 或 Caddy 反代检查反代配置里的client_max_body_size或默认限制设为0或足够大的值。再看 Cloudreve 后台的存储策略确认分片上传和断点续传开关是开启的尤其是网络不稳定的时候分片能救命。最后排查 temp 临时目录的挂载是否有剩余空间。大多数时候问题出在第 2 步因为默认服务能传小文件给人感觉一切正常实际上大文件被反代拦在半路。如果你不经过反代直接裸跑基本不会踩这个雷。5.3 Docker容器重启后配置丢失的真相用 Docker 跑服务最大的噩梦就是升级或重启过后数据不翼而飞。其实不是数据丢了而是你没有做数据持久化所有文件写在容器可写层里容器一旦删除数据就随之下葬。我之前见过有人图省事部署 Cloudreve 只挂载了uploads目录其他三个挂载点全部省略。结果镜像更新后新容器里没有旧的conf.ini配置程序只能重新初始化旧的管理员账号和存储策略全部归零而uploads里又留着旧文件。最后只能靠第三方工具手动恢复索引非常痛苦。正确做法就一句话所有需要持久的目录都挂载出来。Cloudreve 官方给出的四个挂载点一个都不能少。尤其是conf.ini它在容器里是一个文件宿主机也要对应一个文件不是目录。如果你先创建了/data/cloudreve/conf.ini这个空文件Docker 挂载就没有歧义。5.4 用官方工具做健康检查的几个实用命令容器跑久了迟早会遇到怎么今天访问变慢了是不是服务挂了之类的问题。我常用的诊断命令就三条docker ps docker logs --tail 100 cloudreve docker stats cloudrevedocker ps看容器是否在运行如果状态不是 Up结合--restart unless-stopped基本能自动恢复docker logs看服务日志上传失败、登录失败、磁盘异常都会记录在这里docker stats看实时 CPU 和内存占用如果内存长期接近容器上限考虑加内存或者拆服务。日常用到最多的一句是docker logs --tail 100 cloudreve它能帮你定位用户反馈的九成问题。记住这些命令你就不用每次都重启容器草率处理了。如果让我给后来者一个建议那就是别把私有云当成一个一次性装完的东西。它更像一个要养起来的习惯数据目录有计划备份有节奏Docker 镜像有更新。我现在的用法是白天在办公室电脑上用 WebDAV 挂载私有云自动同步工作文件晚上回家手机打开相册自动备份偶尔家里人需要某个文件我直接在后台生成一个自定义分享链接发过去完全无广告。这套环境稳定跑了大半年后我还做了一件事把同一台机器上的 Docker 环境复用起来在它旁边跑了一些其他自托管服务。这也是我最初选 Docker 的隐藏好处——你得先有一个能用的插座以后想插什么服务才有地方插。你家里那台吃灰的旧电脑现在终于有理由通电了。