VPS
VPSWOW - 精品VPS良心测评

利用 VPS 搭建无限空间私人云盘:三种方案从入门到数据完全掌握

作者注: 文章提供三套完整方案,从最简单的网盘挂载出发,逐步升级到真正的所有数据自己做主。 Rclone 的配置流程对所有云盘平台(Google Drive、百度网盘等)90% 相同, 本文会将通用流程写清楚,差异部分单独列出。

利用 VPS 搭建无限空间私人云盘:三种方案从入门到数据完全掌握

作者注: 文章提供三套完整方案,从最简单的网盘挂载出发,逐步升级到真正的所有数据自己做主。 Rclone 的配置流程对所有云盘平台(Google Drive、百度网盘等)90% 相同, 本文会将通用流程写清楚,差异部分单独列出。


目录

  1. 引言:为什么要自建网盘
  2. 三方案对比:选择适合自己的搭建方案
  3. 公共基础环境搭建(三方案共用)
  4. Rclone:通用配置流程,包括不同网盘的配置
  5. 方案一:低成本大空间(网盘挂载)
  6. 方案二:加密后存网盘(隐私增强)
  7. 方案三:数据完全自存(MinIO 真正自主)
  8. Cloudreve 安装与通用配置
  9. Nginx + HTTPS 配置
  10. 高级功能:Aria2 离线下载
  11. 三方案成本与隐私对比
  12. 安全加固建议
  13. 总结

1. 引言

为什么要自建私人云盘?

在这个数据就是资产的时代,我们的照片、文档、代码、影音资料正以指数级速度增长。在哪里储存我们的数据慢慢变成一个问题,当然,市面上不乏成熟的商业云存储——百度网盘、阿里云盘、Google Drive、iCloud……但这些服务有一个共同的本质问题:

你的数据,不在你手里。

  • 百度网盘会扫描文件内容,触发"和谐"机制导致文件消失,甚至不告诉你存的数据没了,这就很坑了。
  • Google Drive 有严格审查,曾因检测到特定内容封禁账号
  • 这些商业的云服务随时可能涨价、直接关停,数据面临风险
  • 你无法自定义功能,无法控制访问权限,无法随机集成工作流,因为商业网盘一般不提供接口。

自建云盘能解决这些问题——但"自建"本身也有不同层次。很多教程推荐"VPS + Rclone 挂载网盘 + Cloudreve",这个方案解决了访问控制、功能定制、速度的问题,但有一个关键矛盾需要说清楚:

方案一(网盘挂载)的本质是"功能增强",而不是"隐私保护"。 数据仍然明文存储在 Google / OneDrive / 百度的服务器上,平台方在技术上完全可以读取你的文件。

这并不意味着方案一没价值。它解决的是:绕过商业网盘的限速、实现多用户管理、支持离线下载、用自己的域名访问。如果你存的是影视资源、软件工具这类不敏感的内容,方案一完全够用。

如果你在意文件内容的隐私,就需要方案二(加密后再存)或方案三(完全不用第三方存储)。

本文提供三套完整方案,我会诚实地说明每套方案的使用与劣势,让你根据自己的需求做出选择。


2. 三方案对比

在动手之前,先把三套方案的本质差异看清楚:

对比项 方案一:网盘挂载 方案二:加密后存网盘 方案三:MinIO 完全自存
核心价值 功能增强 功能增强 + 内容隐私 完全数据自主
数据存储位置 第三方网盘(明文) 第三方网盘(密文) VPS 本地磁盘
平台能读取文件内容吗 ✅ 能 ❌ 不能(只有乱码) ❌ 不能
平台能看到文件名吗 ✅ 能 ❌ 不能(文件名也是乱码) ❌ 不能
存储空间 大(15 GB 起免费) 大(15 GB 起免费) 受限于 VPS 磁盘
月成本 $0 - $8 $0 - $8 $5 - $20
在线视频播放 ✅ 流畅 ⚠️ 需经 VPS 解密中转 ✅ 流畅
数据丢失风险 平台保障 平台保障(但无法读取) 需自行备份
适合人群 追求低成本大空间、功能定制 存放敏感文件、在意隐私 极高隐私需求或不信任任何第三方

一句话总结: - 方案一:用云服务公司的库房,但是自己装门锁,而且可以将许多不同的网盘聚合起来统一管理,可以设置多用户分配不同的空间。 - 方案二:用云服务公司的库房,但把所有东西装进保险箱再存进去,云服务公司只看到一堆保险箱。方案一的功能也都有,就是会产生速度传输的损耗,毕竟要解密。 - 方案三:自己买地建仓库,所有东西自己管,你是数据的完全拥有者。但是需要花钱买存储磁盘空间。


3. 公共基础环境搭建

以下步骤是三个方案共同需要的基础环境,无论选哪套方案,都从这里开始。

VPS 选择建议

方案 CPU 内存 磁盘 带宽推荐
方案一 1 核 512 MB 10 GB 不限
方案二 1 核 1 GB 15 GB 不限
方案三 1 核 2 GB 50 GB+ 100 Mbps+

推荐 VPS 提供商:本站主页尽是优质商家,按需购买,不要上头,买太多机子放着不用也是浪费

本文使用 Ubuntu 22.04 LTS,Debian 11/12 命令完全相同。

连接服务器

ssh root@YOUR_VPS_IP

# 如果使用密钥登录
ssh -i ~/.ssh/id_rsa root@YOUR_VPS_IP

更新系统并安装基础依赖

apt update && apt upgrade -y

apt install -y \
  curl \
  wget \
  unzip \
  git \
  fuse3 \
  nginx \
  certbot \
  python3-certbot-nginx \
  ufw \
  fail2ban \
  htop \
  vim

各工具用途: - fuse3:FUSE 内核模块,Rclone 挂载的底层依赖,必须安装 - nginx:反向代理,用于绑定域名和开启 HTTPS - certbot:Let's Encrypt 免费 SSL 证书申请工具 - ufw:防火墙管理 - fail2ban:自动封禁暴力破解 IP

配置基础防火墙

# 默认拒绝所有入站流量
ufw default deny incoming
ufw default allow outgoing

# 允许 SSH(务必先执行这一步,否则会把自己锁在服务器外)
ufw allow 22/tcp

# 允许 Web 流量
ufw allow 80/tcp
ufw allow 443/tcp

# 启用防火墙
ufw enable

# 确认规则
ufw status verbose

开启 FUSE 的 allow_other 支持

Rclone 挂载时需要允许其他用户(如 Cloudreve 进程)访问挂载点:

echo "user_allow_other" >> /etc/fuse.conf

至此,基础环境准备完毕。


4. Rclone:通用配置流程与各平台差异

这是本文的核心章节。Rclone 的配置和挂载命令对所有平台的流程基本一致,只有"选存储类型"和"填写认证信息"这两步因平台而异。

安装 Rclone

curl https://rclone.org/install.sh | bash

# 验证安装
rclone --version
# 输出类似:rclone v1.6x.x linux/amd64

通用配置流程(所有平台通用)

执行:

rclone config

你会进入交互菜单,对所有平台,以下步骤完全相同

第一步:新建远端

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

输入 n

第二步:输入远端名称

name>

输入一个你自己能记住的名字,后续挂载命令中会用到这个名字。建议用平台名称,例如 gdriveonedrivebaidu 等,只能用英文字母和数字

第三步:选择存储类型(⚠️ 此步骤因平台而异,见下方速查表)

Storage>

输入你的平台对应的类型名称(见下方速查表)。

第四步:填写认证信息(⚠️ 此步骤因平台而异,见下方速查表)

client_id>
client_secret>

