news 2026/10/14 1:31:30

CentOS 7 自建 Cloudreve 网盘:部署、优化与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CentOS 7 自建 Cloudreve 网盘:部署、优化与避坑指南

1. 为什么我选择在 CentOS 7 上自建网盘

把文件放在别人的服务器上,用久了总会遇到几个绕不开的坎:免费容量说砍就砍、下载速度被限制得死死的、分享链接莫名其妙失效、隐私条款悄悄更新。我自己就吃过好几次亏,早年存的一批设计素材,某天打开链接直接提示“文件已过期”,连申诉入口都找不到。从那以后我就下定决心,重要资料必须握在自己手里。

Cloudreve 是我对比过一圈之后留下来的方案。它是一套用 Go 语言写的开源网盘系统,支持本地存储、对象存储、远程存储多种后端,自带用户管理、分享链接、离线下载、WebDAV、多用户配额这些功能,界面也做得相当清爽。最关键的是,它对服务器配置要求不高,一台 1 核 2G 的小机器就能跑得很稳,这对个人用户和小团队来说非常友好。

CentOS 7 虽然已经进入维护末期,但市面上大量存量服务器还在跑这个系统,很多运维同学手头的机器就是 CentOS 7。我写这篇东西,就是想把我在 CentOS 7 上从零部署 Cloudreve 的完整过程、踩过的坑、以及后续调优的经验,原原本本记录下来。不管你是刚接触 Linux 的新手,还是想给团队搭一套内部文件共享系统的老手,都能照着走一遍。

这篇文章会覆盖环境准备、依赖安装、数据库配置、Cloudreve 部署、反向代理、开机自启、常见故障排查这几个核心环节。我会把每一步为什么这么做讲清楚,参数怎么算、配置怎么写、哪里容易翻车,都掰开揉碎说。你不需要有很深的 Linux 功底,只要能照着敲命令、看得懂基本的配置文件,就能跟着做完。

2. 部署前的整体设计与方案选型

2.1 为什么用 Cloudreve 而不是别的方案

自建网盘的选择其实不少,Nextcloud、Seafile、可道云、FileRun 都有人用。我最终选 Cloudreve,主要基于几个现实考量。

第一是资源占用。Nextcloud 功能确实全,但它是 PHP 写的,跑起来对内存和 CPU 的胃口不小,1 核 2G 的机器上经常卡顿,还得配 Redis、配 cron、调 PHP-FPM,折腾成本高。Cloudreve 是 Go 编译的单一二进制文件,启动就是一瞬间的事,内存占用常年稳定在几十兆,小机器跑起来毫无压力。

第二是部署复杂度。Seafile 需要单独部署 Python 环境、配置 Seahub、处理各种依赖,出问题排查起来链路很长。Cloudreve 解压即用,配置文件就一个conf.ini,改完重启就生效,对新手极其友好。

第三是功能匹配度。我要的核心功能就是:多用户、容量配额、分享链接、WebDAV 挂载、离线下载。Cloudreve 这几项全都原生支持,而且 WebDAV 可以直接把网盘挂载到本地当磁盘用,这个体验非常爽。

第四是存储后端灵活。Cloudreve 支持本地磁盘、七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive、S3 兼容存储等多种后端。我一开始用本地存储,后来文件多了就切到了对象存储,配置改几行就行,迁移成本很低。

提示:如果你的需求是团队协作、在线文档编辑、日历通讯录这类重办公场景,Nextcloud 可能更合适。但如果你的核心诉求是“稳定地把文件存起来、方便地分享出去”,Cloudreve 是更轻更省心的选择。

2.2 系统环境与硬件规划

CentOS 7 的默认软件源里,很多包的版本都比较老,比如 PHP 是 5.4,MySQL 是 5.5,Nginx 压根没有。所以部署前必须先把软件源理清楚,否则后面装依赖会各种报错。

我的硬件规划是这样的:最低配 1 核 1G 可以跑起来,但建议 1 核 2G 起步,因为 MySQL 本身就要吃掉几百兆内存。硬盘方面,系统盘 20G 足够,数据盘根据你的存储需求单独挂载,我建议数据目录和系统目录分开,这样重装系统时数据不会丢。

系统版本我用的 CentOS 7.9,这是 7 系列的最后一个版本,相对最稳定。内核版本 3.10,虽然老,但跑 Cloudreve 完全够用。

