Lewati ke isi

Server & Infrastruktur

Cara Memakai Ansible untuk Mengatur Banyak VPS Sekaligus

Kenalan dengan Ansible untuk mengurus banyak VPS sekaligus: inventory, perintah ad-hoc, playbook pertama, mode cek, dan menyimpan password dengan Vault.

Terbit 5 menit baca

Jawaban singkat

Ansible mengatur banyak server lewat SSH tanpa agen. Kamu menulis daftar server di inventory, lalu menjalankan playbook YAML yang berisi keadaan yang diinginkan, misalnya paket terpasang dan file konfigurasi tertentu, dan Ansible menerapkannya ke semua server sekaligus.

Daftar isi
  1. Apa yang dibutuhkan untuk mulai?
  2. Menulis inventory, daftar server yang diatur
  3. Perintah ad-hoc untuk pekerjaan cepat
  4. Playbook pertama yang benar-benar berguna
  5. Cara menguji sebelum benar-benar mengubah server
  6. Kapan Ansible mulai terasa manfaatnya?
  7. Langkah berikutnya setelah playbook pertama
  8. Pertanyaan yang sering diajukan

Ansible memungkinkan kamu menjalankan pekerjaan yang sama di banyak VPS dengan satu perintah, cukup lewat SSH dan tanpa memasang agen apa pun di server. Kamu menulis keadaan yang diinginkan dalam file YAML, Ansible yang memastikan setiap server sesuai.

Kenapa ini penting? Begitu kamu mengurus tiga atau empat server, mengulang perintah yang sama satu per satu mulai melelahkan dan rawan beda. Satu server lupa di-update, satu lagi punya konfigurasi firewall yang sedikit berbeda, dan beberapa bulan kemudian tidak ada yang ingat kenapa. Dengan Ansible, konfigurasi tertulis di file yang bisa disimpan di Git, dibaca ulang, dan dijalankan lagi kapan saja.

Apa yang dibutuhkan untuk mulai?

Ansible dipasang di satu mesin pengendali (control node), biasanya laptop Linux atau macOS, atau satu server khusus. Dokumentasi resmi menyebut Windows tidak didukung sebagai control node, tapi kamu bisa memakai WSL. Server yang diatur (managed node) hanya butuh SSH dan Python.

Cara pasang yang disarankan dokumentasi resmi adalah lewat pipx:

pipx install --include-deps ansible
ansible --version

Paket ansible sudah berisi ansible-core plus kumpulan modul komunitas. Kalau ingin yang paling ringan, pasang ansible-core saja lalu tambahkan collection yang dibutuhkan.

Pastikan kamu sudah bisa login ke setiap server dengan SSH key tanpa password. Ansible memakai konfigurasi SSH yang sama dengan terminalmu.

Inventory adalah file berisi daftar server, boleh dikelompokkan. Buat inventory.ini:

[web]
web1 ansible_host=203.0.113.10
web2 ansible_host=203.0.113.11

[db]
db1 ansible_host=203.0.113.20

[all:vars]
ansible_user=deploy

Uji koneksi ke semua server:

ansible all -i inventory.ini -m ping

Modul ping di sini bukan ping jaringan. Ia mengecek apakah Ansible bisa login dan menjalankan Python di server. Kalau semua menjawab pong, kamu siap.

Perintah ad-hoc untuk pekerjaan cepat

Untuk pekerjaan sekali jalan, kamu tidak perlu playbook. Contoh melihat sisa disk di semua server web:

ansible web -i inventory.ini -a "df -h /"

Atau memastikan paket terbaru terpasang di semua server Ubuntu, dengan hak sudo (-b artinya become):

ansible all -i inventory.ini -b -m ansible.builtin.apt -a "update_cache=yes upgrade=dist"

Perintah ad-hoc cocok untuk mengecek sesuatu. Untuk perubahan yang ingin diulang dan dicatat, tulislah playbook.

Playbook pertama yang benar-benar berguna

Playbook berisi daftar tugas yang dijalankan berurutan. Contoh dasar.yml untuk menyamakan pengaturan dasar semua server:

