使用 Alpine 做 Virtual Machine 并迁移 Vikunja
Alpine作为OS可说算是非常轻量了。作为在Proxmox里面运行Docker的VM,轻量就是正义。本文记录一下使用Alpine在Proxmox里面做VM的过程。用迁移Vikunja到这个新VM里面看看效果。同时这篇文章也相对详细的记录一下 Proxmox 上面创建一个基本可用的 docker container host VM 的过程,以资后用。
Alpine简介
官方信息
Alpine最大特点就是轻量。相比于Ubuntu server,Alpine占用更小的硬盘空间(以Alpine sys mode为例),有更快的启动速度,内存占用也更小。同时因为精简的Kernel,牺牲了一些compatibility的同时,大大降低了Kernel的体积从而让整个系统精简,快速,安全(安全是因为更少的 attack surface)。
Alpine使用 apk
命令管理 package,使用下来感觉也还不错。官方有很多 wiki document,本文中的很多步骤都是照着官方Wiki做的。

Alpine Linux WIKI
Create VM
Alpine Linux downloads
鉴于我们是在 Proxmox 里面作为 Virtual Machine 跑,所以我们选择 VIRTUAL 类别的 image。我估计这个版本的 kernel 里面应该已经针对 VM 的场景做了一些 “优化”,比如去掉很多大概用不上的 Drivers,然后应该要保证一些 virtio 性质的 Driver 都已经装好了。


创建 VM 的时候建议用 Q35 machine type。对于 Vikunja 应该是没有任何区别的,但是 i440确实太老了,目前来看应该没有什么理由用 i440 了。而且这里还有个文章说 Q35 在 Idle 时候使用更少的 CPU。对于 Self Host 来讲,Idle 的时间是很长的,所以能省一点总还是好一点的。

Disks方面,因为Proxmox上面的VM Pool用的是ZFS,硬盘是NVME,所以自然要 Enable Discard
并且 Enable SSD Emulation
. 虽然其实也不是特别重要就是了。磁盘空间给个8GB大概就够了,之后如果有需要再添加新空间。

Install Alpine
开机之后,Alpine会从ISO image启动,给个 Terminal 用,安装都在Terminal里面搞定。起始用户是 root,没有密码。

用 root 进入以后,命令行上面会直接提示可以用 setup-alpine
来配置和安装系统。我们就用这个命令就好了。然后我们需要回答一系列的问题,从键盘 keymap 开始,包括hostname (注意 Alpine这里要设置的是FQDN,不光是short hostname), 磁盘的parititioning,network setup,还有 SSH 的设置,等等等等。确实算是涵盖了一个 VM OS 初始配置的各个方面了。
注意在Disk & Install的步骤,会问 mode 是 sys, data, 还是 diskless。这里我们还是选择更传统的 sys
。但是其实 Alpine 在 data mode 和 diskless 模式下才是最能体现其轻量快速的特点。这些模式的区别详见官方文档。而 sys
模式就是常规的把东西都存在硬盘上的模式。而其他的模式就更加贴近于 immutable system的用法了,对于 enterprise 或者比较严肃的使用场景更加适用。
Reboot 之后我们就可以用root或者我们之前配置的user登入了。Alpine的reboot还是用 reboot now
命令。而关机命令跟 Ubuntu 不同,不是 shutdown now
而是 poweroff
。
Config Alpine
Xterm.js
对于 Proxmox 里面的 VM,如果只是用 VNC 的 console的话,是没有办法 copy-paste的。这在日常使用中还是有点麻烦的。虽然可以从 Proxmox host上面走 ssh-copy-id 然后 1-click ssh 进去。但是毕竟还是多了一些步骤。而且因为 VM 很多时候各种删除改名等等操作,导致 Proxmox host 里面的 known hosts 乱七八糟,时不时就因为 hostname<>IP<>key mismatch需要手动删除 record,就很麻烦。所以如果有一个不需要 key record 的 console 可以支持 copy-paste,就会好用很多。而 xtermjs
就可以满足这个需求。 xtermjs
是原生被Proxmox支持的。我们只需要配置好 VM 就可以直接用。