部分平台可以直接回车留空,部分必须填写,详见下方速查表。

第五步:选择访问权限(大多数平台此步出现)

scope> 1

通常选 1(完整读写权限)。

第六步:其余选项一律回车跳过

root_folder_id>       ← 直接回车
service_account_file> ← 直接回车
Edit advanced config? n

第七步:选择授权方式(VPS 必须选 n)

Use web browser to automatically authenticate rclone with remote?
y/n> n

VPS 是无头服务器,没有浏览器,必须输入 n

此时 Rclone 会生成一个授权 URL,复制这个 URL 在你本地电脑的浏览器中打开,完成授权后会得到一串 token,把 token 粘贴回 VPS 终端按回车。

第八步:确认保存

y) Yes this is OK
y/e/d> y

输入 y 保存,然后输入 q 退出配置界面。


各平台速查总览

五个平台按接入方式分为三类,请先对照下表确认自己的平台属于哪一类,再按对应章节操作:

平台 接入方式 Rclone Storage 类型 认证方式 难度
Google Drive Rclone 原生支持 drive OAuth(client_id 可留空)
百度网盘 Rclone 原生支持 baidu OAuth(必须自己申请 AppKey ⭐⭐
阿里云盘 需先安装 Alist 中间层 webdav Alist 扫码授权 ⭐⭐⭐
夸克网盘 需先安装 Alist 中间层 webdav Alist 填 Cookie ⭐⭐⭐
115网盘 需使用社区修改版 Rclone 115(修改版特有) Cookie(UID/CID/SEID/KID) ⭐⭐⭐

平台一:Google Drive

Google Drive 是 Rclone 支持最完善的平台,client_idclient_secret 可以直接留空,使用 Rclone 内置的 OAuth 应用即可。

执行 rclone config 后,按以下顺序输入:

n/s/q> n                        # 新建远端
name> gdrive                    # 远端名称,自定义,建议用 gdrive
Storage> drive                  # 存储类型填 drive
client_id>                      # 直接回车留空
client_secret>                  # 直接回车留空
scope> 1                        # 选 1(完整读写权限)
root_folder_id>                 # 直接回车
service_account_file>           # 直接回车
Edit advanced config? n         # 输入 n
Use web browser to automatically authenticate rclone with remote?
y/n> n                          # VPS 无浏览器,必须输入 n

此时终端会打印一个授权 URL,在本地电脑浏览器打开,用 Google 账号登录并点击"允许",完成后页面显示一串 token,复制后粘贴回 VPS 终端按回车:

Enter verification code> 粘贴token后回车
Configure this as a Shared Drive (Team Drive)?
y/n> n                          # 个人 Drive 选 n
y) Yes this is OK
y/e/d> y                        # 确认保存
q                               # 退出配置

测试连接:

# 列出 Google Drive 根目录
rclone lsd gdrive:
# 有内容则显示目录列表,空 Drive 不报错即为成功

创建挂载点并挂载:

mkdir -p /mnt/gdrive

rclone mount gdrive: /mnt/gdrive \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --daemon

# 验证挂载
ls /mnt/gdrive
echo "test" > /mnt/gdrive/test.txt && cat /mnt/gdrive/test.txt
# 输出 test 即正常,登录 Google Drive 网页版也能看到 test.txt

配置 systemd 开机自动挂载:

cat > /etc/systemd/system/rclone-gdrive.service << 'EOF'
[Unit]
Description=Rclone Mount - Google Drive
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
NotifyAccess=all
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/rclone mount gdrive: /mnt/gdrive \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --umask 002 \
  --log-level INFO \
  --log-file /var/log/rclone-gdrive.log
ExecStop=/bin/fusermount -u /mnt/gdrive
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable rclone-gdrive
systemctl start rclone-gdrive
systemctl status rclone-gdrive
# Active: active (running) 即成功

平台二:百度网盘

百度网盘同样是 Rclone 原生支持,但不允许使用 Rclone 内置的 OAuth 应用,必须自己去百度开放平台申请 AppKey,否则授权会报错。

第一步:申请百度开放平台 AppKey

  1. 打开 https://pan.baidu.com/union/main,用百度账号登录
  2. 完成开发者实名认证(需绑定手机号)
  3. 进入控制台 → 点击创建应用
  4. 填写以下信息: - 应用类型:选个人 - 应用名称:随意,如 rclone-personal - 接口能力:勾选个人网盘 - 回调 URL:填写 http://localhost:53682/(固定值,Rclone OAuth 回调用)
  5. 提交,创建成功后进入应用详情页,找到并记录: - AppKey → 这是 client_id - SecretKey → 这是 client_secret

第二步:执行 rclone config

n/s/q> n
name> baidu                     # 远端名称
Storage> baidu                  # 存储类型填 baidu
client_id> 填入你的AppKey        # 不能留空
client_secret> 填入你的SecretKey # 不能留空
Edit advanced config? n
Use web browser to automatically authenticate rclone with remote?
y/n> n                          # VPS 必须选 n

终端打印授权 URL,在本地电脑浏览器打开,登录百度账号并授权,获得 token 后粘贴回终端:

Enter verification code> 粘贴token后回车
y) Yes this is OK
y/e/d> y
q

测试连接:

rclone lsd baidu:
# 能看到百度网盘根目录内容即成功

创建挂载点并挂载(百度 API 速度慢,buffer 适当调小):

mkdir -p /mnt/baidu

rclone mount baidu: /mnt/baidu \
  --vfs-cache-mode full \
  --vfs-cache-max-size 3G \
  --buffer-size 128M \
  --transfers 4 \
  --allow-other \
  --daemon

ls /mnt/baidu

配置 systemd 开机自动挂载:

cat > /etc/systemd/system/rclone-baidu.service << 'EOF'
[Unit]
Description=Rclone Mount - Baidu Pan
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
NotifyAccess=all
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/rclone mount baidu: /mnt/baidu \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 3G \
  --buffer-size 128M \
  --transfers 4 \
  --allow-other \
  --umask 002 \
  --log-level INFO \
  --log-file /var/log/rclone-baidu.log
ExecStop=/bin/fusermount -u /mnt/baidu
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable rclone-baidu
systemctl start rclone-baidu
systemctl status rclone-baidu

百度网盘注意事项:

  • 非会员通过 API 上传/下载通常只有 200-500 KB/s,与网页版的不限速是两套完全不同的通道
  • 百度会不定期修改 API 接口,历史上曾导致 Rclone 百度后端失效,需等官方更新修复
  • 百度有严格内容扫描,存放敏感文件强烈建议搭配本文方案二的 Rclone Crypt 加密

平台三 & 四:阿里云盘 + 夸克网盘(通过 Alist 中转)

阿里云盘和夸克网盘没有开放标准 OAuth API,Rclone 官方无法直接支持。

解决方案是先在 VPS 上安装 Alist——一个开源的多平台网盘聚合工具。Alist 负责对接阿里云盘和夸克网盘,并对外提供标准的 WebDAV 接口;Rclone 再连接这个 WebDAV 接口,完成挂载。

数据流转路径如下:

Cloudreve
    │ 读写本地目录
    ▼
/mnt/aliyun/ 或 /mnt/quark/(Rclone 挂载点)
    │ WebDAV 协议(走本机 127.0.0.1,不出网)
    ▼
Alist(监听 :5244)
    │ 调用各平台 API
    ▼
阿里云盘 / 夸克网盘(真实数据)

第一步:安装 Alist

# x86_64 系统
wget https://github.com/alist-org/alist/releases/latest/download/alist-linux-amd64.tar.gz \
  -O /tmp/alist.tar.gz

