利用 VPS 搭建无限空间私人云盘:三种方案从入门到数据完全掌握
作者注: 文章提供三套完整方案,从最简单的网盘挂载出发,逐步升级到真正的所有数据自己做主。 Rclone 的配置流程对所有云盘平台(Google Drive、百度网盘等)90% 相同, 本文会将通用流程写清楚,差异部分单独列出。
目录
- 引言:为什么要自建网盘
- 三方案对比:选择适合自己的搭建方案
- 公共基础环境搭建(三方案共用)
- Rclone:通用配置流程,包括不同网盘的配置
- 方案一:低成本大空间(网盘挂载)
- 方案二:加密后存网盘(隐私增强)
- 方案三:数据完全自存(MinIO 真正自主)
- Cloudreve 安装与通用配置
- Nginx + HTTPS 配置
- 高级功能:Aria2 离线下载
- 三方案成本与隐私对比
- 安全加固建议
- 总结
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>
输入一个你自己能记住的名字,后续挂载命令中会用到这个名字。建议用平台名称,例如 gdrive、onedrive、baidu 等,只能用英文字母和数字。
第三步:选择存储类型(⚠️ 此步骤因平台而异,见下方速查表)
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_id 和 client_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
- 打开 https://pan.baidu.com/union/main,用百度账号登录
- 完成开发者实名认证(需绑定手机号)
- 进入控制台 → 点击创建应用
- 填写以下信息:
- 应用类型:选个人
- 应用名称:随意,如
rclone-personal- 接口能力:勾选个人网盘 - 回调 URL:填写http://localhost:53682/(固定值,Rclone OAuth 回调用) - 提交,创建成功后进入应用详情页,找到并记录:
-
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 账号和上一步获取的密码登录。
添加阿里云盘:
- 左侧菜单点击存储 → 右上角点击添加
- 驱动下拉框选择 阿里云盘 Open
- 挂载路径填写
/aliyun(这是 Alist 内部的虚拟路径,自定义即可) - 点击页面下方的获取 Token 按钮,会弹出二维码
- 用手机打开阿里云盘 App → 右上角扫一扫 → 扫码授权
- 授权成功后,Refresh Token 字段会自动填入
- 其余字段保持默认,点击保存
- 回到存储列表,状态显示正常即连接成功
第五步:在 Alist 管理后台添加夸克网盘
夸克网盘使用 Cookie 认证,需要从浏览器手动获取。
获取夸克网盘 Cookie 的步骤:
- 在电脑浏览器打开 https://pan.quark.cn 并登录账号
- 按
F12打开开发者工具,切换到 Network(网络) 选项卡 - 在页面上随意点击或刷新,触发一个网络请求
- 在请求列表中点击任意一条请求(如
index或list) - 在右侧找到 Request Headers(请求标头),找到
cookie字段 - 将
cookie字段的完整内容复制(内容很长,确保全部选中)
在 Alist 中添加夸克网盘:
- 左侧菜单点击存储 → 添加
- 驱动选择 夸克网盘
- 挂载路径填写
/quark - Cookie 字段粘贴刚才复制的完整 Cookie 内容
- 点击保存
- 存储列表中状态显示正常即连接成功
验证 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 的 Requires 和 After 指令保证这个顺序。
# 阿里云盘挂载服务
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。需要获取四个字段:UID、CID、SEID、KID。
操作步骤:
- 在电脑浏览器打开 https://115.com 并登录账号
- 按
F12打开开发者工具,切换到 Network(网络) 选项卡 - 刷新页面(按 F5),等待请求列表加载出来
- 在请求列表中点击任意一条请求(选第一条即可)
- 在右侧找到 Request Headers(请求标头),找到
Cookie字段 - Cookie 字段内容类似:
UID=12345678; CID=abcdefg12345; SEID=HIJKLMN789; KID=OPQRST456; ... - 找到并分别记录
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 章),进入管理后台配置存储策略:
- 管理后台左侧菜单 → 存储策略 → 右上角 添加存储策略
- 策略类型选择 本机存储
- 存储目录填写(使用
{uid}占位符实现用户间存储隔离):
/mnt/gdrive/cloudreve/{uid}/
如果你挂载的是 OneDrive,改为:
/mnt/onedrive/cloudreve/{uid}/
- 临时目录填写:
/tmp/cloudreve/
- 点击创建存储策略
- 进入 用户组 → 编辑默认用户组 → 存储策略选择刚创建的策略 → 保存
完成。此时用户上传的文件会通过 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 的 Requires 和 After 指令保证顺序:
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 管理后台:
- 存储策略 → 添加存储策略
- 类型选择 本机存储
- 存储目录填写 Crypt 挂载点下的路径(注意不是 gdrive,而是 gdrive-crypt):
/mnt/gdrive-crypt/cloudreve/{uid}/
- 临时目录填写:
/tmp/cloudreve/
- 保存策略,绑定到用户组
现在用户通过 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 中设置的用户名密码登录。
- 左侧菜单 → Buckets → 右上角 Create Bucket
- Bucket Name 输入:
cloudreve - Versioning、Object Locking 保持关闭(默认)
- 点击 Create Bucket
步骤 7:创建专用访问密钥
不要直接用管理员账号给 Cloudreve 用,应该创建专用的 Access Key:
- 左侧菜单 → Access Keys → Create access key
- Access Key 和 Secret Key 会自动生成(也可手动输入)
- Description 填写
cloudreve(备注用途) - 点击 Create
- 页面会显示生成的 Access Key 和 Secret Key,立即复制保存,Secret Key 只显示这一次
步骤 8:在 Cloudreve 中配置 MinIO 存储策略
进入 Cloudreve 管理后台:
- 存储策略 → 添加存储策略
- 策略类型选择 S3 兼容
- 按以下填写:
| 字段 | 填写值 | 说明 |
|---|---|---|
| 策略名称 | 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 必须开启此项 |
- 点击测试连接,确认显示"连接成功"
- 点击创建存储策略
- 进入用户组 → 绑定此存储策略
步骤 9:验证数据存储在本地
在 Cloudreve 上传一个测试文件,然后到 VPS 查看:
# 确认文件确实存在于本地磁盘
ls /data/minio/cloudreve/
# 应看到以 uid 命名的子目录
# 查看磁盘使用情况
du -sh /data/minio/
df -h /data/minio/
数据确实存储在 VPS 本地磁盘,完全不经过任何第三方。
步骤 10(可选):挂载额外块存储扩容,当然最好一开始就选大硬盘的VPS
我以 Hetzner Volume 为例,因为这是我有的服务器,当 VPS 本身磁盘不够时:
在 Hetzner 控制台: 1. 进入你的服务器 → Volumes → Create 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
- 管理后台 → 离线下载 → 添加节点
- 节点地址:
http://127.0.0.1:6800 - RPC 密钥:填入你的
rpc-secret - 临时路径:填写与
aria2.conf中dir=相同的路径 - 点击测试连接 → 显示成功 → 添加节点
用户现在可以在 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。