---
title: Proxmox VE
description: Tambahkan kluster Proxmox VE sebagai sumber VM: token API hak akses minimum, penyimpanan, template cloud-image, IP pool, TLS pinning, dan sumber per paket.
url: https://nexcmp.com/id/docs/infrastructure/proxmox/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# Proxmox VE

> **Where in the admin:** Infrastructure › Cloud provider › Providers (`/infra/providers`), lalu halaman penyedia (`/infra/providers/<id>`) dengan tab Overview, Clusters, VMs, Servers, dan Credentials. Paket diatur di bawah Services › Virtual Machines › Plans & pricing (`/vm/catalog`).

## Fungsi {#what-it-does}

NexCMP dapat menjual mesin virtual yang berjalan di satu atau beberapa kluster Proxmox VE, bersamaan dengan atau menggantikan CloudStack. VM dibuat dengan mengklon templat OS menggunakan klon penuh, lalu dikonfigurasi melalui cloud-init: ukuran, alamat IP dari kumpulan yang Anda tentukan, kata sandi root, dan kunci SSH. Pelanggan mendapatkan kontrol daya, konsol, snapshot, instal ulang, pengaturan ulang kata sandi, dan metrik di portal. Mereka tidak akan pernah melihat nama kluster, node, atau sumber.

Gunakan ini saat Anda sudah menjalankan Proxmox VE, atau untuk menawarkan kumpulan VM kedua dengan harga yang berbeda.

## Persyaratan {#requirements}