# ARM64 系统(如 Oracle Cloud 免费 ARM 实例)
# wget https://github.com/alist-org/alist/releases/latest/download/alist-linux-arm64.tar.gz \
#   -O /tmp/alist.tar.gz

# 解压到 /opt/alist
mkdir -p /opt/alist
tar -zxvf /tmp/alist.tar.gz -C /opt/alist
chmod +x /opt/alist/alist

# 验证
/opt/alist/alist version

第二步:初始化并获取管理员密码

cd /opt/alist

# 生成一个随机管理员密码(推荐)
./alist admin random
# 终端输出类似:
# INFO  Successfully set password to: xK9mP2qR
# 记录这个密码

# 也可以自己设置密码
# ./alist admin set 你的密码

第三步:配置 Alist 为 systemd 服务

cat > /etc/systemd/system/alist.service << 'EOF'
[Unit]
Description=Alist WebDAV Bridge Service
After=network.target

[Service]
WorkingDirectory=/opt/alist
ExecStart=/opt/alist/alist server --data /opt/alist/data
Restart=on-failure
RestartSec=5s
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable alist
systemctl start alist

# 确认运行状态
systemctl status alist
# 应显示 Active: active (running)

# 查看日志确认启动正常
journalctl -u alist -n 20
# 应看到类似:start server@0.0.0.0:5244

Alist 默认监听 5244 端口,临时开放以便通过浏览器访问管理后台:

ufw allow 5244/tcp

第四步:在 Alist 管理后台添加阿里云盘

浏览器打开 http://YOUR_VPS_IP:5244,使用 admin 账号和上一步获取的密码登录。

添加阿里云盘:

  1. 左侧菜单点击存储 → 右上角点击添加
  2. 驱动下拉框选择 阿里云盘 Open
  3. 挂载路径填写 /aliyun(这是 Alist 内部的虚拟路径,自定义即可)
  4. 点击页面下方的获取 Token 按钮,会弹出二维码
  5. 用手机打开阿里云盘 App → 右上角扫一扫 → 扫码授权
  6. 授权成功后,Refresh Token 字段会自动填入
  7. 其余字段保持默认,点击保存
  8. 回到存储列表,状态显示正常即连接成功

第五步:在 Alist 管理后台添加夸克网盘

夸克网盘使用 Cookie 认证,需要从浏览器手动获取。

获取夸克网盘 Cookie 的步骤:

  1. 在电脑浏览器打开 https://pan.quark.cn 并登录账号
  2. F12 打开开发者工具,切换到 Network(网络) 选项卡
  3. 在页面上随意点击或刷新,触发一个网络请求
  4. 在请求列表中点击任意一条请求(如 indexlist
  5. 在右侧找到 Request Headers(请求标头),找到 cookie 字段
  6. cookie 字段的完整内容复制(内容很长,确保全部选中)

在 Alist 中添加夸克网盘:

  1. 左侧菜单点击存储添加
  2. 驱动选择 夸克网盘
  3. 挂载路径填写 /quark
  4. Cookie 字段粘贴刚才复制的完整 Cookie 内容
  5. 点击保存
  6. 存储列表中状态显示正常即连接成功

验证 Alist 连接正常:

# 在 VPS 上用 curl 访问 Alist WebDAV,确认能正常响应
curl -u admin:你的Alist密码 http://127.0.0.1:5244/dav/
# 应返回 XML 格式的目录列表,包含 aliyun 和 quark 目录

配置完成后关闭 Alist 的外网访问(Rclone 走内网 127.0.0.1 调用,不需要对外暴露):

ufw delete allow 5244/tcp

第六步:用 Rclone 连接 Alist WebDAV

Alist 的 WebDAV 地址为 http://127.0.0.1:5244/dav,下面配置 Rclone 接入。

注意:阿里云盘和夸克网盘共用同一个 Rclone WebDAV 远端(都通过同一个 Alist),只是挂载的子路径不同。

rclone config
n/s/q> n
name> alist                         # 远端名称,对应整个 Alist 实例
Storage> webdav                     # 存储类型填 webdav
URL of http host to connect to.
url> http://127.0.0.1:5244/dav      # Alist 的 WebDAV 地址
Name of the WebDAV site/service/software you are using.

此时会列出一个编号菜单,找到 Other site/service or software 对应的编号输入(通常是最后一个选项):

vendor> other                       # 或输入对应编号
User name.
user> admin                         # Alist 管理员用户名
Password.
y) Yes type in my own password
y/g/n> y
Enter the password:
password>                           # 输入 Alist 管理员密码,不显示字符
Confirm the password:
password>                           # 再次输入确认
Edit advanced config?
y/n> n

y) Yes this is OK
y/e/d> y
q

测试 WebDAV 连接:

# 列出 Alist 根目录,应看到 aliyun 和 quark 两个目录
rclone lsd alist:

# 列出阿里云盘内容
rclone lsd alist:aliyun/

# 列出夸克网盘内容
rclone lsd alist:quark/

第七步:挂载阿里云盘

⚠️ 阿里云盘通过 Alist 挂载时,下载文件必须携带 Referer 请求头,否则文件读取会失败(403 错误)。--header 参数是阿里云盘专用的,其他平台不需要。

mkdir -p /mnt/aliyun

rclone mount alist:aliyun/ /mnt/aliyun \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --header "Referer:https://www.aliyundrive.com/" \
  --daemon

# 验证挂载
ls /mnt/aliyun
# 应看到阿里云盘根目录内容

第八步:挂载夸克网盘

mkdir -p /mnt/quark

rclone mount alist:quark/ /mnt/quark \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --daemon

# 验证挂载
ls /mnt/quark

第九步:配置 Alist 与两个挂载的 systemd 服务

Alist 必须先启动,Rclone 才能挂载,systemd 的 RequiresAfter 指令保证这个顺序。

# 阿里云盘挂载服务
cat > /etc/systemd/system/rclone-aliyun.service << 'EOF'
[Unit]
Description=Rclone Mount - Aliyun via Alist
After=network-online.target alist.service
Wants=network-online.target
Requires=alist.service

[Service]
Type=notify
NotifyAccess=all
ExecStartPre=/bin/sleep 8
ExecStart=/usr/bin/rclone mount alist:aliyun/ /mnt/aliyun \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --umask 002 \
  --header "Referer:https://www.aliyundrive.com/" \
  --log-level INFO \
  --log-file /var/log/rclone-aliyun.log
ExecStop=/bin/fusermount -u /mnt/aliyun
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

# 夸克网盘挂载服务
cat > /etc/systemd/system/rclone-quark.service << 'EOF'
[Unit]
Description=Rclone Mount - Quark via Alist
After=network-online.target alist.service
Wants=network-online.target
Requires=alist.service

[Service]
Type=notify
NotifyAccess=all
ExecStartPre=/bin/sleep 8
ExecStart=/usr/bin/rclone mount alist:quark/ /mnt/quark \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --umask 002 \
  --log-level INFO \
  --log-file /var/log/rclone-quark.log
ExecStop=/bin/fusermount -u /mnt/quark
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

mkdir -p /mnt/aliyun /mnt/quark
systemctl daemon-reload
systemctl enable rclone-aliyun rclone-quark
systemctl start rclone-aliyun rclone-quark

# 分别确认状态
systemctl status rclone-aliyun
systemctl status rclone-quark

排查问题:

# 查看 Alist 日志
journalctl -u alist -n 50

# 查看阿里云盘挂载日志
tail -f /var/log/rclone-aliyun.log

# 查看夸克网盘挂载日志
tail -f /var/log/rclone-quark.log