- name: Pengaturan dasar semua server
  hosts: all
  become: true
  tasks:
    - name: Pasang paket wajib
      ansible.builtin.apt:
        name: [ufw, fail2ban, htop, unattended-upgrades]
        state: present
        update_cache: true

    - name: Atur zona waktu
      community.general.timezone:
        name: Asia/Jakarta

    - name: Izinkan SSH di firewall
      community.general.ufw:
        rule: allow
        name: OpenSSH

    - name: Aktifkan firewall
      community.general.ufw:
        state: enabled

Jalankan dengan:

ansible-playbook -i inventory.ini dasar.yml

Yang membuat Ansible nyaman adalah sifat idempoten. Kebanyakan modul mengecek dulu keadaan server. Kalau paket sudah terpasang, Ansible melaporkan ok dan tidak melakukan apa-apa. Kalau ada yang diubah, statusnya changed. Jadi playbook yang sama aman dijalankan berkali-kali.

Urutan tugas firewall di atas juga disengaja: aturan SSH dibuat dulu sebelum UFW dinyalakan, supaya kamu tidak terkunci di luar. Dasar UFW sendiri dibahas di panduan UFW untuk pemula.

Cara menguji sebelum benar-benar mengubah server

Selalu biasakan menjalankan mode cek lebih dulu:

ansible-playbook -i inventory.ini dasar.yml --check --diff

--check mensimulasikan perubahan tanpa menerapkannya, dan --diff menampilkan isi file yang akan berubah. Tidak semua modul mendukung mode cek dengan sempurna, terutama modul command dan shell, jadi tetap perhatikan hasilnya.

Kamu juga bisa membatasi ke satu server dulu dengan --limit web1. Pola yang aman: uji di satu server, lihat hasilnya, baru jalankan ke semua.

Kapan Ansible mulai terasa manfaatnya?

SituasiTanpa AnsibleDengan Ansible
Menambah server baruMengulang langkah dari catatanTambah satu baris inventory, jalankan playbook
Update konfigurasi Nginx di 5 serverEdit satu per satuUbah satu template, jalankan sekali
Mencari tahu pengaturan serverLogin dan memeriksa manualBaca playbook di Git
Server rusak dan harus dibangun ulangMengingat-ingat langkah lamaJalankan playbook ke server baru

Untuk satu server saja, Ansible mungkin terasa berlebihan. Tapi menulis playbook bahkan untuk satu server punya keuntungan: kalau server itu hilang, kamu punya resep untuk membangunnya kembali. Ini sejalan dengan prinsip yang dibahas di Infrastructure as Code untuk tim kecil.

Langkah berikutnya setelah playbook pertama

Saat playbook mulai panjang, pecah menjadi role. Role adalah folder dengan struktur tetap (tasks, templates, handlers, defaults) yang bisa dipakai ulang, misalnya role nginx, role php, role backup. Perintah ansible-galaxy init nama-role membuat kerangkanya.

Pelajari juga handler. Handler adalah tugas yang hanya dijalankan bila ada perubahan, misalnya memuat ulang Nginx hanya kalau file konfigurasinya benar-benar berubah. Ini membuat playbook tidak me-restart layanan tanpa alasan.

Simpan semua file di repo Git. Dengan begitu setiap perubahan pada server punya jejak: siapa yang mengubah, kapan, dan kenapa.

Pertanyaan yang sering diajukan

Apakah Ansible perlu dipasang di setiap server?

Tidak. Ansible hanya dipasang di control node. Server yang diatur cukup bisa diakses lewat SSH dan punya Python, yang sudah tersedia di distribusi Linux server umumnya.

Bisakah Ansible dipakai untuk server AlmaLinux dan Ubuntu sekaligus?

Bisa. Gunakan modul ansible.builtin.package yang memilih apt atau dnf secara otomatis, atau pisahkan tugas dengan kondisi when berdasarkan fakta ansible_os_family.

Apa bedanya Ansible dengan Terraform?

Terraform biasanya dipakai untuk membuat sumber daya (server, jaringan, DNS) di penyedia cloud lewat API. Ansible lebih sering dipakai untuk mengatur isi server setelah server ada. Banyak tim memakai keduanya.

Sumber & referensi

Baca juga