Cloud-Init mengotomasi inisialisasi boot pertama (pengguna, SSH key, jaringan, paket, dan perintah awal). Di Proxmox VE, pendekatan ini membuat provisioning konsisten dan mudah digandakan—ideal untuk lingkungan sekolah/instansi.
Prasyarat
- Akses Proxmox VE (Web UI & SSH) dengan hak
rootatau setara.
- Akses Proxmox VE (Web UI & SSH) dengan hak
- Storage tersedia (mis.
local-lvmuntuk disk VM,localuntuk berkas).
- Storage tersedia (mis.
- Kunci SSH publik di mesin admin (disarankan untuk produksi).
Keamanan: utamakan SSH key; hindari password login pada produksi.
Masuk ke Proxmox
Antarmuka Web
- Buka
https://ALAMAT-PROXMOX:PORT.
- Buka
- Login sebagai
root@pamatau akun berhak.
- Login sebagai
- Pastikan Datacenter → Storage menampilkan storage target (mis.
local-lvm).
- Pastikan Datacenter → Storage menampilkan storage target (mis.
SSH ke Node
ssh root@IP_NODE_PROXMOXUnduh Image Cloud Ubuntu Dua Empat
Masuk ke node Proxmox via SSH, lalu jalankan:
cd /tmp
wget -O ubuntu-24.04-noble-amd64-cloudimg.img \
https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.imgBuat VM Dasar & Impor Disk Cloud
Set variabel (silakan sesuaikan):
VMID=9000
VM_NAME=ubuntu24-cloudinit-base
STORAGE=local-lvm
BRIDGE=vmbr0
CPU_CORES=2
RAM_MB=4096
DISK_GB=20Buat VM, impor disk, atur boot, aktifkan Qemu Agent:
qm create $VMID --name $VM_NAME --memory $RAM_MB --cores $CPU_CORES \
--net0 virtio,bridge=$BRIDGE --ostype l26
qm importdisk $VMID /tmp/ubuntu-24.04-noble-amd64-cloudimg.img $STORAGE
qm set $VMID --scsihw virtio-scsi-pci --scsi0 $STORAGE:vm-$VMID-disk-0
qm set $VMID --boot order=scsi0 --serial0 socket --vga serial0
qm set $VMID --agent enabled=1
qm set $VMID --ide2 $STORAGE:cloudinit
qm disk resize $VMID scsi0 ${DISK_GB}GKonfigurasi Cloud-Init (User, SSH, DNS, Hostname)
Direkomendasikan (SSH-only):
CI_USER=ubuntu
CI_SSH_KEY="ISI_KUNCI_SSH_PUB_ANDA" # contoh: ssh-ed25519 AAAA... user@host
HOSTNAME=ubuntu24-base
NAMESERVER=1.1.1.1
SEARCHDOMAIN=example.local
qm set $VMID --ciuser $CI_USER --sshkey <(echo "$CI_SSH_KEY")
qm set $VMID --nameserver $NAMESERVER --searchdomain $SEARCHDOMAIN
qm set $VMID --hostname $HOSTNAMEAlternatif (lab, tidak disarankan di produksi):
CI_PASS='ganti_password_kuat'
qm set $VMID --ciuser $CI_USER --cipassword "$CI_PASS"Konfigurasi Jaringan via Cloud-Init
DHCP
qm set $VMID --ipconfig0 ip=dhcpStatik
IPADDR=10.10.150.210/24
GATEWAY=10.10.150.1
qm set $VMID --ipconfig0 ip=${IPADDR},gw=${GATEWAY}Opsional: VLAN Tag
VLAN_TAG=200
qm set $VMID --net0 virtio,bridge=$BRIDGE,tag=$VLAN_TAGSuntik Paket & Perintah Awal (user-data)
Buat user-data kustom agar paket dan perintah otomatis terpasang pada boot pertama:
mkdir -p /var/lib/vz/snippets
cat > /var/lib/vz/snippets/ubuntu24-userdata.yaml <<'YAML'
#cloud-config
package_update: true
package_upgrade: true
packages:
- qemu-guest-agent
- curl
- htop
- net-tools
users:
- name: ubuntu
groups: sudo
shell: /bin/bash
ssh-authorized-keys:
- ISI_KUNCI_SSH_PUB_ANDA
runcmd:
- [ systemctl, enable, --now, qemu-guest-agent ]
- [ bash, -lc, "echo 'Cloud-Init sukses' > /etc/motd" ]
YAML
qm set $VMID --cicustom "user=local:snippets/ubuntu24-userdata.yaml"Boot & Verifikasi
qm start $VMID
qm terminal $VMID
# SSH ke VM (sesuaikan IP)
ssh ubuntu@10.10.150.210
# cek qemu-guest-agent
systemctl status qemu-guest-agentOpsi Lanjutan: Jadikan Template lalu Clone
qm shutdown $VMID
qm template $VMID
TEMPLATE_ID=9000
NEW_VMID=801
NEW_NAME=ubuntu24-node-satu
qm clone $TEMPLATE_ID $NEW_VMID --name $NEW_NAME --full 1
qm set $NEW_VMID --ipconfig0 ip=10.10.150.211/24,gw=10.10.150.1
qm start $NEW_VMIDMatriks Perbandingan: Template vs Buat Langsung
| Aspek | Template Cloud-Init | Buat Langsung |
|---|---|---|
| Kecepatan provisioning | Sangat cepat untuk banyak VM | Cocok untuk satuan |
| Konsistensi konfigurasi | Tinggi; sekali rapi tinggal duplikasi | Rentan variasi |
| Pemeliharaan | Terpusat di template | Ulang di tiap VM |
| Kompleksitas awal | Sedikit lebih tinggi | Lebih sederhana di awal |
| Skalabilitas | Unggul | Terbatas |
Skrip Otomatis Satu Langkah (Siap Tempel)
Skrip ini mengunduh image, membuat VM Cloud-Init, mengatur CPU/RAM/disk/jaringan/hostname/DNS, menautkan user-data opsional, lalu menyalakan VM atau menjadikannya template.
cat > /root/provision-ubuntu24-cloudinit.sh <<'BASH'
#!/usr/bin/env bash
set -euo pipefail
# ====== PARAMETER UBAH SESUAI KEBUTUHAN ======
VMID="${VMID:-9000}"
VM_NAME="${VM_NAME:-ubuntu24-cloudinit-base}"
STORAGE="${STORAGE:-local-lvm}"
BRIDGE="${BRIDGE:-vmbr0}"
CPU_CORES="${CPU_CORES:-2}"
RAM_MB="${RAM_MB:-4096}"
DISK_GB="${DISK_GB:-20}"
CI_USER="${CI_USER:-ubuntu}"
CI_SSH_KEY="${CI_SSH_KEY:-}" # isikan kunci SSH publik Anda
HOSTNAME="${HOSTNAME:-ubuntu24-base}"
NAMESERVER="${NAMESERVER:-1.1.1.1}"
SEARCHDOMAIN="${SEARCHDOMAIN:-example.local}"
IPCFG_MODE="${IPCFG_MODE:-static}" # static | dhcp
IPADDR="${IPADDR:-10.10.150.210/24}"
GATEWAY="${GATEWAY:-10.10.150.1}"
VLAN_TAG="${VLAN_TAG:-}" # kosongkan bila tidak pakai VLAN
CICUSTOM_USERDATA="${CICUSTOM_USERDATA:-}" # contoh: local:snippets/ubuntu24-userdata.yaml
MAKE_TEMPLATE="${MAKE_TEMPLATE:-no}" # yes untuk template
AUTO_START="${AUTO_START:-yes}" # yes untuk langsung start
# ============================================
WORKDIR=/tmp
IMG="$WORKDIR/ubuntu-24.04-noble-amd64-cloudimg.img"
IMG_URL="https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
echo "[INFO] Mengunduh image..."
mkdir -p "$WORKDIR"
if [ ! -f "$IMG" ]; then
wget -O "$IMG" "$IMG_URL"
fi
echo "[INFO] Membuat VM $VMID ($VM_NAME)..."
qm create "$VMID" --name "$VM_NAME" --memory "$RAM_MB" --cores "$CPU_CORES" --ostype l26
NETOPTS="virtio,bridge=$BRIDGE"
if [ -n "$VLAN_TAG" ]; then
NETOPTS="$NETOPTS,tag=$VLAN_TAG"
fi
qm set "$VMID" --net0 "$NETOPTS"
echo "[INFO] Impor disk ke $STORAGE..."
qm importdisk "$VMID" "$IMG" "$STORAGE"
echo "[INFO] Set disk, boot, dan agent..."
qm set "$VMID" --scsihw virtio-scsi-pci --scsi0 "$STORAGE:vm-$VMID-disk-0"
qm set "$VMID" --boot order=scsi0 --serial0 socket --vga serial0
qm set "$VMID" --agent enabled=1
qm set "$VMID" --ide2 "$STORAGE:cloudinit"
echo "[INFO] Resize disk root menjadi ${DISK_GB}G..."
qm disk resize "$VMID" scsi0 "${DISK_GB}G"
echo "[INFO] Konfigurasi Cloud-Init (user, ssh, dns, hostname)..."
if [ -n "$CI_SSH_KEY" ]; then
qm set "$VMID" --ciuser "$CI_USER" --sshkey <(echo "$CI_SSH_KEY")
else
echo "[PERINGATAN] CI_SSH_KEY kosong. Pertimbangkan untuk menggunakan SSH key."
qm set "$VMID" --ciuser "$CI_USER"
fi
qm set "$VMID" --nameserver "$NAMESERVER" --searchdomain "$SEARCHDOMAIN"
qm set "$VMID" --hostname "$HOSTNAME"
echo "[INFO] Konfigurasi jaringan..."
if [ "$IPCFG_MODE" = "dhcp" ]; then
qm set "$VMID" --ipconfig0 ip=dhcp
else
qm set "$VMID" --ipconfig0 ip="$IPADDR",gw="$GATEWAY"
fi
if [ -n "$CICUSTOM_USERDATA" ]; then
echo "[INFO] Menautkan user-data kustom: $CICUSTOM_USERDATA"
qm set "$VMID" --cicustom "user=$CICUSTOM_USERDATA"
fi
if [ "$MAKE_TEMPLATE" = "yes" ]; then
echo "[INFO] Mengubah menjadi template..."
qm shutdown "$VMID" || true
qm template "$VMID"
echo "[SELESAI] Template siap: $VMID ($VM_NAME)"
else
if [ "$AUTO_START" = "yes" ]; then
echo "[INFO] Menyalakan VM..."
qm start "$VMID"
fi
echo "[SELESAI] VM siap: $VMID ($VM_NAME)"
fi
BASH
chmod +x /root/provision-ubuntu24-cloudinit.shEksekusi Skrip
export VMID=9000
export VM_NAME=ubuntu24-cloudinit-base
export STORAGE=local-lvm
export BRIDGE=vmbr0
export CPU_CORES=2
export RAM_MB=4096
export DISK_GB=20
export CI_USER=ubuntu
export CI_SSH_KEY="$(cat ~/.ssh/id_rsa.pub)"
export HOSTNAME=ubuntu24-base
export NAMESERVER=1.1.1.1
export SEARCHDOMAIN=karangturi.or.id
export IPCFG_MODE=static
export IPADDR=10.10.150.210/24
export GATEWAY=10.10.150.1
# export VLAN_TAG=200
# export CICUSTOM_USERDATA=local:snippets/ubuntu24-userdata.yaml
sudo /root/provision-ubuntu24-cloudinit.shUji Cepat & Troubleshooting
cloud-init status --long
ip a
ip r
systemctl status qemu-guest-agent

