開始輸入,可搜尋發票、服務、域名、工單,以及 更多...
如果你在獨立伺服器上用 Proxmox VE 給客戶開 VPS,每次都掛 ISO 手動裝系統既慢又容易出錯。更高效的方法是製作一個 Proxmox VE Cloud-Init 模板:匯入 Debian 或 Ubuntu 官方雲映象,掛上 cloud-init 驅動器,轉換成模板後,每開一台 VPS 只需克隆並設定 IP、SSH 金鑰和密碼,幾十秒即可交付。本文適用於 Proxmox VE 7.x / 8.x,所有命令在宿主機 root 下執行。
雲映象是發行版官方為雲平台準備的精簡系統盤,已經內建 cloud-init,首次啟動時會自動讀取主機名、使用者、SSH 金鑰和網路配置。Debian 推薦 genericcloud 版本(體積小、適合 KVM),Ubuntu 使用 server-cloudimg。可選地用 virt-customize 預裝 qemu-guest-agent,方便 PVE 讀取虛擬機器 IP 和安全關機。
cd /var/lib/vz/template/iso # any directory with enough space
# Debian 12 (bookworm) generic cloud image
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
# Ubuntu 24.04 LTS (noble) cloud image
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
# optional: preinstall qemu-guest-agent into the image
apt install -y libguestfs-tools
virt-customize -a debian-12-genericcloud-amd64.qcow2 --install qemu-guest-agent
先建立一台沒有磁碟的空虛擬機器,再把雲映象匯入成它的磁碟,最後把這塊磁碟掛到 scsi0 並設為啟動盤。匯入時 PVE 會自動轉換為目標儲存的格式。
qm create 9000 --name debian12-cloudinit --memory 2048 --cores 2 \
--cpu host --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci --ostype l26
# import the image as a disk of VM 9000 on storage local-lvm
qm importdisk 9000 debian-12-genericcloud-amd64.qcow2 local-lvm
# (PVE 8 also accepts: qm disk import 9000 debian-12-genericcloud-amd64.qcow2 local-lvm)
qm set 9000 --scsi0 local-lvm:vm-9000-disk-0,discard=on
qm set 9000 --boot order=scsi0
cloud-init 驅動器是一塊虛擬光碟,PVE 會把你在“Cloud-Init”選項卡中填寫的配置寫入其中。雲映象通常需要序列埠控制臺才能在網頁 Console 中正常顯示,因此一併設定 serial0。模板上設定的使用者和金鑰會作為預設值,克隆後可以逐臺覆蓋。
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1
# defaults stored in the template (can be overridden per clone)
qm set 9000 --ciuser debian --sshkeys /root/.ssh/id_ed25519.pub
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --nameserver "1.1.1.1 8.8.8.8"
qm cloudinit dump 9000 user
最後一條命令可以預覽生成的 cloud-init 使用者配置,確認使用者名稱和金鑰已經寫入。
不要啟動這臺虛擬機器,直接轉換為模板。模板不能再開機,只能被克隆,磁碟會變成只讀的基礎盤。
qm template 9000
qm list
克隆分兩種:完整克隆(--full)會複製出獨立磁碟,適合交付給客戶;連結克隆幾乎瞬間完成、節省空間,但依賴模板的基礎盤,模板不能刪除,更適合內部測試。克隆後為每台 VPS 設定獨立的 IP、金鑰或初始密碼,按需擴容磁碟(雲映象原始只有 2–3GB,cloud-init 會在首次啟動時自動擴充套件分割槽)。
# full clone (independent disk) for a customer VPS
qm clone 9000 201 --name vps201 --full --storage local-lvm
# or a linked clone: created in seconds, shares the base disk
# qm clone 9000 202 --name vps202
qm set 201 --cores 2 --memory 4096
qm set 201 --ipconfig0 ip=203.0.113.21/24,gw=203.0.113.1
qm set 201 --sshkeys /root/customer201.pub --cipassword 'Change-Me-123'
qm resize 201 scsi0 +38G
qm start 201
# check
qm guest cmd 201 network-get-interfaces
ssh [email protected]
如果需要批次開通,可以把上面的步驟寫成一個簡單指令碼,傳入 VM ID、IP 和客戶公鑰即可:
#!/bin/bash
# usage: ./newvps.sh 205 203.0.113.25 /root/keys/c205.pub
ID=$1; IP=$2; KEY=$3
qm clone 9000 "$ID" --name "vps$ID" --full --storage local-lvm
qm set "$ID" --ipconfig0 ip="$IP"/24,gw=203.0.113.1 --sshkeys "$KEY"
qm resize "$ID" scsi0 +38G
qm start "$ID"
在網頁後臺也可以操作:右鍵模板 → 克隆 → 選擇“完整克隆”,然後在新虛擬機器的“Cloud-Init”選項卡修改 IP 配置和 SSH 公鑰,點選“重新生成映象”後開機。
確認 ipconfig0 的 IP、掩碼和閘道器與 IMIDC 分配的一致;登入使用者是 ciuser 設定的使用者(Debian 預設 debian,Ubuntu 預設 ubuntu),不是 root;修改 Cloud-Init 配置後需要重啟虛擬機器才會生效。可以在 PVE 的 Console(序列埠)中檢視 cloud-init 啟動日誌排查。
需要先執行 qm resize 再首次開機,cloud-init 的 growpart 會自動擴充套件根分割槽。如果已經開過機,可在系統內執行 growpart /dev/sda 1 與 resize2fs /dev/sda1(具體分割槽號以 lsblk 為準)。
可以。Rocky Linux 和 AlmaLinux 官方都提供 GenericCloud 格式的 qcow2 映象,製作流程與本文完全相同,只是預設使用者分別為 rocky 和 almalinux。
如仍無法解決,可提交工單聯絡 IMIDC 7×24 技術支援:https://www.imidc.com/submitticket.php