| Item | Persyaratan |
|---|---|
| Proxmox VE | PVE 9.x. Integrasi ini diverifikasi pada 9.2. Ini memerlukan konten penyimpanan `import` dan opsi diska `import-from` (PVE 8.2 atau lebih baru). |
| Jaringan dari panel | HTTPS ke API kluster, `https://<host or IP>:8006`. Tanpa jalur, nama pengguna, atau kueri. Panel dan pekerja sama-sama terhubung; konsol peramban diproksi melalui panel. |
| Akun | Pengguna PVE khusus dengan **API token** dan peran kustom dengan hak istimewa yang tercantum di bawah ini. Jangan pernah menggunakan `root@pam`. |
| Storage | Penyimpanan untuk diska VM yang mendukung klon (misalnya `local-lvm`). Untuk pembangun templat bawaan, penyimpanan bernama `local` dengan jenis konten `import` dan `snippets`. |
| Jaringan | Jembatan Linux (misalnya `vmbr0`) yang menjangkau jaringan tempat IP pelanggan berada. Gunakan jembatan yang mendukung VLAN jika Anda memasukkan tag VLAN. |
| IPs | Blok IPv4 (/16 hingga /30) yang dirutekan ke jembatan tersebut, dengan gateway. NexCMP menetapkan alamatnya sendiri; Proxmox tidak memiliki manajemen IP. |
| Templat | Satu VM templat cloud-init per OS, pada setiap node tempat Anda melakukan deployment, dengan agen tamu QEMU. |
| Zone | Zona yang ada untuk melampirkan kluster. Lihat [Zones](https://nexcmp.com/id/docs/infrastructure/zones/). |
| Bergantung pada | Tidak ada. |

## Siapkan infrastruktur {#prepare-the-infrastructure}

Jalankan perintah sebagai root pada node kluster mana pun.

### 1. Buat peran hak istimewa terendah, pengguna, dan token API {#_1-create-a-least-privilege-role-user-and-api-token}

1. Buat peran. Daftar hak istimewa adalah persis apa yang digunakan oleh NexCMP; tidak ada isinya yang mengedit pengguna, definisi penyimpanan, atau pusat data.

   ```bash
   pveum role add NexCMP -privs "VM.Allocate VM.Clone VM.Config.CDROM VM.Config.CPU VM.Config.Cloudinit VM.Config.Disk VM.Config.HWType VM.Config.Memory VM.Config.Network VM.Config.Options VM.PowerMgmt VM.Audit VM.Console VM.Snapshot VM.Snapshot.Rollback VM.Backup VM.GuestAgent.Audit VM.GuestAgent.Unrestricted Datastore.Audit Datastore.AllocateSpace Datastore.AllocateTemplate Sys.Audit Sys.AccessNetwork SDN.Use SDN.Audit Pool.Audit Mapping.Audit Mapping.Use"
   ```

   `Sys.AccessNetwork` diperlukan oleh pengunduhan citra awan. PVE 9 tidak memiliki hak istimewa `VM.Monitor`; jangan menambahkannya.

2. Buat pengguna dan token. `--privsep 1` berarti hak token adalah **irisan** dari izin pengguna dan izin token itu sendiri.

   ```bash
   pveum user add nexcmp@pve --comment "NexCMP"
   pveum user token add nexcmp@pve api --privsep 1
   ```

   Perintah tersebut mencetak token **secret sekali saja** (berupa UUID). Salin sekarang. ID token adalah `nexcmp@pve!api`.

3. Berikan peran tersebut kepada **kedua-duanya**, baik pengguna maupun token. Ini adalah langkah yang sering terlewat: dengan pemisahan hak akses, hanya token yang akan mendapatkan error 403 seperti `Datastore.Audit` jika pengguna tidak memiliki izin.

   ```bash
   pveum acl modify / --roles NexCMP --users nexcmp@pve
   pveum acl modify / --roles NexCMP --tokens 'nexcmp@pve!api'
   ```

4. Uji dari server panel:

   ```bash
   curl -sk -H 'Authorization: PVEAPIToken=nexcmp@pve!api=<secret>' https://192.0.2.10:8006/api2/json/version
   ```

   Dokumen JSON dengan isi `version` menandakan token berfungsi. (`-k` hanya untuk pemeriksaan cepat ini; NexCMP menyematkan sertifikatnya sendiri, lihat di bawah.)

### 2. Periksa jembatan (bridge) dan penyimpanan {#_2-check-the-bridge-and-the-storage}

```bash
pvesm status          # storages, type, content and free space
ip -br link show type bridge
```

- VM pelanggan mendapatkan `virtio` antarmuka jaringan pada jembatan yang Anda masukkan di NexCMP. Jika Anda menyetel VLAN, jembatan tersebut harus mendukung VLAN (VLAN-aware).
- Tempatkan VM pelanggan pada jembatan atau VLAN yang **terpisah dari alamat manajemen node**. Jika mereka berbagi jaringan, perangkat aturan IP manajemen otomatis pada firewall Proxmox akan membuka port 22, 8006, 3128, 5900-5999, dan 60000-60050 dari node ke setiap VM di jaringan tersebut. Jika Anda tidak dapat memisahkannya, tambahkan aturan DROP eksplisit untuk subnet VM ke port-port tersebut di atas aturan ACCEPT manajemen.

### 3. Catatan penyimpanan (LVM-thin) {#_3-storage-notes-lvm-thin}

- Biarkan **zeroing pada pengaturan default** untuk thin-pool. Menonaktifkannya (`lvchange -Zn`) dapat meninggalkan data lama pada chunk yang baru dialokasikan dan merusak tabel partisi atau sistem file dari VM yang dikloning.
- Disk yang melaporkan "write cache: disabled" hanya dapat dikloning dengan kecepatan beberapa MB/s. Periksa dengan `hdparm -W /dev/sdX` dan aktifkan write cache jika disk tersebut memiliki perlindungan dari kehilangan daya.

### 4. Aktifkan konten `import` (hanya untuk pembuat templat bawaan) {#_4-enable-the-import-content-only-for-the-built-in-template-builder}

Pembuat bawaan mengunduh citra cloud ke dalam penyimpanan bernama `local` dan membuat templat darinya. Tambahkan `import` (dan `snippets`) ke daftar konten penyimpanan tersebut. Pertahankan jenis yang sudah Anda gunakan; `--content` menggantikan seluruh daftar:

```bash
pvesm status --storage local     # note the current content
pvesm set local --content iso,vztmpl,backup,import,snippets
```

### 5. Membuat templat OS dari citra cloud {#_5-build-an-os-template-from-a-cloud-image}

Templat adalah VM cloud-init yang dikloning oleh NexCMP. Masing-masing terdaftar di bawah **OS key** pendek seperti `ubuntu-24.04` beserta ID VM-nya. Buat satu templat per OS **pada setiap node yang akan menerima VM**, karena proses kloning berjalan pada node yang dipilih.

**Opsi A, disarankan: bangun sendiri.** Citra cloud Ubuntu dan Debian bawaan tidak berisi guest agent serta tidak mengizinkan login root, dan NexCMP menyetel kata sandi root melalui cloud-init. Siapkan citranya terlebih dahulu:

```bash
apt install -y libguestfs-tools
wget -O noble.qcow2 https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
virt-customize -a noble.qcow2 --install qemu-guest-agent \
  --write /etc/cloud/cloud.cfg.d/99-nexcmp.cfg:$'ssh_pwauth: true\ndisable_root: false\n' \
  --write /etc/ssh/sshd_config.d/00-nexcmp.conf:$'PermitRootLogin yes\nPasswordAuthentication yes\n'
```

Kemudian buat VM templat (ID 9000 adalah contoh; jaga agar ID templat tetap di bawah nilai `vmid from`, default 1000):

```bash
qm create 9000 --name tpl-ubuntu-24-04 --memory 2048 --cores 2 --cpu host --ostype l26 \
  --scsihw virtio-scsi-single --net0 virtio,bridge=vmbr0 --agent 1 --serial0 socket --vga serial0
qm set 9000 --scsi0 local-lvm:0,import-from=$PWD/noble.qcow2,discard=on,iothread=1
qm set 9000 --ide2 local-lvm:cloudinit --boot order=scsi0
qm template 9000
```

**Opsi B: pembangun bawaan.** Kartu **Create OS template from cloud image** pada tab Clusters (lihat di bawah) mengunduh citra qcow2, membangun templat, dan mendaftarkannya. Fitur ini membuat VM dengan cloud-init dan flag guest agent, namun tidak mengubah isi di dalam citra tersebut. Gunakan hanya dengan citra yang telah mengizinkan login root dan menjalankan guest agent, atau ketika Anda juga menyediakan cuplikan vendor-data cloud-init.


Guest agent diperlukan untuk **Reset password** dan untuk menampilkan alamat IP VM.

### 6. Ketahui sidik jari sertifikat (opsional) {#_6-know-the-certificate-fingerprint-optional}

NexCMP mempercayai klaster dengan menyematkan sidik jari SHA-256 dari sertifikat TLS-nya, sehingga sertifikat mandiri (self-signed) dapat digunakan. Untuk melihat nilai yang akan disematkan oleh NexCMP:

```bash
openssl x509 -in /etc/pve/local/pve-ssl.pem -noout -fingerprint -sha256
```

## Hubungkan di NexCMP {#connect-in-nexcmp}

1. Buka **Infrastructure › Cloud provider › Providers** dan klik **Add cloud provider**. Pilih **Proxmox VE** dan isi:

   | Kolom | Contoh nilai |
   |---|---|
   | Name | `Proxmox cluster 1` |
   | Endpoint | `https://192.0.2.10:8006` |
   | Token id | `nexcmp@pve!api` |
   | Token secret | `XXXX` (UUID yang dicetak pada langkah 1) |
   | Slug | `pve-1` (a-z, 0-9, tanda hubung, 2-32 karakter) |
   | Default node | `pve1` (kosong: node online dengan RAM bebas terbanyak) |
   | Storage | `local-lvm` |
   | Bridge | `vmbr0` |

      ![Dialog tambah penyedia cloud dengan Proxmox VE dipilih serta contoh endpoint, token, dan nilai storage](https://nexcmp.com/id/docs/images/infrastructure/proxmox-01-add-provider.webp)

2. Klik **Save & open provider**, masukkan alasan saat diminta. Token dienkripsi sebelum disimpan.
3. Pada tab **Overview**, klik **Test connection**. Pengujian sukses pertama **akan menyematkan (pin) sidik jari TLS kluster**; setelah itu sertifikat yang berbeda akan ditolak.


4. Buka tab **Clusters**. Kartu **Node · storage · bridge** mencantumkan apa yang dilihat oleh API; kartu **Cluster configuration** berisi pengaturan:

   | Kolom | Arti |
   |---|---|
   | Default node | Node yang digunakan untuk VM baru. Kosong berarti node online dengan RAM bebas terbanyak. |
   | Storage, Bridge, VLAN | Storage disk, bridge NIC, dan tag VLAN opsional (0 berarti tidak ada). |
   | CPU type | `host` secara default. Gunakan `x86-64-v2-AES` saat node memiliki generasi CPU yang berbeda. |
   | vmid from | ID VM pertama yang diberikan ke VM pelanggan (default 1000). |
   | Storage ISO, Storage backup | Biarkan kosong kecuali Anda menggunakannya; kosong berarti fitur ISO dan backup tidak ditawarkan. |
   | Template OS | Satu per baris, `os-key=vmid`, misalnya `ubuntu-24.04=9000`. |
   | Pinned TLS fingerprint (SHA-256) | Diisi oleh pengujian pertama. Kosongkan dan uji kembali setelah Anda mengganti sertifikat kluster. |

      ![Tab Clusters, kartu Cluster configuration dengan contoh node, storage, bridge, dan daftar template OS](https://nexcmp.com/id/docs/images/infrastructure/proxmox-03-cluster-config.webp)

5. Opsional: jika Anda menggunakan Opsi B di atas, isi **Create OS template from cloud image** (kunci OS `ubuntu-24.04`, vmid `9000`, node `pve1`, URL citra qcow2) lalu klik **Create template**. Ini berjalan di latar belakang selama beberapa menit; hasilnya ada di Audit log.

      ![Kartu Create OS template from cloud image dengan contoh URL citra Ubuntu](https://nexcmp.com/id/docs/images/infrastructure/proxmox-04-template-from-image.webp)

6. Klik **Add pool** di **Cluster IP pool** dan buat pool tempat VM mengambil alamat:

   | Kolom | Contoh nilai |
   |---|---|
   | Name | `customers-1` |
   | CIDR | `198.51.100.0/24` |
   | Gateway | `198.51.100.1` (tidak pernah diberikan ke VM) |
   | DNS | `1.1.1.1,8.8.8.8` (1 hingga 4 alamat IPv4) |
   | Bridge, VLAN | `vmbr0`, `0` |
   | Already used IPs | satu per baris, `ip note`, misalnya `198.51.100.10 monitoring` |

   NexCMP tidak pernah menetapkan alamat jaringan, alamat siaran (broadcast), gateway, atau alamat yang dicadangkan. Pool dari kluster yang sama tidak boleh tumpang tindih. Pool hanya dapat dihapus jika tidak ada alamatnya yang sedang digunakan.

      ![Dialog Add IP pool dengan contoh /24 dan gateway](https://nexcmp.com/id/docs/images/infrastructure/proxmox-05-ip-pool.webp)

7. Dalam **Attach cluster to zone**, pilih zona dan, secara opsional, nama node, lalu klik **Attach to zone**. Kluster bergabung dengan zona yang sudah menjual VM, sehingga satu zona dapat memiliki CloudStack dan Proxmox secara bersamaan. Sumber baru ini **tidak dijual secara default** dan tidak mengubah perilaku paket yang sudah ada.

      ![Kartu Attach cluster to zone dengan zona yang sudah ada dipilih](https://nexcmp.com/id/docs/images/infrastructure/proxmox-06-attach-zone.webp)

8. Buka **Services › Virtual Machines › Plans & pricing** dan klik **Add plan**. Di **Infrastructure source**, pilih kluster Proxmox, lalu atur CPU, RAM, disk, dan harga. Paket Proxmox tidak memerlukan offering CloudStack. Untuk menjual konfigurasi yang sama dari kedua sumber, gunakan **Clone** pada sebuah paket dan pilih sumber lainnya. Disk paket harus setidaknya sebesar disk template; Proxmox tidak dapat memperkecil disk.


### Impor VM yang sudah ada {#import-a-vm-that-already-exists}

Buka tab **Servers** untuk membuat daftar VM pada klaster. **Import** menetapkan VM yang sudah ada ke akun pelanggan tanpa biaya: tidak ada yang ditagih untuk jam, waktu mati, atau lalu lintas. Pelanggan dapat memulai, menghentikan, me-reboot, dan membuka konsol tetapi tidak dapat menghapusnya; hanya administrator yang dapat melakukannya. NexCMP hanya membaca dari klaster saat melakukan impor.

- Klaster harus dilampirkan ke zona **dengan nama node** dari VM tersebut (biarkan node kosong dan impor akan melaporkan bahwa wilayah belum disiapkan).
- Untuk membuat VM **dilindungi** (penghentian, reboot, instal ulang, pemulihan snapshot, penghancuran, dan perubahan paket ditolak), impor dari baris perintah dengan `--protect`:

  ```bash
  sudo -u nexcmp /opt/nexcmp/bin/nexcmp px-import --provider pve-1 --server-ref pve1/101 --account-id 12 --hostname web-1 --protect
  ```



### Fitur yang didukung dan tidak didukung pada Proxmox {#what-is-and-is-not-supported-on-proxmox}

| Fitur | Proxmox VE |
|---|---|
| Membuat, menyalakan/mematikan/reboot, menghapus | Ya |
| Mengubah ukuran CPU dan RAM, memperbesar disk | Ya, tetapi VM dihentikan, diubah, dan dinyalakan kembali (tanpa perubahan ukuran langsung) |
| Snapshots | Ya, hingga 5 per VM: membuat, mencantumkan, memulihkan, menghapus |
| Menginstal ulang | Ya: VM dibangun ulang dari templat dan mempertahankan id, IP, serta pengaturan miliknya, dengan kata sandi baru |
| Reset kata sandi | Ya, melalui guest agent |
| Konsol | Ya, konsol peramban yang diproksi oleh panel |
| Metrik | Ya: CPU, memori, jaringan, dan disk |
| Pemasangan ISO, cadangan, firewall, IPv6, penerusan port, ubah IP, volume tambahan, Auto Scaling, DDoS Shield, VPC, pengukuran bandwidth | Tidak tersedia. Halaman VM pelanggan menyembunyikan hal yang tidak dapat dilakukan oleh suatu sumber. |

## Verifikasi {#verify}

1. **Test connection** menampilkan OK dan status penyedia aktif.
2. **Clusters** mencantumkan node Anda sebagai online, beserta penyimpanan dan bridge-nya.
3. **Cluster IP pool** menampilkan jumlah alamat yang bebas, digunakan, dan ditahan.
4. Kunci OS muncul di bawah templat zone di **Services › Virtual Machines › Template** setelah cluster dilampirkan.
5. Pesan VM uji dari paket yang menggunakan cluster tersebut. VM seharusnya mendapatkan alamat dari pool, kata sandi root, dan konsol yang berfungsi; pool menampilkan satu alamat yang terpakai.

## Batasan dan catatan {#limits-and-notes}

::: tip Zona sumber campuran
Sejak NexCMP 1.4.0, daftar harga publik Cloud Server juga berfungsi saat CloudStack dan Proxmox VE berbagi satu zona. Setiap paket menggunakan **Infrastructure source** miliknya sendiri. Setelah memasang kluster, periksa daftar harga publik dan buat pesanan uji coba untuk masing-masing sumber.
:::

- Beberapa cluster Proxmox dapat ditambahkan. Masing-masing bertindak sebagai satu penyedia.
- Sebuah zone menawarkan satu sumber default; paket dengan **Infrastructure source** sendiri akan dideploy secara persis ke cluster tersebut, selama cluster aktif dan berada di zone paket.
- Cluster di balik zone yang sama dengan CloudStack mempertahankan paket lama mereka di CloudStack. Uji pesanan dari awal hingga akhir sebelum peluncuran.
- Token API hanya dapat diganti, tidak pernah dilihat. Ganti token tersebut di tab **Credentials**: buat token baru di Proxmox terlebih dahulu, masukkan token tersebut, jalankan **Test connection**, lalu cabut token lama.
- Tindakan Test, Sync, dan cluster-info dibatasi hingga enam panggilan per menit per administrator.
- NexCMP menagih pelanggan Anda; biaya perangkat keras dan lisensi cluster ditanggung oleh Anda.


## Pemecahan Masalah {#troubleshooting}

| Gejala | Penyebab | Solusi |
|---|---|---|
| Test: "Key rejected (wrong access key / secret, or revoked)" atau HTTP 401/403 | ID token atau secret salah, atau ACL hanya diberikan ke token tersebut | Jalankan ulang kedua perintah `pveum acl modify` (pengguna **dan** token) dan periksa apakah id token adalah `user@realm!tokenid`. |
| Pengujian: "Could not connect to the provider" atau "Timed out" | Firewall, host atau port salah | Periksa `https://host:8006` dari server panel. |
| Pengujian: "Invalid endpoint or not on the allowlist" | Endpoint memiliki path, pengguna, kueri, atau bukan HTTPS | Gunakan secara tepat `https://host:8006`. |
| "sertifikat TLS klaster TIDAK cocok dengan fingerprint yang disematkan" | Sertifikat kluster telah diganti | Kosongkan **Pinned TLS fingerprint** pada tab Clusters, simpan, lalu jalankan kembali **Test connection**. |
| Slug ditolak | Bukan a-z, 0-9, tanda hubung, atau panjangnya bukan 2-32 karakter | Gunakan sesuatu seperti `pve-1`. |
| "Format ID token: user@realm!tokenid dan secret wajib diisi" | ID token atau secret tidak ada | Masukkan keduanya; secret adalah UUID yang dicetak saat token dibuat. |
| "Baris templat tidak valid: …" | Sebuah baris dalam **Template OS** bukan `key=vmid` | Gunakan huruf, angka, `.`, `_`, `-` pada kunci dan vmid minimal 100. |
| "Kunci OS: a-z 0-9 . _ - dan vmid ≥ 100" | Kunci atau id tidak valid dalam **Create template** | Perbaiki kunci OS dan gunakan vmid yang kosong. |
| "vmid … already exists" saat membuat templat | vmid tersebut sudah digunakan | Pilih id yang lain. |
| "url mengarah ke alamat internal" | URL gambar adalah IP internal | Gunakan URL publik; nama diselesaikan oleh Proxmox. |
| Tugas templat gagal saat mengunduh | Penyimpanan `local` tidak memiliki konten `import` | `pvesm set local --content …,import,snippets`, lalu coba lagi. Nama file harus berakhiran `.qcow2`, `.raw`, `.vmdk`, `.ova` atau `.ovf`. |
| "cluster has no online nodes" atau "node … is not online" | Node default sedang mati atau salah eja | Perbaiki **Default node** atau biarkan kosong. |
| "image bukan milik klaster" | OS pada paket tidak ada di **Template OS** | Tambahkan kunci ke daftar lalu simpan. |
| Penyebaran menunggu, kemudian gagal saat melakukan kloning | VM templat tidak berada di node yang dipilih | Buat templat pada node tersebut, atau atur **Default node** ke node yang memilikinya. |
| Pelanggan tidak dapat masuk sebagai root | Gambar memblokir login root | Bangun ulang templat seperti pada Opsi A. |
| Atur ulang kata sandi tidak berdampak apa pun | Tidak ada guest agent di dalam guest | Install and enable `qemu-guest-agent` pada templat. |
| "Nama, CIDR, dan gateway wajib diisi" | Kolom pool hilang | Isi ketiga kolom tersebut. |
| Pool create: "overlaps with pool …", "gateway must be within range (not network/broadcast address)" atau "cidr: network address must be …" | Pool tumpang tindih, gateway salah, atau CIDR bukan di batas jaringan | Gunakan rentang bebas, gateway di dalamnya, dan CIDR yang ditulis sebagai alamat jaringan (misalnya `198.51.100.0/24`). |
| Impor: "region belum diatur" | Kluster dilampirkan tanpa nama node VM | Lampirkan kluster ke zona dengan nama node tersebut. |