注意事项:

  • 阿里云盘和夸克网盘的 Cookie / Token 都有有效期,过期后 Alist 中对应的存储状态会变为异常,需要重新在 Alist 管理后台更新认证信息
  • 阿里云盘 Token 到期后,重新扫码获取新的 Refresh Token 填入 Alist 存储配置中保存即可,无需重启 Rclone
  • 夸克 Cookie 过期后,重新从浏览器获取新 Cookie 更新到 Alist 存储配置中保存即可

平台五:115网盘(社区修改版 Rclone)

Rclone 官方不支持 115网盘,但社区开发者 gaoyb7 维护了一个添加了 115 支持的修改版,项目地址:https://github.com/gaoyb7/rclone-release

第一步:替换为社区修改版 Rclone

如果你之前已经安装了官方 Rclone,先备份再替换:

# 备份官方版本(如果已安装)
[ -f /usr/bin/rclone ] && mv /usr/bin/rclone /usr/bin/rclone.official.bak

# 下载支持 115 网盘的修改版(x86_64)
wget https://github.com/gaoyb7/rclone-release/releases/latest/download/rclone-linux-amd64 \
  -O /usr/bin/rclone

# ARM64 系统
# wget https://github.com/gaoyb7/rclone-release/releases/latest/download/rclone-linux-arm64 \
#   -O /usr/bin/rclone

# 赋予执行权限
chmod +x /usr/bin/rclone

# 验证版本
rclone --version
# 正常输出版本号即成功

⚠️ 说明:此修改版基于 Rclone 官方代码扩展,Google Drive、百度网盘等其他平台在此版本上完全正常使用,不影响已有配置。但这是第三方维护版本,如果 115 API 发生变动,需等社区更新修复。

第二步:获取 115网盘 Cookie 中的四个值

115网盘不使用 OAuth 授权,而是直接读取你登录后浏览器中的 Cookie。需要获取四个字段:UIDCIDSEIDKID

操作步骤:

  1. 在电脑浏览器打开 https://115.com 并登录账号
  2. F12 打开开发者工具,切换到 Network(网络) 选项卡
  3. 刷新页面(按 F5),等待请求列表加载出来
  4. 在请求列表中点击任意一条请求(选第一条即可)
  5. 在右侧找到 Request Headers(请求标头),找到 Cookie 字段
  6. Cookie 字段内容类似:UID=12345678; CID=abcdefg12345; SEID=HIJKLMN789; KID=OPQRST456; ...
  7. 找到并分别记录 UID=CID=SEID=KID= 这四个等号后面的值

第三步:直接写入 Rclone 配置文件

115网盘的配置需要直接编辑配置文件,不走 rclone config 交互界面:

# 确保配置目录存在
mkdir -p /root/.config/rclone

# 打开配置文件(没有则新建)
vim /root/.config/rclone/rclone.conf

在文件末尾追加以下内容,将四个值替换为你刚才记录的实际 Cookie 值:

[115pan]
type = 115
uid = 这里填你的UID值
cid = 这里填你的CID值
seid = 这里填你的SEID值
kid = 这里填你的KID值

保存并退出:按 Esc,输入 :wq,按回车。

保护配置文件权限(配置文件中含认证信息,不能让其他用户读取):

chmod 600 /root/.config/rclone/rclone.conf

第四步:测试 115网盘连接

# 列出 115 网盘根目录
rclone lsd 115pan:
# 正常输出目录列表即连接成功

# 如果报错 401 Unauthorized,说明 Cookie 已过期或填写有误,重新获取 Cookie 后更新配置文件

第五步:挂载 115网盘

mkdir -p /mnt/115pan

rclone mount 115pan: /mnt/115pan \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --daemon

# 验证挂载
ls /mnt/115pan
# 应看到 115 网盘根目录内容

第六步:配置 115网盘开机自动挂载

cat > /etc/systemd/system/rclone-115pan.service << 'EOF'
[Unit]
Description=Rclone Mount - 115pan
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
NotifyAccess=all
ExecStartPre=/bin/sleep 5
ExecStart=/usr/bin/rclone mount 115pan: /mnt/115pan \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --umask 002 \
  --log-level INFO \
  --log-file /var/log/rclone-115pan.log
ExecStop=/bin/fusermount -u /mnt/115pan
Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable rclone-115pan
systemctl start rclone-115pan
systemctl status rclone-115pan

115网盘注意事项:

  • 会员用户上传下载速度较快,非会员有速度限制
  • Cookie 有有效期(通常数周到数月),过期后挂载失效,日志中会出现 401 Unauthorized
  • Cookie 过期后的处理方法:重新从浏览器获取四个值,更新 /root/.config/rclone/rclone.conf[115pan] 段落的值,然后执行 systemctl restart rclone-115pan 重新挂载

挂载参数说明(通用)

以上所有平台的挂载命令都使用了相同的核心参数,含义如下:

参数 作用 建议值
--vfs-cache-mode full 启用完整本地缓存,支持随机写入,必须开启 固定值
--vfs-cache-max-size 本地缓存最大占用磁盘空间 根据 VPS 磁盘大小,建议 2-5G
--buffer-size 内存读写缓冲区,影响传输速度 256M(百度/慢速平台用 128M)
--allow-other 允许 Cloudreve 等其他进程访问挂载点 固定开启
--umask 002 挂载目录的权限掩码,保证文件可读写 固定值
--daemon 后台运行(systemd 管理时不需要此参数) 手动挂载时使用
--transfers 并发传输数,慢速平台降低此值 默认 4,百度用 4

查看日志排查挂载问题:

# 查看 systemd 服务状态
systemctl status rclone-gdrive    # 替换为对应服务名

# 查看详细日志
journalctl -u rclone-gdrive -n 50

# 查看 Rclone 自身日志文件
tail -f /var/log/rclone-gdrive.log

上面的通用过程到此为止,接下来是三个不同的挂载方式的不同步骤,按需跳转观看。

5. 方案一:低成本大空间(网盘挂载)

方案架构

用户
 │  HTTPS
 ▼
Nginx(反向代理 + SSL)
 │
 ▼
Cloudreve(Web 云盘应用)
 │  读写本地目录(透明)
 ▼
/mnt/gdrive/(FUSE 挂载点)
 │  系统调用转换为 API 请求
 ▼
Rclone 进程
 │  HTTPS API
 ▼
云盘服务器(文件明文存储,平台方可见)

能力边界说明

方案一解决的问题: - ✅ 突破商业网盘的访问限速,带宽取决于 VPS - ✅ 多用户管理(给家人/朋友开账号,设存储配额) - ✅ Aria2 离线下载到网盘 - ✅ 在线视频播放、图片预览 - ✅ 使用自己的域名,WebDAV 挂载到桌面 - ✅ 聚合多个网盘平台到一个界面

方案一没有解决的问题: - ❌ 文件内容隐私(平台方可以看到所有文件) - ❌ 文件名隐私(平台方可以看到文件名)

前置条件

完成第 3 章(基础环境)和第 4 章(Rclone 配置 + 挂载)后,确认挂载成功:

ls /mnt/gdrive
# 能看到网盘内容即为正常

在 Cloudreve 中配置方案一的存储策略

Cloudreve 安装完成后(见第 8 章),进入管理后台配置存储策略:

  1. 管理后台左侧菜单 → 存储策略 → 右上角 添加存储策略
  2. 策略类型选择 本机存储
  3. 存储目录填写(使用 {uid} 占位符实现用户间存储隔离):
/mnt/gdrive/cloudreve/{uid}/

如果你挂载的是 OneDrive,改为:

/mnt/onedrive/cloudreve/{uid}/
  1. 临时目录填写:
