0x0F - 搭建自己的云存储空间!闲置主机的现代化改装!
TL;DR 太长不看的环境搭建总结
- 系统:Ubuntu 22.04 LTS
- 私用网盘:alist
- 流媒体平台:Jellyfin
- 离线下载:aria2 RPC
- 内网穿透:ZeroTierOne
- 百度网盘命令行:bypy
说在前面
不知不觉,家中常备的 Minecraft 服务器迎来了一波游玩人数的低谷,从游玩人数高峰(4人)一下子跌倒了谷底(1人)。
考虑到全球碳中和运动,咱们得节能减排,充分利用资源。正当此时,准备对闲置的 MC 服务器来一波现代化改装,姑且定下了以下的目标。
- 访问本地硬盘存储的各种文件
- 拥有远程下发离线下载任务的能力
- 简易流媒体播放 & 资源刮削
- 内网穿透访问
考虑到互联网环境危机四伏,除却离线下载的功能外,其余均在内网环境下使用。
机器配置如下:
- 系统:Ubuntu 22.04 LTS
- 处理器:AMD R5 3600 6-core
- 内存:8G x 2 DDR4 3600
- 显卡:GeForce GT 710 亮机卡
- 存储:
- WD SN520 NVMe SSD 500G
- Seagate 7E10 8T HDD
以上,除了 8T 的 HDD 是为了扩大存储空间而新添加的以外,其余都是从前延续下来的配置。
这么看来,当初玩 MC 多加了一根 8G 的 RAM ,现如今在新的场景下显得有点性能冗余。 _(:з」∠)_
如何部署存储服务
相比于百度网盘捉急的下载速度,使用本地网络存储的一大好处就是一次下载,快速体验。
因此,挑选一个合适的网络存储管理平台也是相当重要的一环。
以下是我使用过的两种比较简单的私有网盘搭建方式。
轻量 Nginx 简易配置
其实,如果只是需要一点内网下载的功能,使用 nginx 稍加配置就能达到 “可用” 的状态了。
具体如何部署 nginx 在此不作赘述,网上教学已经很多了,这里只对如何修改配置文件作一些提示:
1 | $ vi /etc/nginx/nginx.conf |
它的界面大概长这样:
堪堪够用,如果没有特别复杂的需求的话,这就足够了。
但严格来说,这并不是私有网盘,更不用说一些在线浏览的功能了。
因此,我们需要一个更灵活,更丰富的网盘服务作为我们的展示前端
Alist 界面
Alist 是 Github 上的一个开源自建文件存储管理系统,这里 是它的官方仓库。
它不仅支持多样的线上网盘挂载方式,同时也支持不少格式的在线预览,甚至可以作为轻量的流媒体播放平台使用。
官方提供了 docker 镜像,因此可以用 docker 的方式非常简单地进行部署。
我们先准备好一个用于存放网盘内容的文件夹,举例来说,我们这里是 /mnt/data1/media
。
在创建 docker 容器的时候需要将这个目录作为卷映射到 docker 内部
1 | docker pull xhofe/alist-aria2 # 这是预装 aria2 的版本,如果不需要的话可以直接使用 xhofe/alist |
这样执行过后我们的服务就算启动起来了,可以通过 ip 地址+端口号或是内部域名访问你的服务了。
假若是本地部署,那么地址就是 http://127.0.0.1:5244/
,具体部署机器在内网是什么 ip 可以通过 ifconfig 得到。
先别急着进去,我们还需要准备一下用于登录的账户和密码:
1 | 随机生成一个密码 |
这样你就可以进入到 alist 的网盘界面了。
可是现在我们的 alist 空无一物啊!
确实,没有配置过的 alist 什么都没有显示,那么接下来我们就要配置具体的存储路径了。
配置 alist 存储
官方文档给出了很详细的使用方法,可以参考这个链接 https://alist.nn.ci/zh/guide/
不仅有常规路径的配置,也有一些网盘的配置方案可供参考。
这里仅提供一个本地存储的配置方式。
首先在网页最下面找到 管理字样
,切换到管理界面,然后点击存储
在驱动里面找到 本机存储
,可能选项比较多,需要仔细找一下。
在配置里面有两个比较关键的配置,一个是 挂载路径
,另一个是 根文件夹路径
。挂载路径
表示在 Alist 界面中显示的路径,而 根文件夹路径
表示的是这个目录在本地的路径
1 | 我这里的配置是 |
确认配置后最终的显示效果如下。
如何部署 Jellyfin 流媒体平台
要部署 Jellyfin 的话,使用 Docker 来部署是最为方便的选项。
官方的 Docker 对中文的显示略有问题,所以使用一个更适合中文环境的定制 image 会更好。
这里使用 nyanmisaka 的定制 Jellyfin 镜像,不仅对中文更友好,还优化了对硬件解码的支持。
1 | docker pull nyanmisaka/jellyfin |
首先创建两个给 Jellyfin 保存配置文件和缓存的文件夹
1 | mkdir -p /home/jellyfin/config /home/jellyfin/cache |
为了正确识别视频源,需要将存放视频的文件夹作为外部卷引入,我这里是 /mnt/data1
。
1 | sudo docker run -d --name=Jellyfin \ |
添加 github
的 host
目的是为了正常更新插件,如果想要正常刮削视频的元数据的话可以考虑添加 tmdb
imdb
的 host
。
暴露 8096 的端口号可以让我们在网页上管理 Jellyfin 的设置。
之后通过 IP 访问就可以设定管理员账号和管理影片内容了。
使用 Aria2 的离线下载功能
如果使用的是上文描述的 alist,那么 alist 自带有 aria2 的部分功能,可以在界面的右下角找到对应的选项。
Aria2 的配置和使用我之后会考虑单独写一篇日志教学。
现在国内的网盘环境可能并不适合 Aria2 的发挥,但是在服务端配置一个 Aria2 的下载服务我觉得多少还是有价值的。
使用 ZeroTier-One 进行内网穿透
ZeroTier-One 是一个功能异常强大的软路由工具,可以达到使用局域网 IP 访问远端局域网,同时支持 P2P 和流量转发。
可以说,建立点对点虚拟专用网根本不在话下,使用方式也很简单,不得不品尝。
首先去它的官网建立一个账号 https://my.zerotier.com/login
注册完毕以后你可以在 Networks
下看到已经建立好的虚拟局域网。
记下你的 Network ID
,等会在配置链接的时候会用到。
我们的目的就是将咱们的机器加入到这个网络之中。
具体局域网的网段设置和隐私设置可以参考它的说明,一般来说默认即可。
windows 端的 Zerotier 有自己的客户端,有 GUI 使用配置非常简单。
这里重点讲一下 Linux 端如何配置。
官网下载地址:https://www.zerotier.com/download/
需要注意的是,不论是哪个平台,如果网络隐私配置的是 Private
非公开,那么在实际加入网络的时候都需要人工手动同意才能加入成功。
这个在对应设备请求加入网络后,到官网上的网络管理页面内, Members
标签下,进行授权的操作。
Linux 使用
安装
如果网络条件允许,可以这样安装
1 | curl -s https://install.zerotier.com | sudo bash |
等待安装完成以后 zerotier-cli
以及相关命令理应就会出现在你的环境中了。
1 | $ zerotier-cli info # 查看你自己的网络信息 |
配置连接
如果需要加入已经创建的网络,需要刚才记下的 Network ID
,
1 | $ zerotier-cli join abcdabcdabcdabcd # 这里替换成你的 Network ID |
在弹出 OK 以后,如果你的网络隐私配置是 Private
则去官网进行网络的授权确认。
此时,你的设备已经被添加到了这个网络中,你可以用 zerotier-cli info
查看对应的网络状态和 ip 地址。
在同一个网络下的其它设备均可以通过这个 ip 访问到你的设备。
建立自己的 Moon
Zerotier-One 将自己的原理抽象成为了卫星围绕行星旋转的机制。
我们如果要查找到别的机器,首先需要访问对应的卫星服务器,如果卫星服务器没有找到对应的机器,那么就需要再通过访问行星服务器来获取到其它设备的信息,以进行网络穿透。
而官方指定的只有若干个行星服务器,且有一些还在梯子外面,访问实在是有点缓慢。
因此,Zerotier-One 的官方还提供了一种自建路由卫星服务器的方式,可以有效减少建立连接的时间,缩短延迟。
如果你有一台存在公网 IP 且网速稳定的服务器时,可以考虑自建 Moon 服务器
官方的使用说明文档:https://docs.zerotier.com/roots
我们首先这样跑
1 | zerotier-idtool initmoon abcabcabcabc >> moon.json |
查看 moon.json,大体如下
1 | { |
将你的 Moon 服务器的 IP 地址填入 stableEndpoints
中
1 | { |
Linux 的默认配置下,zerotier-one
的配置文件在 /var/lib/zerotier-one
这个路径下。
在这个路径下创建一个文件夹 moons.d
,把刚刚的 moon.json
丢到这个文件夹下。
然后,你就可以使用 zerotier-cli orbit abcabcabcabc
指定设备来访问这台机器了。
有必要说明,我这边的只是部分使用指南,需要完整的文档请访问官方。
官方的使用说明文档:https://docs.zerotier.com/roots