Panduan Membangun Linux Ubuntu 24 + Cloud-Init di Proxmox

Panduan langkah demi langkah untuk menyiapkan mesin virtual Ubuntu berbasis Cloud-Init di Proxmox, dari masuk ke antarmuka hingga menjalankan skrip otomatis yang siap ditempel. Fokus pada konsistensi, keamanan, dan kecepatan provisioning.

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.

Opini singkat: sekali template siap, penggandaan server tinggal hitungan menit—hemat waktu, hemat salah ketik.

Prasyarat

    • Akses Proxmox VE (Web UI & SSH) dengan hak root atau setara.
    • Storage tersedia (mis. local-lvm untuk disk VM, local untuk berkas).
    • Kunci SSH publik di mesin admin (disarankan untuk produksi).

Keamanan: utamakan SSH key; hindari password login pada produksi.

Masuk ke Proxmox

Antarmuka Web

    1. Buka https://ALAMAT-PROXMOX:PORT.
    1. Login sebagai root@pam atau akun berhak.
    1. Pastikan Datacenter → Storage menampilkan storage target (mis. local-lvm).

SSH ke Node

ssh root@IP_NODE_PROXMOX

Unduh 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.img

Buat 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=20

Buat 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}G

Konfigurasi 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 $HOSTNAME

Alternatif (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=dhcp

Statik

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_TAG

Suntik 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-agent

Opsi 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_VMID

Matriks Perbandingan: Template vs Buat Langsung

AspekTemplate Cloud-InitBuat Langsung
Kecepatan provisioningSangat cepat untuk banyak VMCocok untuk satuan
Konsistensi konfigurasiTinggi; sekali rapi tinggal duplikasiRentan variasi
PemeliharaanTerpusat di templateUlang di tiap VM
Kompleksitas awalSedikit lebih tinggiLebih sederhana di awal
SkalabilitasUnggulTerbatas

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.sh

Eksekusi 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.sh

Uji Cepat & Troubleshooting

cloud-init status --long
ip a
ip r
systemctl status qemu-guest-agent

Sumber/Referensi


Share the Post:

Related Posts