Cara Memakai Cloud-init untuk Menyiapkan VPS Otomatis
Panduan menulis user-data cloud-init untuk membuat user, memasang kunci SSH, paket, dan file konfigurasi secara otomatis saat VPS pertama kali menyala.
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.
Daftar isi
- Apa yang terjadi saat boot pertama?
- Langkah menyiapkan VPS dengan cloud-init
- 1. Pahami bentuk file user-data
- 2. Tulis konfigurasi dasar yang aman
- 3. Tambahkan file dan perintah
- 4. Validasi sebelum dipakai
- 5. Buat VPS dan tempel user-data
- Bagaimana memeriksa hasil dan mengulang proses?
- Periksa status dan log
- Jalankan ulang untuk pengujian
- Kapan cloud-init cukup, kapan perlu alat lain?
- Pertanyaan yang sering diajukan
- Checklist sebelum menekan tombol buat server
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:
#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:
#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, 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:
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:
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:
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.loguntuk jalannya setiap modul./var/log/cloud-init-output.loguntuk keluaran perintah, misalnya hasilaptdanruncmd.
Jalankan ulang untuk pengujian
Saat menguji di VM uji, kamu bisa memaksa cloud-init berjalan lagi seperti boot pertama:
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, 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.


