---
title: "Cara Memakai Cloud-init untuk Menyiapkan VPS Otomatis"
description: "Panduan menulis user-data cloud-init untuk membuat user, memasang kunci SSH, paket, dan file konfigurasi secara otomatis saat VPS pertama kali menyala."
url: "https://nivelva.com/insight/cara-memakai-cloud-init-menyiapkan-vps-otomatis"
category: "Server \u0026 Infrastruktur"
tags: ["cloud-init","vps","otomasi","linux","provisioning"]
author: "Lucas Tan"
published: "2026-11-11T13:28:00+07:00"
updated: "2026-11-11T13:28:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Memakai Cloud-init untuk Menyiapkan VPS Otomatis

> **Jawaban singkat:** Cloud-init membaca file user-data berformat cloud-config saat VPS pertama kali boot, lalu membuat user, memasang kunci SSH, menginstal paket, menulis file, dan menjalankan perintah secara otomatis. Validasi file dengan cloud-init schema dan cek hasilnya dengan cloud-init status --long.

Berapa lama waktu yang kamu habiskan setiap kali menyiapkan VPS baru? Membuat user, menempel kunci SSH, mematikan login password, memasang paket yang sama, mengatur zona waktu. Semua itu bisa selesai sendiri saat server pertama kali menyala, asalkan kamu memberikan satu file teks ke cloud-init.

Cloud-init adalah program standar yang ada di hampir semua image cloud Linux, termasuk Ubuntu, Debian, AlmaLinux, dan Rocky Linux. Saat boot pertama, ia membaca metadata dari penyedia dan file user-data buatanmu, lalu menjalankan instruksinya. Banyak panel VPS menyediakan kolom "user data" atau "cloud-init" saat membuat server baru. Kalau panelmu tidak menyediakannya, cek dulu ke penyedia apakah fitur ini didukung.

## Apa yang terjadi saat boot pertama?

Cloud-init bekerja dalam beberapa tahap berurutan. Tahap Detect mengenali platform tempat server berjalan. Tahap Local mencari sumber data dan menulis konfigurasi jaringan. Tahap Network memproses user-data setelah jaringan aktif. Tahap Config menjalankan modul konfigurasi, dan tahap Final berjalan paling akhir untuk memasang paket serta menjalankan skrip buatan pengguna.

Urutan ini menjelaskan kenapa perintah di `runcmd` boleh memakai paket yang baru dipasang: perintahnya disiapkan lebih awal, tapi baru dieksekusi di tahap terakhir.

## Langkah menyiapkan VPS dengan cloud-init

### 1. Pahami bentuk file user-data

File user-data paling umum berformat YAML dan wajib diawali baris persis seperti ini:

```yaml
#cloud-config
```

Tanpa baris itu, cloud-init tidak mengenali isinya sebagai konfigurasi. Setelah baris pertama, kamu menulis kunci-kunci modul, misalnya `users`, `packages`, `write_files`, dan `runcmd`. Daftar lengkap modul ada di dokumentasi resmi cloud-init.

### 2. Tulis konfigurasi dasar yang aman

Contoh berikut membuat user `deploy` dengan akses sudo, memasang kunci SSH, mematikan login password, memperbarui paket, dan mengatur zona waktu Jakarta:

```yaml
#cloud-config
users:
  - default
  - name: deploy
    groups: sudo
    shell: /bin/bash
    sudo: "ALL=(ALL) NOPASSWD:ALL"
    ssh_authorized_keys:
      - ssh-ed25519 AAAAC3Nza...isi-kunci-publikmu deploy@laptop

ssh_pwauth: false
disable_root: true
timezone: Asia/Jakarta

package_update: true
package_upgrade: true
packages:
  - ufw
  - fail2ban
  - htop
```

Baris `- default` mempertahankan user bawaan image (misalnya `ubuntu`). Hapus baris itu kalau kamu hanya ingin user `deploy`. Nama grup `sudo` berlaku di Ubuntu dan Debian. Di AlmaLinux atau Rocky Linux, grup admin bernama `wheel`.