/tmp/cloudreve/
  1. 点击创建存储策略
  2. 进入 用户组 → 编辑默认用户组 → 存储策略选择刚创建的策略 → 保存

完成。此时用户上传的文件会通过 Rclone 透明地写入到你的网盘中。


6. 方案二:加密后存网盘(隐私增强)

方案架构

用户
 │  HTTPS
 ▼
Nginx
 │
 ▼
Cloudreve
 │  读写文件(明文视角)
 ▼
/mnt/gdrive-crypt/(Crypt 挂载点,对 Cloudreve 显示明文)
 │
 │  AES-256-CTR 加密/解密
 │  (在 VPS 内存中实时完成,不落盘)
 ▼
Rclone Crypt 层
 │  写入密文到底层挂载点
 ▼
/mnt/gdrive/(底层原始挂载点)
 │
 ▼
Rclone 进程
 │  HTTPS API
 ▼
云盘服务器
(只存储加密密文,平台方完全无法读取内容和文件名)

Rclone Crypt 加密了什么

  • ✅ 文件内容:用AES-256-CTR 加密,平台看到的是二进制乱码
  • ✅ 文件名:用EME 算法加密,平台看到的是随机字符串(如 8kqm2vpnx3rjhd4s
  • ✅ 目录名:同样加密
  • ⚠️ 文件大小:会增加 32 字节的加密头,原始大小可被推断,但内容不可知

关键前提:加密密钥只存在于你 VPS 的 Rclone 配置文件中。密钥安全则数据安全,密钥丢失则数据永久无法恢复

前置条件

方案二建立在方案一的基础挂载之上,请先确认底层挂载正常工作:

ls /mnt/gdrive
# 能看到内容即正常

步骤 1:在网盘上创建专用的加密存储目录

我们将加密数据单独存放在一个目录,与其他非加密文件分离:

# 以 Google Drive 为例
rclone mkdir gdrive:encrypted-storage

# 确认目录创建成功
rclone lsd gdrive:
# 应看到 encrypted-storage 目录

如果你用的是 OneDrive 或百度网盘,把 gdrive 替换为你的远端名:

rclone mkdir onedrive:encrypted-storage
# 或
rclone mkdir baidu:encrypted-storage

步骤 2:配置 Rclone Crypt 远端

rclone config
n/s/q> n

输入 n 新建远端。

name> gdrive-crypt

输入名称,建议在原远端名后加 -crypt 便于区分。

Storage> crypt

输入 crypt

Remote to encrypt/decrypt.
remote>

这里至关重要:输入你的底层远端名 + 冒号 + 刚才创建的目录名:

remote> gdrive:encrypted-storage

如果你用的是 OneDrive,则输入:

remote> onedrive:encrypted-storage
How to encrypt the filenames.
 1 / Encrypt the filenames.
   \ "standard"
 2 / Very simple filename obfuscation.
   \ "obfuscate"
 3 / Don't encrypt the file names.
   \ "off"
filename_encryption> 1

输入 1(加密文件名,推荐)。

Option to either encrypt directory names or leave them intact.
 1 / Encrypt directory names.
   \ "true"
 2 / Don't encrypt directory names, leave them intact.
   \ "false"
directory_name_encryption> 1

输入 1(同时加密目录名)。

Password or pass phrase for encryption.
y) Yes type in my own password
g) Generate random password
y/g/n> y

输入 y,选择手动输入密码。

Enter the password:
password:

输入一个强密码(建议 20 位以上,混合大小写、数字、特殊字符)。输入时终端不显示字符,输完按回车。

Confirm the password:
password:

再次输入同样的密码确认。

Password or pass phrase for salt (optional but recommended).
y) Yes type in my own password
g) Generate random password
y/g/n> y

输入 y,为 salt 再设一个不同的密码。Salt 是加密的第二层保障,进一步防止彩虹表攻击。

Enter the password:
password:

输入与第一个密码不同的强密码。

Confirm the password:
password:

确认 salt 密码。

Edit advanced config?
y/n> n

输入 n

y) Yes this is OK
y/e/d> y

输入 y 保存。输入 q 退出配置。

🔐 立即备份这两个密码! 打开密码管理器(Bitwarden、1Password 等)或者手写在纸上锁好。 这两个密码一旦丢失,存在网盘里的所有加密文件将永久无法恢复,直接爆炸,危害极大。

步骤 3:验证加密效果

# 创建 Crypt 挂载点
mkdir -p /mnt/gdrive-crypt

# 临时挂载 Crypt 层(明文视图)
rclone mount gdrive-crypt: /mnt/gdrive-crypt \
  --vfs-cache-mode full \
  --allow-other \
  --daemon

sleep 3

# 通过 Crypt 挂载点写入测试文件(你写入的是明文)
echo "这是明文内容,存到网盘后应该变成乱码" > /mnt/gdrive-crypt/test.txt

# 等待上传
sleep 5

# 现在去看网盘实际存储的内容(密文视图)
rclone ls gdrive:encrypted-storage
# 输出类似:
# 55 8kqm2vpnx3rjhd4s1a2b
# 文件名是乱码,大小比原文多了 32 字节(加密头)

# 再通过 Crypt 挂载点读取(自动解密)
cat /mnt/gdrive-crypt/test.txt
# 输出:这是明文内容,存到网盘后应该变成乱码

# 验证完毕,卸载临时挂载
fusermount -u /mnt/gdrive-crypt

如果网盘上显示的是乱码文件名,而通过 Crypt 挂载点读出的是正常内容,说明加密配置完全正确。

步骤 4:配置 Crypt 层开机自动挂载

方案二需要按顺序挂载两层:先挂底层(gdrive),再挂 Crypt 层(gdrive-crypt)。通过 systemd 的 RequiresAfter 指令保证顺序:

cat > /etc/systemd/system/rclone-gdrive-crypt.service << 'EOF'
[Unit]
Description=Rclone Mount - gdrive-crypt (Encrypted Layer)
# 必须在底层挂载成功后再启动
After=network-online.target rclone-gdrive.service
Wants=network-online.target
Requires=rclone-gdrive.service

[Service]
Type=notify
NotifyAccess=all

# 多等几秒,确保底层挂载完全稳定
ExecStartPre=/bin/sleep 8

ExecStart=/usr/bin/rclone mount gdrive-crypt: /mnt/gdrive-crypt \
  --config /root/.config/rclone/rclone.conf \
  --vfs-cache-mode full \
  --vfs-cache-max-size 2G \
  --buffer-size 256M \
  --allow-other \
  --umask 002 \
  --log-level INFO \
  --log-file /var/log/rclone-gdrive-crypt.log

ExecStop=/bin/fusermount -u /mnt/gdrive-crypt

Restart=on-failure
RestartSec=10s
User=root

[Install]
WantedBy=multi-user.target
EOF

# 创建挂载点目录
mkdir -p /mnt/gdrive-crypt

# 重载并启动
systemctl daemon-reload
systemctl enable rclone-gdrive-crypt
systemctl start rclone-gdrive-crypt

# 查看状态
systemctl status rclone-gdrive-crypt

验证两层挂载都正常:

systemctl status rclone-gdrive        # 底层应 active (running)
systemctl status rclone-gdrive-crypt  # Crypt 层应 active (running)

ls /mnt/gdrive        # 看到网盘原始内容(含加密文件名)
ls /mnt/gdrive-crypt  # 看到解密后的文件名

步骤 5:在 Cloudreve 中配置加密存储策略

进入 Cloudreve 管理后台:

  1. 存储策略添加存储策略
  2. 类型选择 本机存储
  3. 存储目录填写 Crypt 挂载点下的路径(注意不是 gdrive,而是 gdrive-crypt):
