不知道大家日常工作中有没有遇到过这样的场景:需要在不同系统间测试软件工具的兼容性,或者验证某些问题。以宝塔面板为例,除了要兼容主流常规发行版,还需适配腾讯云、阿里云等厂商自研系统。以往的做法是,在云厂商开一台按量或竞价机器进行测试,结束后再销毁。但这既麻烦,成本也不低。
最近在搭建 ALLinSSL 玩玩,需要跨 Windows、macOS、Linux 等多个系统平台测试。如果依赖云厂商,会十分繁琐。正好那天想到自己还有闲置的主机,于是说干就干,直接动手搭建自己的 PVE 虚拟机环境。以下是踩坑实录。(其实公司有测试服务器可用,但上面据说“神仙打架”,不如自建来得方便。)
Proxmox Virtual Environment 是一款基于QEMU/KVM与LXC技术的开源服务器虚拟化管理解决方案,在开始搭建之前,你需要先准备一个小主机/服务器/不用的电脑以及U盘,以下是踩坑实录:
1. 首先我们需要前往PVE官网下载镜像:https://www.proxmox.com/en/downloads,笔者下载的是最新的8.4版本。

2. 除此之外还需要一款U盘烧录工具,将镜像烧录在U盘上,大家可以根据使用习惯自行寻找,笔者这里采用的是BalenaEtcher,可以自行前往Github下载,很简单的三步,选择刚刚下载的镜像,选择U盘,直接烧录即可。
地址:https://github.com/balena-io/etcher/releases/tag/v2.1.2

3. 烧录完成后,把U盘插到需要安装PVE的机器上,开机,按快捷键进入启动菜单(快捷键需要大家根据主板厂商自己查一下),选择U盘启动。

4. 启动后如果顺利的话会进入PVE的安装界面,我们直接回车,选择第一个,图形模式安装。

5. 等待加载启动。

6. 等待进入安装引导界面后,会先让你阅读用户协议,如果没问题的话点击屏幕右下角的“I Agree"同意并进入下一步(之前看教程同意协议的按钮在屏幕中间,结果到了右下角,一时之间居然没找到)。

7. 选择需要安装PVE的硬盘,我这里只有一块硬盘,所以我直接下一步了。

8. 选择国家、时区和语言,在这一步是选择不了简体中文的,所以语言那里可以忽略先。

9. 接下来需要root密码,记住了,后面登陆网页和SSH都需要用到。

10. 配置网络接口、主机名、IP、网关以及DNS,注意如果要改IP千万不要和内网已有IP重复,建议用arp扫一下子先。(我这里就犯了这个错误,结果后面PVE主机失联了)

11. 随后确认信息,如果没有问题的话右下角点击“Install"。

12. 等待安装成功,自动重启进入PVE,进入后会显示网页管理地址。(其实还有个安装成功的页面了,但是闪的太快了,没来得及截图)

13. 浏览器输入管理地址进入管理界面,会提示证书不受信任,点击高级直接忽略继续即可。

14. 默认用户名root,密码就是你刚刚设置的,这里可以切换语言为简体中文,然后登录。

15. 到此来讲应该是可以直接用了的,但如果你想更新系统和组件的话,还需要修改一下镜像源,编辑/etc/apt/sources.list,替换为如下内容。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# deb-src https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
# 笔者这里网络连接官方源速度正常,所以用的官方源没有用清华源
# deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
替换完成后执行以下命令更新,不过平时建议大家能跑还是尽量不要动。
apt update
apt upgrade -y
# 涉及内核更新的话需要重启
reboot
到此安装的步骤已经完成了,随后就可以开始使用了,前期笔者采用的办法是使用ISO镜像创建虚拟机并安装,但是这样效率不高,而且不适合快速开虚拟机的场景,所以转而采取通过Cloud Image创建模板的方式,如果你需要通过ISO方式的安装只需要把ISO导入到此处,然后正常按流程引导创建虚拟机即可。

笔者接下来将介绍另外一种方式,通过各种发行版提供的云镜像创建虚拟机模板,然后克隆的方式开机,以Debian为例,首先我们需要前往其官网下载已经构建好的云镜像,如果大家自己找的话可以搜索Debian(替换成你需要的发行版名称) Cloud Image,笔者按习惯下载的此镜像,实际使用中大家根据自己的需要来。

我们可以直接SSH登陆PVE使用wget命令下载,也可以下载完通过SFTP/FTP的方式上传到虚拟机中,下载或上传完之后,我们依次执行以下命令:
1. 创建虚拟机
qm create 201 --name Debian-12-template --net0 virtio,bridge=vmbr0 --ostype l26 --memory 1024 --cpu host
201: 虚拟机ID,可以自行替换
Debian-12-template:模板名称,可以自行替换。
其他参数可以参照https://emchaye.cn/docs/tutorial-linux/20240229-03/或官方文档。
2. 导入镜像
qm importdisk 201 debian-12-genericcloud-amd64.qcow2 local-lvm -format qcow2
debian-12-genericcloud-amd64.qcow2:替换为你实际下载的镜像文件名称
local-lvm:需要替换为实际的存储节点名称,后续相关均需要替换

3. 挂载导入的磁盘到控制器
qm set 201 --scsihw virtio-scsi-single --scsi0 local-lvm:vm-201-disk-0
4. 配置cloud-init驱动器,通过cloud-init控制用户密码以及网络。
qm set 201 --ide2 local-lvm:cloudinit
5. 设置引导磁盘
qm set 201 --boot order=scsi0
6. 启用QEMU Guest Agent
qm set 201 --agent enabled=1
7. 添加串口显示控制台
qm set 201 --serial0 socket --vga serial0
8. 将虚拟机转化成模板
qm template 201
到此一个模板就创建完成了,我们还需要去控制面板配置一些东西,首先硬件界面大家可以自己改一下磁盘大小,默认3g的磁盘可能不怎么够用。

接下来就是配置cloud-init一些数据,主要修改用户、密码以及IP配置,此外还需要注意,debian等发行版默认禁用了root的密码登陆,所以可能需要添加SSH公钥

此外如果你需要虚拟机随着机器开机启动的话,点击选项,把开机自启动改为是

到此配置就已经基本完成了,这个时候我们就可以开始克隆了,点击更多-克隆

配置名称VM ID等,模式建议选择完整克隆,否则可能会影响磁盘性能

找到克隆完的虚拟机,点击启动

等待机器自动初始化,初始化完成后可以在此直接登陆

输入在cloud-init设置的用户名和密码即可直接登陆

后续如果需要修改密码或者SSH公钥可以在cloud-init设置页面修改,注意修改后需要重启虚拟机,至此本篇教程就结束啦