Langkah-langkah ini sama dengan yang biasa dikerjakan manual di [cara mengamankan VPS Linux baru](https://nivelva.com/insight/cara-mengamankan-vps-baru), hanya saja sekarang tertulis dan bisa diulang.

### 3. Tambahkan file dan perintah

Modul `write_files` menulis file sebelum perintah dijalankan, sedangkan `runcmd` menjalankan perintah shell di akhir proses boot pertama:

```yaml
write_files:
  - path: /etc/ssh/sshd_config.d/10-hardening.conf
    permissions: "0644"
    content: |
      PermitRootLogin no
      PasswordAuthentication no

runcmd:
  - ufw allow OpenSSH
  - ufw --force enable
  - systemctl enable --now fail2ban
  - systemctl restart ssh
```

Gabungkan blok ini dengan contoh di langkah 2 dalam satu file. Perhatikan bahwa `runcmd` hanya berjalan sekali per instance, bukan setiap reboot. Nama layanan SSH juga berbeda antar distro: `ssh` di Ubuntu dan Debian, `sshd` di keluarga Red Hat.

### 4. Validasi sebelum dipakai

Kesalahan indentasi YAML adalah penyebab paling umum cloud-init "tidak melakukan apa-apa". Kalau kamu punya mesin Linux dengan cloud-init terpasang, periksa file dulu:

```bash
cloud-init schema -c user-data.yaml
```

Perintah ini memvalidasi struktur cloud-config tanpa menjalankannya. Di server yang sudah jalan, `sudo cloud-init schema --system` memeriksa user-data yang benar-benar diterima server tersebut.

### 5. Buat VPS dan tempel user-data

Saat membuat VPS baru, tempel seluruh isi file ke kolom user-data di panel penyedia. Kalau penyedia menyediakan API, user-data biasanya dikirim sebagai salah satu parameter. Hindari menaruh kata sandi atau token rahasia di user-data, karena isinya bisa dibaca kembali dari dalam server.

## Bagaimana memeriksa hasil dan mengulang proses?

### Periksa status dan log

Setelah server menyala, login dengan user `deploy`, lalu jalankan:

```bash
cloud-init status --wait --long
```

Opsi `--wait` membuat perintah menunggu sampai cloud-init selesai, dan `--long` menampilkan rincian termasuk error yang bisa dipulihkan. Kalau ada yang gagal, baca dua log ini:

- `/var/log/cloud-init.log` untuk jalannya setiap modul.
- `/var/log/cloud-init-output.log` untuk keluaran perintah, misalnya hasil `apt` dan `runcmd`.

### Jalankan ulang untuk pengujian

Saat menguji di VM uji, kamu bisa memaksa cloud-init berjalan lagi seperti boot pertama:

```bash
sudo cloud-init clean --logs --reboot
```

Jangan lakukan ini di server produksi tanpa pertimbangan, karena modul akan dijalankan ulang dan bisa menimpa konfigurasi.

## Kapan cloud-init cukup, kapan perlu alat lain?

Cloud-init unggul untuk pekerjaan "hari pertama": menyiapkan server dari nol sampai siap dimasuki. Setelah server hidup, perubahan berikutnya lebih cocok dikelola dengan [Ansible](https://nivelva.com/insight/cara-memakai-ansible-mengatur-banyak-vps-sekaligus), karena Ansible bisa dijalankan berulang dan menjaga banyak server tetap seragam. Banyak tim memakai keduanya: cloud-init hanya memasang user dan kunci SSH, lalu Ansible mengambil alih.

| Modul | Fungsi | Kapan berjalan |
|:--|:--|:--|
| `users` | Membuat user, grup, kunci SSH, aturan sudo | Boot pertama |
| `ssh_pwauth` | Menyalakan atau mematikan login password SSH | Boot pertama |
| `package_update`, `packages` | Memperbarui indeks paket dan memasang paket | Boot pertama |
| `write_files` | Menulis file konfigurasi | Boot pertama, sebelum runcmd |
| `timezone` | Mengatur zona waktu | Boot pertama |
| `runcmd` | Menjalankan perintah shell | Sekali per instance, di akhir |

## Pertanyaan yang sering diajukan

### Apakah cloud-init bisa dipakai di VPS yang sudah lama berjalan?

Bisa secara teknis, tapi tidak dianjurkan. Cloud-init dirancang untuk boot pertama. Untuk server yang sudah berjalan, gunakan skrip atau Ansible.

### Kenapa user-data saya diabaikan?

Penyebab paling umum adalah baris pertama bukan #cloud-config, indentasi YAML salah, atau penyedia tidak meneruskan user-data. Cek dengan cloud-init status --long dan cloud-init schema --system.

### Apakah cloud-init juga mengatur jaringan?

Ya, di banyak image cloud, cloud-init menulis konfigurasi jaringan seperti file Netplan. Kalau ingin mengatur jaringan sendiri, konfigurasi jaringan cloud-init bisa dimatikan.

### Bisakah user-data berupa skrip shell biasa?

Bisa. Jika baris pertamanya #!/bin/bash, cloud-init menjalankannya sebagai skrip. Namun format #cloud-config lebih mudah dibaca dan divalidasi.

## Checklist sebelum menekan tombol buat server

- Baris pertama tepat `#cloud-config`.
- Kunci SSH publik sudah benar dan login password dimatikan.
- Grup sudo dan nama layanan SSH sesuai distro.
- File lolos `cloud-init schema`.
- Tidak ada kata sandi atau token rahasia di dalam user-data.

## Sumber

- <https://docs.cloud-init.io/en/latest/reference/cli.html>
- <https://docs.cloud-init.io/en/latest/reference/modules.html>
- <https://docs.cloud-init.io/en/latest/reference/examples.html>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-memakai-cloud-init-menyiapkan-vps-otomatis
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