软件栈我选的是 Nginx + MySQL 5.7 + PHP 7.4 的组合。这里有个关键点:Cloudreve 本身是 Go 程序,不需要 PHP 运行,但它的离线下载功能依赖 Aria2,而 Aria2 的 Web 控制面板需要 PHP 环境。如果你不需要离线下载,PHP 可以完全不装。我为了功能完整,还是把 PHP 装上了。

数据库方面,Cloudreve 支持 SQLite、MySQL、PostgreSQL。SQLite 适合单用户或者极小规模使用,零配置,一个文件搞定。但多用户场景下 SQLite 的并发写入会成为瓶颈,所以我还是推荐 MySQL。MySQL 5.7 在 CentOS 7 上安装成熟,资料多,出问题好查。

2.3 网络与域名规划

自建网盘如果要对外访问,域名是必须的。一方面 IP 地址不好记,另一方面 HTTPS 证书需要绑定域名。我建议提前准备好一个域名,解析到服务器 IP。

端口规划上,我习惯把 Cloudreve 本体跑在 5212 端口(这是它的默认端口),然后用 Nginx 反向代理到 80 和 443。这样做的好处是:Cloudreve 不需要 root 权限就能跑,Nginx 负责处理 SSL、静态资源缓存、大文件上传的超时控制,分工明确。

防火墙方面,CentOS 7 默认用的是 firewalld。需要放行 80、443 端口,5212 端口只在本地监听,不对外暴露。这样即使 Cloudreve 有漏洞,外部也直接访问不到它的原始端口。

注意:如果你的服务器在国内,域名解析后需要完成备案才能通过 80/443 访问。如果只是内部使用,可以跳过域名直接用 IP 加端口访问,但 HTTPS 就没法配了。

3. 核心环境搭建与依赖安装实操

3.1 系统初始化与软件源配置

拿到一台全新的 CentOS 7 机器,我第一件事是更新系统并配置软件源。CentOS 7 自带的 yum 源速度慢、包又老,必须换成国内镜像源。

# 备份原有源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载国内镜像源(以阿里云为例) curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清理并重建缓存 yum clean all yum makecache # 更新系统 yum update -y

这里有个细节:yum update会更新内核,如果服务器上有正在运行的关键业务,建议先确认再执行。我一般在新机器上直接更新,老机器上会谨慎一些。

更新完之后,安装 EPEL 源和 Remi 源。EPEL 提供了很多 CentOS 官方源里没有的包,Remi 则提供了较新版本的 PHP。这两个源是后续安装 Nginx、PHP 7.4 的基础。

yum install -y epel-release yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils

装完 Remi 源之后,需要启用 PHP 7.4 的模块流:

yum-config-manager --enable remi-php74

这一步很关键,如果不启用,yum install php装的还是 5.4 版本,后面 Aria2 面板会跑不起来。

3.2 安装 Nginx 与 MySQL 5.7

Nginx 我直接从 EPEL 源装,版本是 1.20 左右,够用且稳定。

yum install -y nginx systemctl start nginx systemctl enable nginx

MySQL 5.7 在 CentOS 7 的官方源里没有,需要先添加 MySQL 官方的 yum 源。这里要注意,MySQL 官方源在国内下载速度可能很慢,可以换成国内镜像。

# 下载 MySQL 5.7 的源配置包 wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm rpm -ivh mysql57-community-release-el7-11.noarch.rpm # 安装 MySQL 服务端 yum install -y mysql-community-server # 启动并设置开机自启 systemctl start mysqld systemctl enable mysqld

MySQL 5.7 首次启动会生成一个临时 root 密码,需要从日志里找出来:

grep 'temporary password' /var/log/mysqld.log

拿到临时密码后,登录并修改:

mysql -uroot -p

登录后第一件事是改密码,MySQL 5.7 默认有密码强度校验,太简单的密码会报错。我一般先改一个符合要求的复杂密码,然后调整密码策略,再改成自己习惯的密码。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'TempPass123!'; SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_length=6; ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword'; FLUSH PRIVILEGES;

然后创建 Cloudreve 专用的数据库和用户。这里我不建议直接用 root 连 Cloudreve,权限太大,万一出问题影响面广。

CREATE DATABASE cloudreve CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'cloudreve'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT ALL PRIVILEGES ON cloudreve.* TO 'cloudreve'@'localhost'; FLUSH PRIVILEGES;