/mnt/gdrive-crypt/cloudreve/{uid}/
  1. 临时目录填写:
/tmp/cloudreve/
  1. 保存策略,绑定到用户组

现在用户通过 Cloudreve 上传的所有文件,在写入网盘之前都会经过 AES-256 加密。网盘平台看到的只是乱码。

方案二的性能影响

加密/解密在 VPS 的 CPU 上完成。现代 CPU 原生支持 AES 指令集(AES-NI),加解密性能非常高,对日常使用几乎无感知。

唯一有明显影响的场景是在线视频播放:视频流必须经过 VPS 解密后再发送给用户,不能使用网盘的直链功能,因此 VPS 的带宽成为视频播放的速度上限。因此,需要读者自己权衡。


7. 方案三:数据完全自存(MinIO 真正自主)

方案架构

用户
 │  HTTPS
 ▼
Nginx(反向代理 + SSL)
 │
 ├──► :5212  Cloudreve(Web 云盘)
 │              │  S3 协议 API 调用
 │              ▼
 └──► :9000  MinIO(自建 S3 对象存储)
                │
                ▼
         /data/minio/(VPS 本地磁盘)
         数据完全在你的服务器上,不经过任何第三方

什么是 MinIO

MinIO 是一个开源的高性能对象存储服务,完全兼容亚马逊 S3 API。你可以把它理解为"部署在自己服务器上的 AWS S3"。

Cloudreve 原生支持 S3 协议,因此可以直接把 MinIO 作为后端存储,数据全程不离开你的服务器。

步骤 1:准备数据存储目录

# 创建 MinIO 数据目录和配置目录
mkdir -p /data/minio
mkdir -p /etc/minio

# 设置权限
chmod 750 /data/minio
chmod 750 /etc/minio

步骤 2:下载并安装 MinIO

# x86_64 系统
wget https://dl.min.io/server/minio/release/linux-amd64/minio -O /usr/local/bin/minio

# ARM64 系统(Oracle Cloud 免费 ARM 实例用这个)
# wget https://dl.min.io/server/minio/release/linux-arm64/minio -O /usr/local/bin/minio

# 赋予执行权限
chmod +x /usr/local/bin/minio

# 验证安装
minio --version
# 应输出版本号,如:minio version RELEASE.2024-xx-xx...

步骤 3:创建 MinIO 配置文件

cat > /etc/minio/minio.env << 'EOF'
# 管理员用户名(至少 3 个字符,改成自己的)
MINIO_ROOT_USER=your_admin_username

# 管理员密码(至少 8 个字符,强烈建议 20 位以上)
MINIO_ROOT_PASSWORD=your_very_strong_password_here

# 数据存储路径
MINIO_VOLUMES="/data/minio"

# 监听地址:只监听本地回环,通过 Nginx 对外暴露,不直接暴露到公网
MINIO_OPTS="--address 127.0.0.1:9000 --console-address 127.0.0.1:9001"
EOF

# 保护配置文件权限(只有 root 能读)
chmod 600 /etc/minio/minio.env

⚠️ 请务必把用户名和密码改成你自己的强密码再继续!

步骤 4:创建 MinIO 系统服务

cat > /etc/systemd/system/minio.service << 'EOF'
[Unit]
Description=MinIO Object Storage
Documentation=https://docs.min.io
After=network-online.target
Wants=network-online.target

[Service]
# 从配置文件加载环境变量
EnvironmentFile=/etc/minio/minio.env

# 启动命令,$MINIO_VOLUMES 和 $MINIO_OPTS 来自配置文件
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS

Restart=always
RestartSec=5s

StandardOutput=journal
StandardError=journal
SyslogIdentifier=minio

[Install]
WantedBy=multi-user.target
EOF

# 重载 systemd
systemctl daemon-reload

# 设置开机自启并启动
systemctl enable minio
systemctl start minio

# 查看启动状态
systemctl status minio

查看日志确认正常启动:

journalctl -u minio -n 20
# 正常启动应看到类似:
# API: http://127.0.0.1:9000
# Console: http://127.0.0.1:9001

步骤 5:配置 Nginx 反向代理 MinIO 控制台

MinIO 有两个端口: - :9000:S3 API(Cloudreve 用这个,走内网 127.0.0.1 直连,不需要对外暴露) - :9001:Web 管理控制台(用浏览器管理 Bucket 和密钥)

为控制台配置一个可以从外部访问的域名(如 minio.example.com):

