自建网盘兼图床
自建网盘兼图床
网盘 ByteCloud:https://cloud.braumace.cn
继自建博客之后,需要展示图片,使用了一段时间 七牛云 + CDN 加速,前阵子出现了各大知名博主 CDN 流量被盗刷事件,不禁有点害怕。
再加上文件放在云存储上,毕竟是公家的,文件上传都会被扫描一遍,毫无隐私可言,万一想存点嘿嘿的东西,那怎么办呢?而且公有云存储的存储有限,其次安全性和稳定性也不能一直保证,毕竟是放在别人家里,别人未必会帮你好好保存。
于是利用之前学过的,用 MinIO 在服务器上搭建了一个对象存储服务,可以在网页端上传和下载文件,但很快发现,它仅仅只能用来存储,不能实现外部的访问。比如我想实现一个图床,其自身并不能提供一个外部链接,供所有人访问。
其实解决方法也有,MinIO 提供了 SDK 和 API,可以给第三方调用,配合 Typora 或 PicGo 使用,也有很不错的效果,详情可自行百度。
这里我结合日常使用习惯和需要,选择使用 Cloudreve。
什么是 Cloudreve
Cloudreve 是一个支持多家云存储驱动的公有云文件系统,可助你即刻构建出兼备自用或公用的网盘服务,以跨平台、多用户、多存储节点、存储无关的方式,通过多种存储策略的支持、虚拟文件系统等特性实现灵活的文件管理体验。
具有非常多的功能,可以分布式部署,集成了多家云存储端,既可以将文件存储在本地,也可以存储在外部,实现无差别存取;可以创建外链分享文件以及目录;支持 WebDAV 协议,可以从多种设备和应用上访问等等,可以说 Cloudreve 完美满足了我所需要的功能。
搭建过程
根据 官方文档,快速部署。
在 GitHub Release 中下载已构建打包好的压缩包,选择
linux_amd64.tar.gz
版本。直接放上压缩包(它真的太方便了):cloudreve_3.8.3_linux_amd64.tar.gz
转到下载的文件夹目录,解压并启动。
#解压获取到的主程序
tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz
# 赋予执行权限
chmod +x ./cloudreve
# 启动 Cloudreve
./cloudreve
启动后如下图所示:
Cloudreve 在首次启动时,会创建初始管理员账号(上图黄色部分),请注意保管管理员密码,此密码只会在首次启动时出现。如果忘记了初始管理员密码,需要删除同级目录下的 cloudreve.db
,重新启动主程序以初始化新的管理员账户。
启动后 Cloudreve 默认会监听 5212
端口,此时可以在浏览器中访问 http://服务器IP:5212
,输入管理员账号密码进入 Cloudreve。
其实到这一步,这个网盘就已经搭建完成可以使用了。下面是一些个人配置。
- 右上角「个人 - 管理面板」,配置站点信息
- 配置存储策略
本机存储
即存储在安装 Cloudreve 的机器上,从机存储
用于配置分布式存储,另外也提供了常见的云存储供应商选项,可以将文件存储在第三方,通过 Cloudreve 访问。
配置存储策略:存储目录为 Cloudreve 安装路径下的相对路径,也可以是机器的绝对路径。存储路径和文件名都可以使用 魔法变量
,非常方便。
最重要的是配置直链,开启后每个文件都会生成一个链接,允许外部访问,而且长度很短,只要不删除就能一直保留。有需要的话也可以配置 CDN 域名加速访问。
开启直链后的效果如下,任何一个文件都可以拥有一个外链,且不随文件位置的改变而变化,只与文件名有关。
这样就实现了一个图床的效果。
后面配合 WebDAV,在本地保存图片后,云端生成外链使用,并且图片如果有修改,只要文件名不变,外链也不用改。
后面的配置自行设置即可。新添加一个存储策略时采用的是 向导模式编辑,后续可以通过 专家模式 进行更详细的配置。
- 在用户组里面,可以指定用户使用的存储策略和可用的最大容量,以及下载限速(当然不建议这么做)、创建分享链接等等。默认的下载不限速,下载速度只和机器自身的性能相关。
- 如果不想用默认创建的管理员账号密码,可以进行修改。
配置进程守护
什么是守护进程:深入理解守护进程:守护进程干嘛的?
相关信息
守护进程(Daemon):是一类在后台运行的系统服务进程,而不是在交互式用户界面下运行的进程。它们通常在系统启动时启动,并持续运行以提供某种服务或执行特定任务。守护进程独立于任何终端会话,通常不接受用户输入,而是通过系统的事件驱动或定时器来执行任务。
Linux 系统有很多守护进程,大多数服务都是用守护进程实现的。例如常见的常见的守护进程包括系统日志进程 syslogd
、 Web 服务器 httpd
、邮件服务器 sendmail
和数据库服务器 mysqld
等。
为什么要配置进程守护呢?
因为我们的 Cloudreve 作为一个网盘,相当于是一个文件服务器,其要求一定是能稳定运行,这样我们才能随时随地使用它。如果不将它注册为一个进程,进行进程守护,万一服务器突然宕机或停电等,我们的网盘服务将变得不可用。
注意
从前面使用 ./cloudreve
命令启动服务可以看出,其实 Cloudreve 默认启动方式是前台启动,好处是可以提供即时的交互体验和日志查看,但坏处是它会占用大量的系统资源,除非关闭否则无法使用其他 Linux 命令、无法使用其他应用程序,且运行不稳定,容易受到干扰而崩溃停止。
所以需要将 Cloudreve 注册为一个进程,设置开机自动启动,当服务器宕机后恢复也能够重启服务。
官方文档中提供了两种配置进程守护的方法,分别是 Systemd 和 Supervisor。
Systemd
是Linux 自带的系统和服务管理器,常见命令以systemctl
开头。Supervisor
是一个轻量级的进程管理工具,推荐搭配宝塔面板使用,效果更好。
这里我使用 Systemd
配置进程守护:
- 创建配置文件
vim /usr/lib/systemd/system/cloudreve.service
- 将下面代码粘贴到配置文件中,并将下文
PATH_TO_CLOUDREVE
更换为程序所在目录
[Unit]
Description=Cloudreve
Documentation=https://docs.cloudreve.org
After=network.target
After=mysqld.service
Wants=network.target
[Service]
WorkingDirectory=/PATH_TO_CLOUDREVE
ExecStart=/PATH_TO_CLOUDREVE/cloudreve
Restart=on-abnormal
RestartSec=5s
KillMode=mixed
StandardOutput=null
StandardError=syslog
[Install]
WantedBy=multi-user.target
- 更新配置并设置开机启动
# 更新配置
systemctl daemon-reload
# 启动服务
systemctl start cloudreve
# 设置开机启动
systemctl enable cloudreve
管理命令:
# 启动服务
systemctl start cloudreve
# 停止服务
systemctl stop cloudreve
# 重启服务
systemctl restart cloudreve
# 查看状态
systemctl status cloudreve
配置站点 URL 及免费 HTTPS
- 先去阿里云服务器配置 域名解析DNS,添加记录,填写想配置的「二级域名」,再填写「服务器 IP 地址」即可。
- 再去 阿里云数字证书管理服务 申请免费的 SSL 证书。
原「免费证书」已经换成了「个人测试证书」,点击「创建证书」。
输入想要配置的域名,勾选「快捷签发」,第一次申请的时候要填个人信息,签发速度会比较慢,大概 个小时,后面再申请的时候就很快了, 分钟左右就能批下来。
得到 SSL 证书后,下载证书,选择服务器类型为 Nginx
。
- 解压后将
pem
和key
文件上传至 Linux 服务器,建议放在 Nginx 目录下,然后修改 Nginx 的配置文件nginx.conf
。
提示
使用 Linux 命令安装的 Nginx,默认路径在 /usr/nginx/
而使用宝塔面板安装的 Nginx,默认路径在 /www/server/panel/vhost/nginx
可以通过查看 nginx 的运行进程,显示 nginx 的 安装目录
ps -aux | grep nginx
在 nginx.conf
中添加如下配置:
http {
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.braumace.cn; # 指定域名
root /usr/share/nginx/html;
ssl_certificate /etc/pki/nginx/cloud.braumace.cn.pem; # pem存放路径
ssl_certificate_key /etc/pki/nginx/cloud.braumace.cn.key; # key存放路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:5212; # 本地访问端口
# 如果要使用本地存储策略,请将下一行注释符删除,并更改大小为理论最大文件尺寸
client_max_body_size 20000m;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
- 最后在 Cloudreve 管理面板,「站点信息」里面配置站点 URL 为
https://cloud.braumace.cn
即可。
配置 WebDAV
什么是 WebDAV
WebDAV 是一种基于 HTTP 协议的文件传输协议,如今有许多第三方文件管理器、视频播放器等产品都支持通过 WebDAV 协议访问 Cloudreve 中的文件,可以借此实现跨平台的文件共享与同步。
简单来说,WebDAV 就像一个存储服务,各种应用都可以连接到它,允许应用直接访问我们的云盘内容,对其进行读写操作。
Cloudreve 使用 WebDAV
Cloudreve 要使用 WebDAV,要先在后台管理面板为对应用户组开启 WebDAV 使用权限。WebDAV 所使用的账号与 Cloudreve 账号并不互通,需要单独创建。
再前往前台 「导航左侧 - 连接 - 创建新账号」 创建供 WebDAV 使用的账号信息。创建完成后系统会为此账号自动生成密码,得到 WebDAV 的连接地址,密码则为系统所生成的密码。
创建 WebDAV 账号时,可以为此账号指定相对根目录,此账号只能通过 WebDAV 访问所指定相对根目录下的目录及文件。
Windows 使用 WebDAV
在上方菜单中,找到「计算机 - 映射网络驱动器」,点击添加。
指定驱动器号,将 Cloudreve 系统生成的连接地址填入,点击「完成」再填入账号和生成的密码。
连接成功后如下所示:
这样就实现了无感知地调用,可以像操作本地磁盘一样操作网盘了,包括文件的读取、存储,第三方平台对文件的读取保存都和本地一模一样。
(不过存储空间是映射的本地 C 盘的,应该是 Windows 本身的 WebDAV 不支持,获取不到实际的存储大小)