字符集一定要用utf8mb4,因为 Cloudreve 支持 emoji 和特殊字符的文件名,用utf8会存不进去。

3.3 安装 PHP 7.4 与必要扩展

PHP 只用于 Aria2 的 Web 面板,所以不需要装太多扩展,但有几个是必须的:php-fpm、php-cli、php-common、php-json、php-mbstring、php-curl。

yum install -y php php-fpm php-cli php-common php-json php-mbstring php-curl php-gd php-xml systemctl start php-fpm systemctl enable php-fpm

装完之后验证一下版本:

php -v

如果显示的是 7.4.x,说明 Remi 源生效了。如果还是 5.4,检查一下yum-config-manager --enable remi-php74是否执行成功。

PHP-FPM 的默认运行用户是apache,但 CentOS 7 上可能没有这个用户。需要检查/etc/php-fpm.d/www.conf里的user和group配置,改成nginx或者www-data。我一般改成nginx,和 Nginx 保持一致,避免权限问题。

# 编辑 www.conf vi /etc/php-fpm.d/www.conf # 找到并修改这两行 user = nginx group = nginx

改完重启 PHP-FPM:

systemctl restart php-fpm

3.4 安装 Aria2 与离线下载组件

Aria2 是 Cloudreve 离线下载功能的核心。CentOS 7 的 EPEL 源里有 Aria2,直接装就行。

yum install -y aria2

装完之后,需要配置 Aria2 的 RPC 模式,让 Cloudreve 能通过接口调用它。我一般创建一个专用目录来放配置文件和下载缓存。

mkdir -p /var/www/aria2 cd /var/www/aria2 # 创建配置文件 cat > aria2.conf << EOF enable-rpc=true rpc-allow-origin-all=true rpc-listen-all=false rpc-listen-port=6800 rpc-secret=your_aria2_token continue=true input-file=/var/www/aria2/aria2.session save-session=/var/www/aria2/aria2.session save-session-interval=60 max-concurrent-downloads=5 max-connection-per-server=16 split=16 min-split-size=10M max-overall-download-limit=0 max-overall-upload-limit=1K disable-ipv6=true dir=/var/www/aria2/downloads EOF # 创建 session 文件和下载目录 touch /var/www/aria2/aria2.session mkdir -p /var/www/aria2/downloads

这里的rpc-secret是 Aria2 的访问令牌,相当于密码,一定要改成一个随机字符串。rpc-listen-all=false表示只监听本地,外部访问不到,安全性更高。

然后创建 systemd 服务来管理 Aria2:

cat > /etc/systemd/system/aria2.service << EOF [Unit] Description=Aria2 Service After=network.target [Service] User=nginx ExecStart=/usr/bin/aria2c --conf-path=/var/www/aria2/aria2.conf Restart=on-failure [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start aria2 systemctl enable aria2

Aria2 的 Web 控制面板我用的是 AriaNg,它是一个纯静态的 HTML 页面,下载下来放到 Nginx 的网站目录里就能用。这个面板不是必须的,但有了它,你可以直接看到下载进度、管理任务,比在 Cloudreve 后台看要直观得多。

4. Cloudreve 部署与反向代理配置

4.1 下载与初始化 Cloudreve

Cloudreve 的官方发布页在 GitHub 上,下载对应架构的压缩包。CentOS 7 一般是 x86_64 架构,下载cloudreve_xxx_linux_amd64.tar.gz。

# 创建安装目录 mkdir -p /var/www/cloudreve cd /var/www/cloudreve # 下载(版本号根据实际情况替换) wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz # 解压 tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz # 赋予执行权限 chmod +x cloudreve

解压后目录里有一个cloudreve二进制文件和一个conf.ini配置文件。首次运行会自动生成数据库和初始管理员账号。

# 首次运行,生成初始配置 ./cloudreve

运行后终端会输出初始管理员账号和密码,一定要记下来。然后按Ctrl+C停止,接下来修改配置文件。

4.2 配置文件详解与数据库切换

默认的conf.ini用的是 SQLite,我们要改成 MySQL。打开配置文件:

[System] Mode = master Listen = :5212 SessionSecret = your_session_secret HashIDSalt = your_hashid_salt [Database] Type = mysql Host = 127.0.0.1 Port = 3306 User = cloudreve Password = StrongPass123! Name = cloudreve TablePrefix = cd_ [Redis] Server = 127.0.0.1:6379 Password = DB = 0

几个关键点说明一下:

SessionSecret和HashIDSalt是安全相关的随机字符串,首次运行会自动生成,不要手动改,改了会导致已有登录状态失效。

Listen = :5212表示监听所有网卡的 5212 端口。如果你只想本地访问,可以改成127.0.0.1:5212,然后通过 Nginx 代理。

TablePrefix是表前缀,默认cd_,如果你一个数据库要跑多个应用,改一下前缀避免冲突。

Redis 是可选的,但强烈建议开启。Cloudreve 用 Redis 做缓存和会话存储,开了之后后台响应速度明显提升。CentOS 7 装 Redis 很简单:

yum install -y redis systemctl start redis systemctl enable redis

Redis 默认只监听本地,不需要额外配置。如果你不装 Redis,把[Redis]段删掉或者留空,Cloudreve 会自动降级用内存缓存。

改完配置后,重新运行 Cloudreve:

./cloudreve

这次它会连接 MySQL 并自动建表。看到启动成功的日志后,就可以用之前记下的管理员账号登录了。

4.3 Nginx 反向代理与 HTTPS 配置

Cloudreve 直接跑在 5212 端口上,用 IP 加端口访问也能用,但体验不好,而且没法上 HTTPS。用 Nginx 反代是标准做法。

先创建一个 Nginx 配置文件:

server { listen 80; server_name your-domain.com; # 强制跳转 HTTPS(配好证书后启用) # return 301 https://$server_name$request_uri; 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; # 大文件上传关键配置 client_max_body_size 2048m; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; proxy_buffering off; } }

这里有几个参数是踩过坑之后总结出来的:

client_max_body_size 2048m控制客户端上传文件的最大体积,默认是 1M,不改的话传大文件直接报 413 错误。我设成 2G,你可以根据实际需求调整。

proxy_read_timeout 300s是代理读取超时时间,默认 60 秒。上传大文件时如果超过 60 秒没数据传输,Nginx 会断开连接。设成 300 秒比较稳妥。

proxy_buffering off关闭代理缓冲,对于大文件上传下载来说,关闭缓冲可以减少内存占用,避免 Nginx 把整个文件缓存到内存里。

配置 HTTPS 需要证书。我用的是 Let's Encrypt 的免费证书,通过 certbot 自动申请和续期。

yum install -y certbot python2-certbot-nginx certbot --nginx -d your-domain.com

certbot 会自动修改 Nginx 配置,加上 443 端口的监听和证书路径。续期是自动的,certbot 会创建一个定时任务,每天检查一次,快到期时自动续。

注意:certbot 申请证书时需要验证域名所有权,确保你的域名已经正确解析到服务器 IP,并且 80 端口可以从外网访问。

4.4 开机自启与进程守护

Cloudreve 本身没有提供 systemd 服务文件,需要自己写一个。这样服务器重启后 Cloudreve 会自动启动,不用手动去拉。

cat > /etc/systemd/system/cloudreve.service << EOF [Unit] Description=Cloudreve Service After=network.target mysql.service redis.service [Service] User=nginx WorkingDirectory=/var/www/cloudreve ExecStart=/var/www/cloudreve/cloudreve Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start cloudreve systemctl enable cloudreve

这里User=nginx表示用 nginx 用户运行 Cloudreve,避免用 root 跑带来安全风险。但要注意,/var/www/cloudreve目录的属主也要改成 nginx,否则 Cloudreve 没有权限写数据库文件和日志。

chown -R nginx:nginx /var/www/cloudreve chown -R nginx:nginx /var/www/aria2

Restart=on-failure表示进程异常退出时自动重启,RestartSec=5表示重启前等待 5 秒。这两个配置能保证 Cloudreve 在崩溃后自动恢复,不用人工干预。

5. 常见问题排查与性能调优实录

5.1 上传大文件失败与超时问题

这是自建网盘最高频的问题。表现是上传到一半卡住,或者直接报错“上传失败”。原因通常有三个层面:Nginx 限制、PHP 限制、Cloudreve 自身限制。

Nginx 层面,前面已经说了client_max_body_size和proxy_read_timeout。但还有一个隐藏参数:proxy_request_buffering。默认是on,表示 Nginx 会先把整个请求体缓冲到磁盘再转发给后端。上传大文件时,这个缓冲过程会占用大量磁盘 IO,导致超时。建议关掉:

proxy_request_buffering off;

PHP 层面,如果你用了 AriaNg 面板,PHP 的上传限制也要改。编辑/etc/php.ini:

upload_max_filesize = 2048M post_max_size = 2048M max_execution_time = 3600 max_input_time = 3600 memory_limit = 512M

改完重启 PHP-FPM。

Cloudreve 层面,它本身对上传大小没有硬限制,但如果你用的是本地存储,要确保存储目录所在的分区有足够空间。另外,Cloudreve 的上传是分片上传,如果分片大小设置不合理,也会影响大文件上传的稳定性。这个在后台管理面板的“存储策略”里可以调,一般保持默认即可。

5.2 数据库连接失败与字符集问题

Cloudreve 启动时报“数据库连接失败”,排查顺序是这样的:

先确认 MySQL 服务是否在跑:systemctl status mysqld。然后确认用户名密码是否正确:用mysql -ucloudreve -p手动登录试试。再确认数据库是否存在:SHOW DATABASES;。

如果都正常,但 Cloudreve 还是连不上,检查conf.ini里的Host是不是127.0.0.1。有些环境下 MySQL 只监听localhost的 socket,不监听 TCP,这时候要么改成localhost,要么在 MySQL 配置里开启 TCP 监听。

字符集问题表现为文件名乱码或者 emoji 存不进去。检查数据库和表的字符集:

SHOW VARIABLES LIKE 'character_set%'; SHOW CREATE TABLE cd_files;

如果发现不是utf8mb4,需要手动改:

ALTER DATABASE cloudreve CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE cd_files CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL 5.7 的配置文件/etc/my.cnf里也要加上:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci

改完重启 MySQL 生效。

5.3 反向代理后获取不到真实 IP

Cloudreve 后台看到的登录 IP 全是127.0.0.1,这是因为 Nginx 反代之后,Cloudreve 拿到的是 Nginx 的 IP。需要在 Nginx 配置里加上X-Real-IP和X-Forwarded-For头,前面已经配了。但 Cloudreve 还需要在配置文件里开启信任代理:

[System] Mode = master Listen = :5212 SessionSecret = xxx HashIDSalt = xxx TrustedProxies = 127.0.0.1

TrustedProxies填 Nginx 的 IP,如果是本机就是127.0.0.1。这样 Cloudreve 就会从X-Forwarded-For头里取真实 IP。

5.4 性能调优与资源监控

Cloudreve 跑起来之后,我一般会观察几个指标:CPU 占用、内存占用、磁盘 IO、网络带宽。

CPU 方面,Cloudreve 本身很轻,空闲时几乎不占 CPU。但如果开了离线下载,Aria2 在下载时会吃 CPU,尤其是多任务并发时。可以通过max-concurrent-downloads限制并发数。

内存方面,Cloudreve 主进程一般占 50-100M,MySQL 占 300-500M,Redis 占 10-20M,Nginx 占 10M 左右。总共 1G 内存的机器跑起来会有点紧,建议 2G 起步。

磁盘 IO 方面,如果用的是机械硬盘,大量小文件读写会很慢。建议数据目录放在 SSD 上,或者用对象存储后端,把 IO 压力转移出去。

网络带宽方面,自建网盘最大的瓶颈往往是上行带宽。家用宽带的上行通常只有几十兆,多人同时下载会卡。如果对速度要求高,可以考虑把存储后端切到对象存储,利用对象存储的 CDN 加速。

我常用的监控命令:

# 查看 Cloudreve 进程资源占用 top -p $(pgrep cloudreve) # 查看磁盘 IO iostat -x 1 # 查看网络连接 ss -tlnp | grep 5212

5.5 常见问题速查表

问题现象可能原因排查方法解决方案
上传大文件报 413Nginx 限制查看 Nginx 错误日志调大client_max_body_size
上传中途断开超时设置过短查看 Nginx 和 PHP 超时日志调大proxy_read_timeout和max_execution_time
数据库连接失败配置错误或服务未启动手动登录 MySQL 测试检查conf.ini和 MySQL 状态
文件名乱码字符集不是 utf8mb4查看数据库字符集修改数据库和表字符集
后台 IP 全是 127.0.0.1未配置信任代理检查TrustedProxies添加 Nginx IP 到信任列表
离线下载无速度Aria2 未启动或配置错误检查 Aria2 服务状态重启 Aria2 并检查 RPC 配置
页面打开慢未开 Redis 或缓存失效检查 Redis 连接安装并配置 Redis
证书续期失败80 端口被占用检查 Nginx 配置确保 80 端口可访问

提示:排查问题时,日志是最好的朋友。Cloudreve 的日志在cloudreve.log,Nginx 的日志在/var/log/nginx/,MySQL 的日志在/var/log/mysqld.log。遇到问题先看日志,比盲目搜索快得多。

6. 数据安全与日常维护经验

6.1 备份策略:别等丢了才后悔

自建网盘最大的风险不是被攻击,而是数据丢失。硬盘会坏、系统会崩、手会抖。我见过太多人搭完网盘就不管了,直到某天硬盘报警才慌。

我的备份策略是“三二一”原则的简化版:至少两份备份,一份本地一份异地。本地备份用 rsync 定时同步到另一块硬盘,异地备份用对象存储或者另一台服务器。

Cloudreve 的数据分两部分:数据库和文件。数据库存的是元数据(用户、文件索引、分享链接),文件存的是实际内容。两者必须一起备份,只备份文件不备份数据库,恢复后文件索引全丢了,等于没备份。

数据库备份用 mysqldump:

mysqldump -ucloudreve -p cloudreve > /backup/cloudreve_$(date +%Y%m%d).sql

文件备份用 rsync:

rsync -avz --delete /var/www/cloudreve/uploads/ /backup/uploads/

我一般写一个脚本,每天凌晨 3 点跑一次,保留最近 7 天的备份。脚本内容:

#!/bin/bash BACKUP_DIR=/backup DATE=$(date +%Y%m%d) # 备份数据库 mysqldump -ucloudreve -p'StrongPass123!' cloudreve > $BACKUP_DIR/db_$DATE.sql # 备份文件 rsync -avz --delete /var/www/cloudreve/uploads/ $BACKUP_DIR/uploads/ # 删除 7 天前的备份 find $BACKUP_DIR -name "db_*.sql" -mtime +7 -delete

加到 crontab 里:

0 3 * * * /bin/bash /root/backup.sh

6.2 安全加固:别让网盘变成公共厕所

自建网盘暴露在公网上,安全必须重视。我踩过的坑包括:弱密码被爆破、后台路径被扫描、分享链接被恶意爬取。

第一道防线是强密码。Cloudreve 的管理员密码一定要复杂,不要用admin123这种。我一般用 16 位以上的随机字符串,包含大小写、数字、特殊符号。

第二道防线是改后台路径。Cloudreve 默认后台路径是/admin,很容易被扫描到。可以在 Nginx 里做一个路径重写,把/admin映射到一个随机路径:

location /my-secret-admin-path/ { proxy_pass http://127.0.0.1:5212/admin/; proxy_set_header Host $host; }

这样外部访问/admin会 404,只有知道随机路径的人才能进后台。

第三道防线是限制分享链接的访问频率。Cloudreve 本身没有频率限制功能,但可以在 Nginx 层面做:

limit_req_zone $binary_remote_addr zone=share:10m rate=10r/s; location /s/ { limit_req zone=share burst=20 nodelay; proxy_pass http://127.0.0.1:5212; }

这表示每个 IP 每秒最多 10 个请求,突发允许 20 个。超过就返回 503,能有效防止爬虫批量抓取分享链接。

第四道防线是定期更新。Cloudreve 的更新频率不低,新版本会修复安全漏洞。我一般每个月检查一次更新,有安全相关的更新立刻升级。升级很简单,下载新版本二进制文件,替换旧的,重启服务即可。数据库结构如果有变化,Cloudreve 会自动迁移。

6.3 存储扩容与迁移方案

用了一段时间之后,文件越来越多,本地硬盘满了,这时候就需要扩容或者迁移。

最简单的扩容是加一块硬盘,挂载到新的目录,然后在 Cloudreve 后台添加一个新的存储策略,把新文件存到新硬盘上。但这样老文件和新文件分散在两块盘上,管理起来麻烦。

更好的方案是迁移到对象存储。Cloudreve 支持多种对象存储后端,配置好之后,新上传的文件直接进对象存储,老文件可以手动迁移或者保持本地。对象存储的好处是容量无限、不怕硬盘坏、自带 CDN 加速。缺点是流量要花钱,但个人使用量不大,费用通常可以接受。

迁移步骤大致是:在对象存储服务商那里创建一个 Bucket,拿到 AccessKey 和 SecretKey,然后在 Cloudreve 后台“存储策略”里添加一个新的策略,选择对应的存储类型,填入密钥和 Bucket 信息。然后把默认存储策略切换到新的,新文件就会走对象存储。

老文件的迁移,Cloudreve 提供了一个“迁移”功能,可以在文件管理里选中文件,选择迁移到目标存储策略。但大批量迁移会比较慢,建议在低峰期操作。

注意:迁移之前一定要先备份数据库,迁移过程中不要中断服务。如果迁移失败,至少还能回滚。

6.4 日常维护清单

我给自己列了一个日常维护清单,每周花十分钟过一遍,能避免大部分突发故障。

  • 检查磁盘空间:df -h,确保数据盘使用率不超过 80%
  • 检查服务状态:systemctl status cloudreve nginx mysqld redis aria2
  • 检查日志有无异常:tail -100 /var/www/cloudreve/cloudreve.log
  • 检查备份是否成功:ls -lh /backup/
  • 检查证书有效期:certbot certificates
  • 检查系统更新:yum check-update

这套流程跑下来,基本能保证网盘稳定运行。我有一台机器跑了两年多,除了几次主动升级,没有出现过意外宕机。

7. 我个人的一些使用体会

Cloudreve 在 CentOS 7 上的部署,说难不难,说简单也不简单。难点不在 Cloudreve 本身,而在于 CentOS 7 的环境配置——软件源老、依赖版本低、各种默认配置需要调整。但只要把环境理顺了,Cloudreve 的部署就是解压、改配置、启动三步的事。

我用这套方案给好几个朋友搭过网盘,最小的机器是 1 核 1G,跑起来也没问题,只是不能开太多并发。最常用的配置是 2 核 4G,挂一块 500G 的数据盘,够十几个人小团队用。

如果你问我最值得注意的一点是什么,我会说是备份。技术上的问题都能解决,数据丢了就真没了。我见过太多人把重要文件往自建网盘一扔就不管了,这是对自己数据的不负责任。

另外一个小技巧:Cloudreve 的 WebDAV 功能非常实用。你可以在本地用 RaiDrive、NetDrive 这类工具把网盘挂载成磁盘,直接拖拽文件,体验和本地硬盘几乎一样。配置方法是在 Cloudreve 后台开启 WebDAV,然后在本地客户端填入地址https://your-domain.com/webdav,用户名密码就是 Cloudreve 的账号密码。挂载之后,你可以用任何本地软件直接读写网盘文件,不用再打开浏览器上传下载。

这个功能我用了之后就回不去了,强烈推荐你试试。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 1:31:07

基于Matlab与Vrep的2D激光雷达动态建图算法验证与调参实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:30:42

STM32驱动ILI9325 3.2寸TFT屏:FSMC接口初始化与刷屏优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:29:58

Linux多线程全局变量互斥访问:六种机制原理与选型实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:29:48

AnyPS5:用Tauri和SQLite构建离线优先的游戏库管家

AnyPS5这个工具&#xff0c;最初只是我给自己做的“游戏库整理夹”。玩了不少年的玩家应该都有同一种体验&#xff1a;大促或者多平台买买买之后&#xff0c;库里越堆越多&#xff0c;有的听说评分高买来压箱底&#xff0c;有的和朋友开过两局就吃灰&#xff0c;还有的纯粹因为…

作者头像 李华
网站建设 2026/10/14 1:29:40

STM32病床呼叫系统:低延迟、抗干扰、高可靠嵌入式设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:29:34

AC990会计核算软件v8.3实操指南:从建账到出表全流程

简介&#xff1a;AC990会计核算软件V8.3是专为企事业单位打造的财务管理系统&#xff0c;聚焦凭证管理、账簿登记、报表编制、成本计算与资产管理等核心会计环节。系统支持凭证自动借贷校验、批量导入导出、实时账簿更新、内置资产负债表/利润表/现金流量表模板&#xff0c;并可…

作者头像 李华