cat > /etc/nginx/sites-available/minio-console << 'EOF'
server {
    listen 80;
    server_name minio.example.com;   # 替换为你的 MinIO 控制台域名

    client_max_body_size 0;
    proxy_buffering off;
    proxy_request_buffering off;

    location / {
        proxy_pass http://127.0.0.1:9001;
        proxy_set_header Host $http_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;

        # MinIO 控制台需要 WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
EOF

ln -s /etc/nginx/sites-available/minio-console /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

# 申请 SSL 证书
certbot --nginx -d minio.example.com

如果你不想把控制台暴露到公网,可以用 SSH 隧道临时访问:

# 在你的本地电脑执行(不是在 VPS 上)
ssh -L 9001:127.0.0.1:9001 root@YOUR_VPS_IP -N -f
# 然后本地浏览器打开 http://localhost:9001 即可
# 关闭隧道:kill $(pgrep -f "9001:127.0.0.1:9001")

步骤 6:在 MinIO 控制台创建 Bucket

打开 MinIO 控制台,用你在 minio.env 中设置的用户名密码登录。

  1. 左侧菜单 → Buckets → 右上角 Create Bucket
  2. Bucket Name 输入:cloudreve
  3. Versioning、Object Locking 保持关闭(默认)
  4. 点击 Create Bucket

步骤 7:创建专用访问密钥

不要直接用管理员账号给 Cloudreve 用,应该创建专用的 Access Key:

  1. 左侧菜单 → Access KeysCreate access key
  2. Access Key 和 Secret Key 会自动生成(也可手动输入)
  3. Description 填写 cloudreve(备注用途)
  4. 点击 Create
  5. 页面会显示生成的 Access Key 和 Secret Key,立即复制保存,Secret Key 只显示这一次

步骤 8:在 Cloudreve 中配置 MinIO 存储策略

进入 Cloudreve 管理后台:

  1. 存储策略添加存储策略
  2. 策略类型选择 S3 兼容
  3. 按以下填写:
字段 填写值 说明
策略名称 MinIO 本地存储 随意
Endpoint http://127.0.0.1:9000 MinIO 和 Cloudreve 同机,走内网
Access Key ID 上一步的 Access Key
Secret Access Key 上一步的 Secret Key
Bucket 名称 cloudreve 与你创建的 Bucket 一致
地域 us-east-1 MinIO 兼容 S3,填这个固定值
存储路径 {uid}/ 用户隔离
强制路径式请求 ✅ 开启 MinIO 必须开启此项
  1. 点击测试连接,确认显示"连接成功"
  2. 点击创建存储策略
  3. 进入用户组 → 绑定此存储策略

步骤 9:验证数据存储在本地

在 Cloudreve 上传一个测试文件,然后到 VPS 查看:

# 确认文件确实存在于本地磁盘
ls /data/minio/cloudreve/
# 应看到以 uid 命名的子目录

# 查看磁盘使用情况
du -sh /data/minio/
df -h /data/minio/

数据确实存储在 VPS 本地磁盘,完全不经过任何第三方。

步骤 10(可选):挂载额外块存储扩容,当然最好一开始就选大硬盘的VPS

我以 Hetzner Volume 为例,因为这是我有的服务器,当 VPS 本身磁盘不够时:

在 Hetzner 控制台: 1. 进入你的服务器 → VolumesCreate Volume 2. 选择大小(如 100 GB),点击创建 3. Hetzner 会自动显示挂载命令

在 VPS 上执行:

# 格式化新卷(只需第一次,Hetzner 控制台会给出准确的设备路径)
mkfs.ext4 -F /dev/disk/by-id/scsi-0HC_Volume_XXXXXXXX

# 创建挂载点
mkdir -p /data/minio-volume

# 写入 /etc/fstab 开机自动挂载
echo "/dev/disk/by-id/scsi-0HC_Volume_XXXXXXXX /data/minio-volume ext4 discard,nofail,defaults 0 0" >> /etc/fstab

# 立即挂载
mount -a

# 确认挂载成功
df -h | grep minio-volume

迁移 MinIO 数据到新卷:

# 停止 MinIO
systemctl stop minio

# 迁移现有数据(如果已有数据)
rsync -av /data/minio/ /data/minio-volume/

# 修改配置文件中的存储路径
sed -i 's|MINIO_VOLUMES="/data/minio"|MINIO_VOLUMES="/data/minio-volume"|' /etc/minio/minio.env

# 重启 MinIO
systemctl start minio
systemctl status minio

8. Cloudreve 安装与通用配置

上述的步骤都是搭建底层设施,这一步是搭建一个能看的网盘页面,让你能登录,能管理自己的自建网盘。

以下步骤对三个方案完全通用。

步骤 1:下载 Cloudreve

访问 https://github.com/cloudreve/Cloudreve/releases 查看最新版本号,以 v3.8.3 为例:

mkdir -p /opt/cloudreve
cd /opt/cloudreve

# x86_64 系统
wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz

# ARM64 系统(Oracle Cloud 免费 ARM 实例)
# wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_arm64.tar.gz

tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz
chmod +x cloudreve

# 清理安装包
rm cloudreve_3.8.3_linux_amd64.tar.gz

步骤 2:首次运行获取初始管理员密码

./cloudreve

终端输出类似内容:

[Info] 2024/01/01 00:00:00 初始管理员账号:admin@cloudreve.org
[Info] 2024/01/01 00:00:00 初始管理员密码:AbCdEfGhIjKl1234
[Info] 2024/01/01 00:00:00 开始监听 :5212

立即记录这个密码,它只在首次启动时显示一次。记录后按 Ctrl+C 停止。

步骤 3:配置 Cloudreve 为系统服务

cat > /etc/systemd/system/cloudreve.service << 'EOF'
[Unit]
Description=Cloudreve Cloud Drive
Documentation=https://docs.cloudreve.org
After=network.target

[Service]
WorkingDirectory=/opt/cloudreve
ExecStart=/opt/cloudreve/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed

StandardOutput=null
StandardError=syslog
SyslogIdentifier=cloudreve

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable cloudreve
systemctl start cloudreve

# 确认运行
systemctl status cloudreve

步骤 4:首次登录并修改密码

临时开放 5212 端口(配置好 Nginx 后关闭):

ufw allow 5212/tcp

浏览器访问 http://YOUR_VPS_IP:5212,用 admin@cloudreve.org 和初始密码登录。

进入后立即修改密码: 1. 右上角头像 → 个人设置 → 修改邮箱和密码 2. 管理后台 → 参数设置站点基本信息 → 修改站点名称、URL 为你的域名 3. 管理后台 → 参数设置注册 → 关闭公开注册(私人使用)

配置完 Nginx 后关闭临时端口:

ufw delete allow 5212/tcp

9. Nginx + HTTPS 配置

nginx的作用是让你在本地机器上在浏览器输入ip就能跳转到前端,不用输入1.1.1.1:8888这种端口后缀。 如果你有域名,想要点击域名就进入到你的自建网盘页面,也可以,跟着步骤继续往下看。

步骤 1:配置 Nginx 反向代理 Cloudreve

cat > /etc/nginx/sites-available/cloudreve << 'EOF'
server {
    listen 80;
    server_name cloud.example.com;   # 替换为你的域名

    # 不限制上传文件大小
    client_max_body_size 0;

    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;
        proxy_connect_timeout 60s;

        # 关闭代理缓冲,实时传输
        proxy_buffering off;
        proxy_request_buffering off;
    }
}
EOF

ln -s /etc/nginx/sites-available/cloudreve /etc/nginx/sites-enabled/

# 测试语法
nginx -t

# 重载
systemctl reload nginx

步骤 2:确认 DNS 解析正确

到目前为止,如果没有域名,就不用看了。有域名想要输入域名跳转到自建网盘主界面,继续往下走

在你的域名控制台,将 cloud.example.com 的 A 记录指向 VPS 公网 IP:

cloud.example.com.       IN  A  YOUR_VPS_IP
minio.example.com.       IN  A  YOUR_VPS_IP   # 如果用了 MinIO 控制台

验证解析是否生效(可能需要几分钟):

nslookup cloud.example.com
# 应返回你的 VPS IP

步骤 3:申请 SSL 证书

certbot --nginx -d cloud.example.com

按提示操作: 1. 输入你的邮箱地址(证书到期提醒用) 2. 同意服务条款,输入 A 3. 是否分享邮箱给 EFF,输入 N 4. 选择是否自动重定向 HTTP → HTTPS,输入 2(推荐)

Certbot 自动修改 Nginx 配置并重载,完成后访问 https://cloud.example.com 即可。

证书自动续期验证:

certbot renew --dry-run
# 应输出:Congratulations, all simulated renewals succeeded.

10. 高级功能:Aria2 离线下载

Aria2 是一个完全可选的附加功能,不装它网盘照样能用。 它的作用是这样的: 你想下载一个东西,但不想让自己的电脑开着等它下完。 比如你有一个 10GB 的磁力链接,或者一个 HTTP 下载地址,正常情况下你要在自己电脑上开着迅雷或 qBittorrent 等它下完,再手动上传到网盘。 装了 Aria2 之后,流程变成:

1.在 Cloudreve 界面粘贴磁力链接或下载地址 2.关掉电脑去睡觉 3.VPS 在后台自动下载,下载完直接存进网盘 4.第二天打开网盘,文件已经在里面了

下载目录根据方案不同: - 方案一:/mnt/gdrive/aria2-downloads/ - 方案二:/mnt/gdrive-crypt/aria2-downloads/ - 方案三:/data/aria2-downloads/

安装 Aria2

apt install -y aria2

mkdir -p /etc/aria2
touch /etc/aria2/aria2.session
chmod 600 /etc/aria2/aria2.session

创建配置文件

以下配置中,根据你的方案修改 dir= 路径:

cat > /etc/aria2/aria2.conf << 'EOF'
# 根据你的方案修改以下路径:
# 方案一:
dir=/mnt/gdrive/aria2-downloads
# 方案二(取消注释,注释掉上面):
# dir=/mnt/gdrive-crypt/aria2-downloads
# 方案三(取消注释,注释掉上面):
# dir=/data/aria2-downloads

# 文件分配方式(FUSE 挂载用 none,本地磁盘可用 prealloc)
file-allocation=none

# 断点续传
continue=true

# 并发下载数
max-concurrent-downloads=5

# 单服务器最大连接数
max-connection-per-server=16

# 最小分片大小
min-split-size=10M

# 文件分片数
split=16

# RPC 设置(Cloudreve 通过此接口控制 Aria2)
enable-rpc=true
rpc-allow-origin-all=true
rpc-listen-all=false
rpc-listen-port=6800

# RPC 密钥(务必修改为强密码)
rpc-secret=CHANGE_THIS_TO_A_STRONG_SECRET

# BitTorrent
enable-dht=true
bt-enable-lpd=true
bt-max-peers=50

# 保存会话(重启后恢复下载任务)
save-session=/etc/aria2/aria2.session
save-session-interval=30
input-file=/etc/aria2/aria2.session
EOF

⚠️ 必须修改 rpc-secret 这是 Cloudreve 调用 Aria2 的鉴权密钥,留默认值会有安全风险。

创建 Aria2 系统服务

cat > /etc/systemd/system/aria2.service << 'EOF'
[Unit]
Description=Aria2 Download Service
After=network.target

[Service]
ExecStart=/usr/bin/aria2c --conf-path=/etc/aria2/aria2.conf
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable aria2
systemctl start aria2
systemctl status aria2

在 Cloudreve 中配置 Aria2

  1. 管理后台 → 离线下载添加节点
  2. 节点地址:http://127.0.0.1:6800
  3. RPC 密钥:填入你的 rpc-secret
  4. 临时路径:填写与 aria2.confdir= 相同的路径
  5. 点击测试连接 → 显示成功 → 添加节点

用户现在可以在 Cloudreve 界面粘贴磁力链接或 HTTP 地址进行离线下载。


隐私能力对比

隐私维度 方案一 方案二 方案三
平台能读取文件内容 ✅ 能 ❌ 不能 ❌ 不能
平台能看到文件名 ✅ 能 ❌ 不能 ❌ 不能
账号被封导致数据不可访问 ⚠️ 有风险 ⚠️ 有风险(但密文还在) ✅ 无此风险
数据受境外法律管辖 ✅ 受管辖 ⚠️ 密文受管辖,内容安全 ❌ 在你的服务器上
VPS 提供商能看到数据 ❌(数据在网盘) ❌(数据在网盘且加密) ⚠️ 理论上能看到磁盘

各平台横向对比

平台 免费空间 API 速度 稳定性 隐私风险 推荐程度
Google Drive 15 GB 较快 境外平台,内容审查 ⭐⭐⭐⭐
OneDrive 5 GB 较快 同上 ⭐⭐⭐⭐
百度网盘 100+ GB 慢(200-500 KB/s) 中(API 会变动) 国内平台,扫描严格 ⭐⭐(建议加密)
MinIO 自建 取决于磁盘 本地速度 取决于 VPS 完全自主 ⭐⭐⭐⭐⭐

12. 安全加固建议

配置 SSH 密钥登录并禁用密码登录

⚠️ 顺序非常重要:必须先确认密钥能登录,再禁用密码登录,否则会把自己锁在服务器外!

第一步:在你的本地电脑生成密钥(如果还没有):

# 本地电脑执行
ssh-keygen -t ed25519 -C "your_email@example.com"
# 生成 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)

第二步:将公钥上传到 VPS:

# 本地电脑执行
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@YOUR_VPS_IP

第三步:测试密钥登录(新开终端窗口,不要关闭当前连接):

# 本地电脑新开一个终端执行
ssh -i ~/.ssh/id_ed25519 root@YOUR_VPS_IP
# 如果能无密码登录成功,再继续下面的步骤

第四步:在 VPS 上修改 SSH 配置:

vim /etc/ssh/sshd_config

修改以下配置(找到对应行修改,没有则添加):

# 可选:修改 SSH 端口(减少自动化扫描攻击)
Port 22222

# 禁止密码登录
PasswordAuthentication no

# 确保公钥认证开启
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 限制认证尝试次数
MaxAuthTries 3
LoginGraceTime 30s
# 如果修改了端口,先在防火墙放行新端口
ufw allow 22222/tcp

# 重启 SSH
systemctl restart sshd

# 用新端口测试连接
ssh -p 22222 -i ~/.ssh/id_ed25519 root@YOUR_VPS_IP

配置 Fail2Ban 防暴力破解

cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 5
banaction = ufw

[sshd]
enabled  = true
port     = 22222
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
EOF

systemctl enable fail2ban
systemctl restart fail2ban

# 查看状态
fail2ban-client status sshd

Rclone 配置文件保护

Rclone 配置文件包含 OAuth Token(方案一、二)和加密密码(方案二),必须严格保护:

chmod 600 /root/.config/rclone/rclone.conf

备份 Rclone 配置(非常重要,尤其方案二包含加密密码):

cp /root/.config/rclone/rclone.conf ~/rclone.conf.backup
# 将 backup 文件下载到本地安全保存
scp root@YOUR_VPS_IP:~/rclone.conf.backup ./rclone.conf.backup

定期备份 Cloudreve 数据库

Cloudreve 的 SQLite 数据库存储所有用户信息和文件元数据:

cat > /opt/cloudreve/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/opt/cloudreve/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
cp /opt/cloudreve/cloudreve.db "$BACKUP_DIR/cloudreve_$DATE.db"
# 只保留最近 30 天
find $BACKUP_DIR -name "*.db" -mtime +30 -delete
echo "[$(date)] 备份完成:cloudreve_$DATE.db"
EOF

chmod +x /opt/cloudreve/backup.sh

# 加入 crontab,每天凌晨 3 点执行
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/cloudreve/backup.sh >> /var/log/cloudreve-backup.log 2>&1") | crontab -

# 确认 crontab
crontab -l

13. 总结

三方案架构全景

                 ┌─────────────────────────────────────────────────┐
                 │                   你的 VPS                       │
                 │                                                  │
用户 ──HTTPS──►  │  Nginx(443)                                    │
                 │    │                                             │
                 │    ▼                                             │
                 │  Cloudreve(:5212)                               │
                 │    │                                             │
                 │    ├─[方案一]─► /mnt/云盘名/ ──Rclone──► 云盘平台(明文)
                 │    │                                             │
                 │    ├─[方案二]─► /mnt/云盘名-crypt/ ──Rclone Crypt──► 云盘平台(密文)
                 │    │               AES-256 加密在此发生           │
                 │    │                                             │
                 │    └─[方案三]─► MinIO(:9000)                   │
                 │                    │                             │
                 │                    ▼                             │
                 │              /data/minio/(本地磁盘)             │
                 └─────────────────────────────────────────────────┘

选择哪个方案?

你的情况 推荐方案
主要存放影视、软件等非敏感资源,追求低成本大空间 方案一
存放私人照片、文档、日记等敏感内容,不信任平台内容审查 方案二(几乎零额外成本,隐私大幅提升)
商业机密、极度隐私需求,或完全不信任任何第三方 方案三
百度网盘用户 方案二(加密后存),避免内容扫描风险

对大多数人而言,方案二是最值得选择的:与方案一成本相同,但实现了真正的内容隐私保护,配置仅多了配置 Rclone Crypt 这一个步骤。

Rclone 核心要点回顾

无论你用哪个平台,Rclone 的操作逻辑都一样: 1. rclone config 配置远端(平台差异只在选类型和填 client_id) 2. rclone mount 远端名: 挂载目录 [参数] 挂载到本地 3. 用 systemd service 管理挂载的生命周期 4. 挂载后对 Cloudreve 完全透明,像本地磁盘一样使用


📌 参考资源 - Cloudreve 官方文档:https://docs.cloudreve.org - Rclone 支持的所有存储类型:https://rclone.org/overview/ - Rclone Crypt 加密文档:https://rclone.org/crypt/ - Rclone Mount 参数文档:https://rclone.org/commands/rclone_mount/ - MinIO 文档:https://min.io/docs/minio/linux/index.html - 百度网盘 Rclone 文档:https://rclone.org/baidudisk/ - Let's Encrypt:https://letsencrypt.org


本文首发于vpswow。如有错误或建议,欢迎联系我的telegram。