Start typing to search across invoices, services, domains, tickets, and more...
専用サーバー上の Proxmox VE でお客様向け VPS を提供する場合、毎回 ISO から手動インストールするのは時間がかかりミスも起きがちです。そこで便利なのが Proxmox VE の Cloud-Init テンプレートです。Debian や Ubuntu の公式クラウドイメージを取り込み、cloud-init ドライブを付けてテンプレート化すれば、新しい VPS はクローンして IP・SSH 鍵・パスワードを設定するだけで1分以内に引き渡せます。対象は Proxmox VE 7.x / 8.x、コマンドはすべてホストの root で実行します。
クラウドイメージは各ディストリビューションがクラウド向けに用意した軽量なシステムディスクで、cloud-init が組み込まれており、初回起動時にホスト名・ユーザー・SSH 鍵・ネットワーク設定を自動で読み込みます。Debian は軽量で KVM 向けの genericcloud 版、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
ディスクなしの空のVMを作り、クラウドイメージをそのディスクとして取り込み、scsi0 に接続して起動ディスクに設定します。取り込み時に保存先ストレージの形式へ自動変換されます。
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 ドライブは仮想CDで、「Cloud-Init」タブの設定内容が書き込まれます。クラウドイメージは Web コンソールで正しく表示するためにシリアルコンソールが必要なことが多いので 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
最後のコマンドで生成される user-data をプレビューし、ユーザー名と鍵が入っていることを確認できます。
VMは起動せず、そのままテンプレートに変換します。テンプレートは起動できずクローン専用となり、ディスクは読み取り専用のベースイメージになります。
qm template 9000
qm list
クローンには2種類あります。フルクローン(--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"
Web 画面でも操作できます:テンプレートを右クリック → クローン → モード「フルクローン」を選び、新しいVMの「Cloud-Init」タブで IP 設定と SSH 公開鍵を編集して「イメージを再生成」を押してから起動します。
ipconfig0 の IP・マスク・ゲートウェイが IMIDC の割り当てと一致しているか、ログインユーザーが root ではなく ciuser(Debian は debian、Ubuntu は ubuntu が既定)か、Cloud-Init 設定変更後にVMを再起動したかを確認してください。PVE のシリアルコンソールで cloud-init の起動ログを確認できます。
初回起動前に qm resize を実行すれば、cloud-init の growpart がルートパーティションを拡張します。すでに起動済みの場合は、ゲスト内で growpart /dev/sda 1 と resize2fs /dev/sda1 を実行してください(パーティション名は lsblk で確認)。
使えます。Rocky Linux と AlmaLinux は GenericCloud 形式の qcow2 イメージを公開しており、手順は本記事と同じです。既定ユーザーはそれぞれ rocky、almalinux です。
解決しない場合は、チケットから IMIDC の 24 時間 365 日テクニカルサポートへご連絡ください:https://www.imidc.com/submitticket.php