记录一下Cloudreve云盘的搭建。

概述

Cloudreve云盘的优点:

  • 颜值可以;
  • 部署很简单,连docker都不需要(还没鼓捣清楚docker),数据库之类的不用管,傻瓜式操作即可。

缺点:

  • 功能比较简单,没什么插件扩展(其实也不需要);
  • 部分开源,有一个付费的版本包含更多功能,社区环境不太友好;
  • 只支持网页端和ios的app,不支持windows和安卓(也不需要,因为有的开源网盘就算提供了app,UI也很简陋)

本地部署

Linux下直接下载压缩包到合适位置,解压执行即可完成本地部署,目前放置在~/cloudreve/目录下。

1
2
3
4
5
6
7
8
#解压获取到的主程序
tar -zxvf cloudreve_VERSION_OS_ARCH.tar.gz

# 赋予执行权限
chmod +x ./cloudreve

# 启动 Cloudreve
./cloudreve

启动之后,Cloudreve 默认会监听5212端口。(建议使用root账户启动,因为会生成相应的数据库文件等)

注意:

  • Cloudreve在首次启动时,会创建初始管理员账号,注意保管管理员密码,此密码只会在首次启动时出现。
  • 如果忘记初始管理员密码,需要删除同级目录下的cloudreve.db,重新启动主程序以初始化新的管理员账户。

进程守护

上述的启动方式不适合在网络服务中使用,下面是systemd的配置。

首先,配置如下文件

1
vim /usr/lib/systemd/system/cloudreve.service

输入如下内容(相对于官方模板,只需要修改可执行文件位置和工作目录)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target

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

StandardOutput=null
StandardError=syslog

[Install]
WantedBy=multi-user.target

然后是systemed的常用命令:

  • 更新配置 systemctl daemon-reload
  • 设置开机启动 systemctl enable cloudreve
  • 启动服务 systemctl start cloudreve
  • 停止服务 systemctl stop cloudreve
  • 重启服务 systemctl restart cloudreve
  • 查看状态 systemctl status cloudreve

注意,这样的启动方式即使是第一次启动,也不会显示管理员密码,因此至少需要在本地启动一次,然后拿到管理员账户密码,站点的具体配置需要在管理员面板进行。

网络配置

接下来是各个环节的网络配置,在Nginx建立一个站点cloud.fenglielie.top,完整的配置文件略,只需要注意:

  • SSL证书对应存放位置;
  • 代理转发到5212端口。

在设置完成后,检查配置并重新加载配置

1
2
nginx -t
nginx -s reload

然后是对cloud.fenglielie.top的域名解析,在腾讯云控制台中进行相应的设置即可。 这里对子域名cloud.fenglielie.top申请了免费的SSL证书以支持https访问,将SSL证书相关文件放置在对应位置。

测试一下应该可以顺利访问Cloud of Fenglielie

Cloudreve配置

接下来,通过管理员账户登录网盘,进入管理面板进行必要的配置。

进入参数设置/站点信息页面,修改站点的URL和名称,这里URL需要与实际站点一致,因为它被用于生成分享链接。(这个设置非常重要,因为关系到链接的生成)

需要添加页脚的备案信息:

1
2
3
4
5
6
<div style="text-align: center; margin-top: 20px; padding: 10px; background-color: #f1f1f1;">
<!-- 备案信息 -->
<p style="font-size: 12px; color: #666;">
备案号:<a href="https://beian.miit.gov.cn/" target="_blank">皖ICP备2023005611号-1</a>
</p>
</div>

在参数设置/注册与登录页面,因为这是部署的私人网盘,直接关闭新用户注册,邮箱验证等环节,只能通过管理员手动添加账户。

在用户组和用户界面,添加主用户,并修改用户组的权限,例如允许生成外链,允许压缩解压,设置容量等,目前设置的容量为2G。

还可以关注一下存储策略,包括上传的文件是否被重命名,以何种方式存储。

Cloudreve备份

在默认情况下,所有用户上传的文件都存储在cloudreve工作目录下的uploads/文件夹中,并且每一个文件都是直接可读的,除了文件名会添加一些特定含义的前缀后缀之外,并没有什么区别。

由于Cloudreve没有提供回收站之类的机制,因此我选择在本地服务器上通过定时脚本进行备份,需要备份如下的文件和文件夹:

  • cloudreve.db
  • conf.ini
  • uploads/ 整个文件夹(可能很大)

由于涉及到数据文件的权限问题,定时脚本任务必须通过root账户启动,下面的操作均使用root权限完成。

首先,在家目录下单独建立一个文件夹:/home/cloudreve_backup/,手动创建如下结构:

1
2
3
4
|- data/
|- log/
cloudreve_backup_config.json
local_backup.py

其中:

  • data/会存放最近的几次全量备份,log/会存放备份脚本的操作日志,对两者都实现了滚动更新
  • local_backup.py是备份脚本,脚本执行时会进行一次备份,调用命令需要提供配置文件参数和日志文件参数,还可以使用--rollback参数进行一次回滚
  • cloudreve_backup_config.json是备份配置文件,包括将哪些文件/文件夹备份到何处,以及最多保留几次备份

local_backup.py脚本放置在fenglielie/scripts仓库仓库中,便于版本控制。

给py脚本赋予执行权限,备份脚本的完整调用命令如下

1
/home/cloudreve_backup/local_backup.py --config /home/cloudreve_backup/cloudreve_backup_config.json --log log/cloudreve_backup.log

最后是crontab定时任务,每天2点和14点执行一次备份命令,使用crontab -e添加一行任务

1
0 2,14 * * * /bin/bash -c '/home/cloudreve_backup/local_backup.py --config /home/cloudreve_backup/cloudreve_backup_config.json --log /home/cloudreve_backup/log/cloudreve_backup.log > /dev/null 2>&1'

这里发现腾讯云服务器对root用户自带了一个每5分钟执行的定时任务,涉及到腾讯云的一些东西,不用管它,但是为了避免误操作,将其记录下来

1
*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'

补充

云盘可以生成分享链接,可以控制分享链接的具体细节,例如指定链接的过期时间,或者在下载一次后链接立刻失效,或者对链接添加密码。 云盘还可以生成外链,外链比分享链接更本质更持久,可以用于搭建图床等,外链对应的资源可以通过curlwget下载(分享链接不支持)。

普通用户可以查看自己导出的分享链接,并且可以删除分享链接以终止分享。管理员可以查看当前所有用户的所有文件,以及所有用户的分享链接并管理。

最后,考虑到容量问题(受限于服务器硬件)和可靠性问题(自行实现的备份脚本),还是选择将Cloudreve云盘作为一个辅助用品,主要使用100G的基础版OneDrive吧。