人物:我,29 岁退伍兵转的野路子技术宅 / 时间:上上个周末 + 两个晚上 / 地点:上海家里,书桌角落那台 13W 的 2014 Mac mini / 事件:朋友吐槽网盘会员太贵,我把吃灰的机器拉出来,给他搭了个类似蓝奏云的运营级网盘,公网 IP 直接访问

事情是这样的。上周五晚上,我一个老战友在微信上跟我倒苦水:他新开的小店要存一堆产品图、报价单、合同扫描件,还得时不时发文件给客户。百度网盘免费版限速限得他想骂人,充会员一年两百多,他心疼;坚果云一年也是两三百,他嫌贵。

他说:"你那不是整天折腾服务器吗?能不能给我搞个网盘?我文件真不多,十几个 G 到头了,就要个能上传能下载、能生成链接发给别人的。"

我一想,还真行。手头正好有台吃灰大半年的 2014 款 Mac mini,上个月刚被我装上 Ubuntu 24.04 单系统(这事我写过一篇实录,感兴趣的翻我前面文章),待机 13W,7×24 挂着不心疼。而且这机器现在就是台 Linux 小服务器,跑个网盘绰绰有余。

最关键的是——我老家那根宽带有公网 IP(电信申请的,之前也写过一篇怎么搞公网 IP 的文章),加上我的域名 moxiaoa.com 已经备案,域名解析 + 公网 IP 就能在外面直接访问。宽带费反正每个月都在交,机器电费一年才 60 块,等于白捡一台免费云服务器。

于是,说干就干。这篇把整个过程写清楚,从选型到安装到踩坑,命令全给你。

---

一、选型:为什么是 Cloudreve,而不是 Nextcloud

"类似蓝奏云的网盘"——蓝奏云的特点是什么?上传简单、分享链接下载快、不整那些花里胡哨的。按这个标准筛开源网盘:

方案语言特点适合场景
CloudreveGo单二进制、SQLite 起步、自带用户/分享/后台管理小型运营网盘,最接近蓝奏云体验
NextcloudPHP功能全家桶,同步/日历/协作个人全功能,重,小机器跑不动
ZpanGo极简,单文件分享只要分享链接,不要用户系统
FileBrowserGo就是个文件管理器自己管理文件,不适合给朋友用

我最后选了 Cloudreve,理由三条:

  1. 轻。Go 写的,一个二进制文件 + 一个 SQLite 数据库就能跑,2014 Mac mini 双核 i5 完全无压力。
  2. 有用户系统。能注册、能登录、能后台管理,朋友自己上传自己管理,不用我天天帮他操作——这才是"能运营"。
  3. 分享链接体验跟蓝奏云一个路子。上传完点"分享",生成一个链接,对方点开就能下载,不用登录,不用装客户端。

---

二、准备工作

我用的二级域名是 pan.moxiaoa.com,解析到老家宽带的公网 IP。后面装 DDNS 之前,先用临时 IP 顶着。

---

三、安装 Cloudreve(二十分钟搞定)

1. 下载

Cloudreve 是开源项目,GitHub 上有官方 Release。到 releases 页面下载 cloudreve_3.8.x_linux_amd64.tar.gz(Mac mini 是 Intel 芯片,选 amd64;如果你是 ARM 机器选 arm64):

cd /opt
sudo wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz
sudo tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz
sudo chmod +x cloudreve

版本号以 GitHub Releases 页面最新版为准,命令里的 3.8.3 是我写这篇文章时的版本。

2. 首次启动(生成管理员账号)

sudo ./cloudreve

第一次启动会做两件事:生成 cloudreve.db(SQLite 数据库)和 conf.ini(配置文件),并在终端里打印初始管理员账号和密码——账号固定是 admin,密码是随机生成的,务必截图记下来,这个密码只显示这一次!

踩坑 1:初始密码没记。 这是新手最容易翻的车。Cloudreve 只打印一次初始密码,丢了只能删库重来。所以看到密码第一时间记到备忘录里。

3. 配置 conf.ini

先用 Ctrl+C 停掉,然后编辑配置文件:

sudo vim /opt/conf.ini

conf.ini 里几个关键项:

[System]
# 监听地址,默认 127.0.0.1:5212,生产环境建议保持这个,由 Nginx 反代
Listen = 127.0.0.1
Port = 5212

[Database]
Type = sqlite
DBFile = /opt/cloudreve.db

文件不多就用 SQLite,够用且零维护。你要是文件量大,再换 MySQL,但没必要。

4. 正式后台启动

cd /opt
sudo nohup ./cloudreve > /opt/cloudreve.log 2>&1 &

等两秒,验证一下服务起来了:

curl http://127.0.0.1:5212

返回 Cloudreve 的欢迎页面就是起来了。

---

四、反向代理 + HTTPS(这一步让朋友访问更体面)

Cloudreve 默认监听 127.0.0.1,只能本机访问,必须用 Nginx 或 Caddy 反代出去。我用的是 Caddy——最大的好处是自动申请和续期 HTTPS 证书,不用手动折腾 certbot。

1. 安装 Caddy

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/deb.deb' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install -y caddy

2. 配置 Caddyfile

sudo vim /etc/caddy/Caddyfile

内容:

pan.moxiaoa.com {
    reverse_proxy 127.0.0.1:5212
    encode gzip
}

就三行。reverse_proxy 把公网请求转发到本机 5212 端口,encode gzip 开启压缩。

3. 启动 Caddy

