All in One - 搭建你自己的私有云
背景
想掌管自己的数据! 对云端服务产生信任危机!
本人日常使用最多的就三类云服务软件。
- 清单类
- 笔记类
- 云盘类
依赖度最高的就是云盘类软件。备份个手机照片和视频可是相当的方便。然而,对云服务的信任危机也是由它而起。
曾经包年付费使用某云很多年,一直主要用它存手机照片和视频。最近颈肩酸疼,想起曾经存过一套关于卡通熊练五禽戏的图片,下载时竟然提示图片违规。一头雾水也没搞明白哪里违规了。如果真的是违规图片也就认了。且不说这几年包年的服务费够买几块硬盘的了。就运营商私自扫描用户数据,随时对你说: “不”的卡脖子行为就已经让你彻底明白你的数据还是要掌握在自己的手里是最安全的。
说干就干,All in One 自托管。
硬件
我觉得任何硬件都可以,比如闲置不用的笔记本电脑,树莓派之类的。
看你想运行软件的规模有多大。主要参考点应该是内存,硬盘。CPU 次之。
家用基本上都是存储密集型,计算密集型的可能性不大。
我有几个闲置的树莓派。其中,配置最高的是 4GB 版的树莓派 4 。
先不说树莓派的 CPU 如何吧,内存感觉不够用。起点应该从 8GB 开始。
因为,我希望这样的组合: code-server + services (一堆可替代云服务的软件集)
如果把这些软件集部署到树莓派集群的话,真是有些折腾。家用何必这么折腾呢。
而且需要考虑耗电量,几个树莓派的耗电量也不轻啊。主要还是折腾。
这里啰嗦几句树莓派,我是从树莓派 3B+ 起步开始玩的。那时候作为单板机来说,真的是性价比够可以。
在Youtube看很多人用树莓派搭建DIY集群, 算是无比诱惑了吧。
后来,买了4GB 版的树莓派 4。再后来,疫情,价格一天一涨。而且还断货(有价无市)。
现在再看树莓派,性价比真的不高。也许真的是没有对比就没有伤害吧。
是的,那就是 Mini PC
。
同等价位的树莓派可以买一台性价比相当不错的 Mini PC
。
什么是 Mini PC
?
俗称小主机,其实,类似Intel NUC
。如果你看过小米最近发布的迷你主机(小贵,性价比不高
)。你就知道它是什么东西了。这是一种趋势,以这种趋势发展下去的话,未来家用主机就不会再有什么大机箱主机出现了。不过,它也是有一些弊端,比如,大部分小主机无法升级 CPU,无法升级 GPU,主板都是小主机厂商根据外观自己定制的。如果坏了,只能联系厂商进行维修。不能像大机箱主机那样,坏了换主板,CPU 之类的。但是,内存,硬盘,无线网卡之类的还是可以自行更换的。这个也算是间接被厂商锁定吧。这是我说的弊端。话归如此,如果和笔记本电脑对比呢?不是也一样不能更换 CPU,GPU 之类的嘛,就像 Macbook,你连内存都增设不了。
什么?你说小主机不能更换 GPU,游戏玩家不会青睐?看看这个呢?
只是厂家生产的少,你没见识过而已。
总得来说,还是缺乏标准,如果有一个统一的标准的话,未来小主机一定会遍地开花。
这个是我现在用的小主机。TRIGKEY: Green G3
- CPU: Intel Celeron N5095A (4) @ 2.900GHz
- GPU: Intel JasperLake 集显 (不玩游戏,对显卡没有什么要求)
- RAM: DDR4 - 16GB
- SSD: 512GB
- BT4.0
- 4 口 USB3.0
- WIFI 5
- RJ45: 1000M
- 可扩展 7mm 的 2.5寸 HDD (已扩展到 2TB)
- 支持4K, 60Hz 双显
- 电源输出: 最大 36W
亚马逊购买,到手价 1300 RMB左右。直接秒杀现有 8GB 版的树莓派 4。
操作系统
所有的软件都在 Docker
容器下运行,所以,这里我用的是 Pop!_OS 22.04
,其他 Linux 发行版也可以。
Windows 呢?
其实也可以,但是不推荐。
Windows 在运行 Docker
容器时,是先使用 Hyper-V
运行一个 Linux 虚拟机,然后在这个虚拟机内运行 Docker
容器。
所以,即便 Hyper-V
属于轻量级虚拟机。也是有一定的性能损耗。
相比较而言,Linux 的虚拟化方案要比 Windows 强不少。这在之后会介绍。
软件集
如果你在家庭环境运行自托管软件的话,Docker
绝对是最佳的运行时。
自托管软件,不可避免的要各种折腾,今天喜欢这个软件了。运行一下,不喜欢了,删除。
使用软件包安装的话,很难不对宿主机系统造成破坏。而且,还要为这些软件提供各种运行时,Java
,Python
,PHP
,Go
等等。
运行时的版本隔离也是问题。不如 Docker
拉取镜像轻松加愉快。
我用的是 docker compose
来运行 Docker
容器,而不是 docker
命令。主要是想通过 yaml
文件 + git
进行版本化管理。
方便后期调整时,通过一些工具进行自动化部署。
下面这些软件是我目前正在用的,它并不代表自托管软件的所有清单,GIthub 有一个整理的自托管清单: Awesome-Selfhosted
AdGuard Home
它提供一个基于 DNS
的全网广告过滤和拦截。这比浏览器安装广告拦截插件强多了。所有连接到家庭网络的设备都会被它进行广告过滤。你需要做的只是修改家庭路由器 DHCP
的主 DNS
地址就可以了。
Aria 2
一个离线下载工具,BT/HTTP/FTP/SFTP/磁力链等都支持。
Vaultwarden
1Password
,LastPass
的开源替代品。配合手机客户端,浏览器插件。可以说绝对够用。
Dufs
一个非常简单的文件管理器,平时用的非常非常少,只是用它的 WebDAV
功能来配合 Obsidian
进行多端笔记同步。
Gitea
没什么好说的,需要就整一套。
File Browser
这个用的还真多,Aria 2
下载完的电影和文件。用它改个名字,移动位置,复制,删除什么的非常方便。
Jellyfin
开源的家庭影院。这个非常推荐。有手机客户端,电视盒子客户端。下载完的电影,电视剧,动画片直接就可以在电视上播放。
Watchtower
没有用户界面,但是,如果用 Docker
自托管软件的话,这个是必装的。它会定时检查镜像的最新版本,然后自动拉取并运行新版本的镜像。省去了手动更新镜像的麻烦。
备份手机照片和视频
找了很多软件,都不合适。要么提供的功能太多。要么就是运行时太重了。耗费系统资源。比如,Nextcloud
就非常重。
后来使用 Samba
+ ES文件浏览器
的组合。iPhone
和 Android
都支持。
Coder
运行在浏览器中的 VS Code
。所以,如果你不想碰你的电脑,可以在 XPad 上打开它,躺着,卧着。使用起来和 VS Code
无区别。
Nginx Proxy Manager
带有用户界面的 Nginx
管理器。用它做所有服务的 Gateway
,证书卸载等。还支持自动申请 Let's Encrypt
证书。
至此,这个算是私有云的第一步吧,宿主 + Docker
运行自托管软件。算是 1.0。
唯一不满意的是 Coder
。我希望它看起来像一个独立的工作站,可是,实际上它却不是。因为用 Docker
根本解决不了。我是用 Dockerfile
自构建的 Coder
,每次想装新的软件,都要修改 Dockerfile
重新构建镜像。推送,拉取,运行。一顿折腾。而且,用 Coder
运行程序时,启动端口也是一个问题。需要提前规划好自己想用的端口(因为没有独立 IP
,我不是说 Docker
给容器分配的 IP
,而是在局域网分配的独立 IP
),不像独占系统那样用的自然。因为没有好的方法。直到后来遇见 LXD
。
LXD
原来,在没有好的解决办法之前,一直在错误的用 Docker
。它是一个 Application
级别的容器,而不是系统级别的容器。直到遇见 LXD
之后,才发现原来这个才是自己想要的。系统级别的虚拟化。
它共用宿主内核,提供一个完整的操作系统级别的容器隔离。比虚拟机更轻,就和运行一个进程差不多。
整个安装过程其实并不麻烦。只是在网络模型选择上需要注意一下。
我希望的效果是,容器就像局域网真实存在的物理机一样。有自己的独立 IP
。可以和局域网的其他主机互通信。
一开始,我用的是 macvlan
,它可以从 DHCP
那里获取 IP
。但是,不能和宿主通信。
后来改成网桥之后,就是我想要的效果了。
安装 LXD
去官网看文档。几步就完事。
|
|
创建网桥
|
|
配置就是上面这些,物理网卡是enp2s0
。记得 stp
一定要开,防止网桥那块网络洪泛。
执行完这些,你的宿主应该是通过网桥来获取 DHCP
分配的 IP
了。
初始化 LXD
|
|
这是 LXD
的初始化过程。
有几个注意点:
Would you like to create a new local network bridge? (yes/no) [default=yes]: no
因为已经创建了从DHCP
自动分配IP
的网桥br0
,所以,不要用LXD
创建的网桥。之后,询问网桥时,填入br0
就可以了。Would you like the LXD server to be available over the network?
这个直接填 yes 打开。之后装 UI 用。
启动系统容器
完成初始化之后,就可以启动系统容器了。这里启动的是 ubuntu。
但不限于 ubuntu。其他发行版也是可以的。
CentOS
Fedora
Debian
Kali
OpenSUSE
Rocky Linux
- 等等 这里可以找到更多: https://images.linuxcontainers.org/
|
|
我在宿主启动了两个系统容器。
|
|
service
里安装 Docker
用来运行各种自托管软件。workstation
运行 Coder
。
你可以看到,他们都有自己独立的局域网 IP
。使用上和真实物理机没有任何区别。
安装LXDWARE
这是一个 LXD
的管理 UI。你可以用它创建和销毁系统容器。就像使用私有云服务器那样。(最新 edge 版好像自带 UI)
总结
最大的收获算是 LXD
。又开阔了 Linux 虚拟化的视野。
不知道是否有更多的生产级的应用案例。 我想随着关注的人更多,这可能对企业的基础设施产生巨大的冲击,特别是 VM
。顺便说一下,LXD
不仅仅可以运行系统容器,也可以运行 VM
。
后续,需要研究一下实时跨主机迁移是怎么回事。这个功能好像 KVM
就可以。没研究过~
据说整个迁移过程是不停机迁移。网络流量也不会中断的那种。挺神秘~哈哈。