sudo systemctl restart caddy
sudo systemctl enable caddy

Caddy 会自动为 pan.moxiaoa.com 申请 Let's Encrypt 证书并配置 HTTPS。等十几秒,浏览器打开 https://pan.moxiaoa.com,看到 Cloudreve 登录页就成了。

踩坑 2:HTTPS 证书申请失败。 如果 Caddy 报错,八成是域名解析没生效。先在另一台电脑上 ping pan.moxiaoa.com 确认解析到你的公网 IP,再重启 Caddy。

---

五、开机自启(服务器不能重启后罢工)

Mac mini 断电重启是常态(家里偶尔跳闸),必须让 Cloudreve 开机自动跑。写个 systemd 服务:

sudo vim /etc/systemd/system/cloudreve.service
[Unit]
Description=Cloudreve
After=network.target

[Service]
WorkingDirectory=/opt
ExecStart=/opt/cloudreve
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now cloudreve
sudo systemctl status cloudreve

看到 active (running) 就成了。以后机器重启,Cloudreve 自动拉起,不用管。

---

六、给朋友开通账号(运营细节)

服务跑起来之后,登录管理员后台(admin + 刚才记的密码),做这几件事:

  1. 改管理员密码:设置 → 账号,把初始密码换掉。
  2. 开启注册 + 邀请:设置 → 站点,把"允许注册"打开(也可以只开邀请注册,自己控制谁能用)。
  3. 限制上传大小:后台 → 存储策略 → 编辑"本机存储",把单文件上限设为 500MB(家庭宽带上行就 20-50M,太大了传不动)。
  4. 设置配额:给朋友开个账号,配额给 20GB,够他用了。

然后告诉朋友:

打开 pan.moxiaoa.com,注册个账号,直接传文件,传完点"分享",生成链接发给客户,对方打开就能下载,不限制速度。

朋友那边体验是什么样?上传快(取决于我们宽带上行)、下载快(HTTPS + gzip)、链接打开即下、不用装客户端——这就是他要的"蓝奏云"。

---

七、DDNS:公网 IP 会变,域名不能死(最重要的一步)

家用宽带的公网 IP 是动态的,隔几天就变一次。你今天解析的是这个 IP,过两天 IP 变了,朋友就打不开了。解决办法是 DDNS——自动检测 IP 变化并同步到 DNS 解析。

我用的是 DDNS-Go,开源小工具,支持国内主流域名商(阿里云、腾讯云、Cloudflare 等):

# 下载(amd64 版本,注意和 Cloudreve 一样选对架构)
cd /opt
sudo wget https://github.com/jeessy2/ddns-go/releases/latest/download/ddns-go_6.x.x_linux_x86_64.tar.gz
sudo tar -zxvf ddns-go_*.tar.gz
sudo chmod +x ddns-go

# 启动(默认端口 9876)
sudo nohup ./ddns-go > /opt/ddns-go.log 2>&1 &

然后在浏览器打开 http://127.0.0.1:9876,配置:

  1. 选你的 DNS 服务商(我用腾讯云 DNSPod,填上 API 密钥)
  2. 添加要同步的域名:pan.moxiaoa.com
  3. 保存,DDNS-Go 就会每隔几分钟检测一次公网 IP,变了自动改解析记录

再写个 systemd 让它开机自启(跟 Cloudreve 一样的写法,照着第五步改个名字就行)。

踩坑 3:IP 变了但域名还指着旧 IP。 就算有 DDNS,也要把域名解析记录的 TTL 调短(比如 300 秒),这样 IP 一变,几分钟内全网生效,不会出现"朋友白天还好好的,晚上就打不开了"的尴尬。

---

八、踩坑清单(这次实操全在这)

症状原因解法
初始管理员密码没记只打印一次看到密码立刻存备忘录,丢了只能删库重来
HTTPS 证书申请失败域名解析没生效ping 确认解析到公网 IP 再重启 Caddy
手机访问正常,电脑打不开DNS 缓存刷新 DNS(Windows: ipconfig /flushdns;Mac: sudo dscacheutil -flushcache)
传大文件超时断连宽带上行小 + Caddy 默认超时存储策略限制单文件 500MB;Caddyfile 加 request_body { max_size 500MB }
过几天链接打不开公网 IP 变了装 DDNS-Go 自动同步,DNS TTL 调短
重启后网盘挂了没配开机自启写 systemd 服务,Restart=always
朋友注册了但传不了文件没设存储策略/配额后台给账号设置配额,单文件大小上限调好

---

收尾

折腾两天,朋友那边已经用起来了。他前两天跟我说:"这玩意儿比百度网盘好用多了,链接发出去客户直接就能下,我产品图更新也快。"

算笔账:宽带费本来就要交(69 块/月),机器电费一年 60 块,域名备案早弄完了——几乎是零边际成本,白得一台给朋友运营的网盘服务器。而朋友要是去开网盘会员,一年两三百,还限速。

这台 2014 Mac mini 的定位又清晰了一层:不追求性能,就是 7×24 安静省电地干杂活——内网穿透、下载机、家庭中控、给朋友跑网盘,全是它的主场。

后面我打算继续折腾:把 Cloudreve 接上对象存储做容量扩展、给网盘加个自动备份、还有 Mac mini 扩容 SSD 的那篇实录。想要第一手消息,关注我就行,也可以访问 moxiaoa.com 获取更多信息。

有问题想交流的朋友,可以加我微信:lige0552