Belajar Ansible dari Nol, Berhenti Capek Setup Server Secara Manual

Kamandanu Wijaya 22 Januari 2026 ⏱️ 5 menit baca
Workflow Otomatisasi Ansible: Control Node ke Managed Nodes

Halo tech bro & sis,

Di artikel ini, kita membahas Ansible dasar secara praktis agar kamu paham konteks dan penerapannya.

Pernah tidak dapat proyek, entah dari kantor atau dari klien, yang mengharuskan kita menyiapkan server? Buat yang sudah terbiasa dengan dunia server, tugas seperti ini mungkin terasa biasa saja. Mulai dari hal sederhana seperti install nginx, setup firewall, ganti password root, install node.js, sampai menarik source code dari repository git.

Biasanya kita akan mulai dengan buka terminal, login ke server lewat SSH, lalu menjalankan perintah satu per satu. Kalau servernya cuma satu, masih santai. Tapi kalau ada dua, tiga, atau empat, proses yang sama harus diulang lagi sesuai jumlah server yang dideploy. Untuk satu atau dua server mungkin masih oke, tapi coba bayangkan kalau suatu hari harus deploy 10 server, 20 server, atau bahkan 100 server. Untuk sekadar update kecil pun, kita tetap harus login ke tiap server dan menjalankan perintah yang sama berulang-ulang, repot banget, ya?

Di titik inilah banyak dari kita, termasuk saya dulu, mulai merasa kewalahan dengan pekerjaan yang sangat repetitif ini. Setup manual itu bukan cuma lambat, tapi juga rawan typo, rawan error, dan lama-lama bikin capek sendiri.

Sampai akhirnya saya mulai mencari cara supaya proses ini bisa lebih efisien, dan dari situ saya mulai benar-benar jatuh cinta dengan Ansible Automation.

Kenalan dengan Ansible

Apa sih Ansible itu? Sederhananya, Ansible adalah tool yang memungkinkan kita mengotomatisasi pengelolaan server. Misalnya install Nginx, Node.js, atau update package di banyak server, semuanya bisa dilakukan lewat satu playbook.

Tanpa perlu login ke server dan menjalankan perintah satu per satu, cukup pakai Ansible, semua server akan identik sesuai standar yang kita inginkan.

Kalau pakai gambaran sederhana, biasanya kita sendiri yang login ke server lewat SSH lalu menjalankan perintah. Dengan Ansible, kita cukup menyiapkan daftar tugas, lalu Ansible yang menghubungi semua server dan menjalankan perintah itu untuk kita.

Salah satu alasan kenapa Ansible banyak dipakai adalah karena sifatnya yang agentless. Banyak tool otomatisasi lain mewajibkan kita memasang agen di setiap server target, sedangkan Ansible tidak. Selama server punya Python dan bisa diakses lewat SSH, Ansible sudah bisa langsung digunakan tanpa instalasi tambahan di server target.

Konsep Agentless Ansible

Cara kerja Ansible (teknis singkat)

Arsitektur Ansible terdiri dari:

  • Control Node: mesin tempat Ansible diinstal (laptop kamu).
  • Managed Nodes: server target yang akan dikonfigurasi.
  • Inventory: daftar server target, bisa file statis atau dinamis.
  • Modules: unit kerja yang dieksekusi di target.

Alur kerja:

  1. Ansible membuka koneksi SSH ke target.
  2. Module dikirim dan dieksekusi menggunakan Python di server target.
  3. Hasil dievaluasi untuk menentukan status changed atau ok.

Ini yang membuat Ansible cepat, agentless, dan relatif mudah diadopsi.


Kenapa bukan shell script saja?

Mungkin kamu bertanya, “Kenapa repot belajar Ansible kalau saya bisa bikin script .sh saja?”

Perbedaan besarnya ada pada konsep Idempotensi. Script bash biasanya buta. Kalau kamu jalankan script yang isinya mkdir /folder/baru, dan folder itu sudah ada, script kamu mungkin akan error atau membuat kekacauan.

Ansible sangat cerdas. Jika kamu menyuruhnya membuat folder, dia akan mengecek dulu “Apakah folder ini sudah ada? Kalau sudah, saya tidak akan melakukan apa-apa. Kalau belum, saya buatkan.” Sifat ini membuat kita aman menjalankan konfigurasi yang sama berkali-kali tanpa takut merusak server yang sudah jalan.


Langkah awal: instalasi dan persiapan

Ansible hanya perlu diinstal di satu tempat, di laptop kamu atau “Control Node”. Kamu tidak perlu menginstalnya di server-server target.

Untuk Linux (Ubuntu):

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Untuk Mac (Homebrew):

brew install ansible

Setelah terinstal, cek versinya dengan ansible --version. Sekarang kamu sudah punya “senjata” otomatisasi di tangan kamu.


Membangun peta kekuatan: inventory file

Langkah pertama sebelum mulai mengotomatisasi adalah memberi tahu Ansible siapa saja server target kita. Kita melakukannya melalui file Inventory. Biasanya bernama hosts atau inventory.ini.

Bikin file bernama hosts.ini:

[web_servers]
server-web-1 ansible_host=192.168.1.10
server-web-2 ansible_host=192.168.1.11

[db_servers]
server-db-1 ansible_host=192.168.1.20

[all_production:children]
web_servers
db_servers

Dengan file ini, kamu sudah mengelompokkan server berdasarkan fungsinya. Kamu bisa menyuruh Ansible menginstal Nginx hanya ke grup web_servers, tanpa mengganggu grup database.


Ansible config dan SSH key

Biar gak ribet ngetik parameter terus, kamu bisa bikin file ansible.cfg di project:

[defaults]
inventory = hosts.ini
remote_user = ubuntu
host_key_checking = False

[ssh_connection]
pipelining = True

Pastikan juga SSH key kamu sudah terpasang di target:

ssh-copy-id ubuntu@192.168.1.10

Ini mempercepat eksekusi dan mengurangi prompt password.


Perkenalan cepat: ad-hoc commands

Ad hoc commands adalah cara menjalankan tugas satu kali (one-off tasks) secara cepat tanpa harus membuat file konfigurasi yang panjang. Ini sangat berguna untuk pengecekan cepat.

Coba tes koneksi ke semua server:

ansible all -m ping -i hosts.ini

Jika muncul respon "ping": "pong", artinya Ansible berhasil masuk ke server via SSH.

Mau cek penggunaan RAM di semua server web?

ansible web_servers -a "free -m" -i hosts.ini

Ini adalah kekuatan luar biasa. Bayangkan mengetik perintah itu satu kali, dan mendapatkan hasil dari 100 server dalam hitungan detik.


Inti dari segalanya: playbooks

Jika Ad hoc commands adalah perintah lisan, maka Playbook adalah surat perintah tertulis yang detail. Playbook ditulis menggunakan format YAML, yang sangat mudah dibaca manusia.

Mari kita buat playbook pertama kita untuk menginstal Nginx dan memastikan servicenya berjalan. Simpan file sebagai setup-web.yml:

---
- name: Setup Web Server Nginx
  hosts: web_servers
  become: yes # Jalankan sebagai sudo

  vars:
    http_port: 80

  tasks:
    - name: Pastikan Nginx terinstal (versi terbaru)
      apt:
        name: nginx
        state: latest
        update_cache: yes

    - name: Pastikan Nginx berjalan dan otomatis start saat boot
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Salin file index.html kustom
      template:
        src: ./index.html.j2
        dest: /var/www/html/index.html

Cara menjalankannya:

ansible-playbook -i hosts.ini setup-web.yml

Ansible akan menelusuri daftar tugas tersebut satu per satu. Jika Nginx sudah terinstal, dia akan melaporkan “ok”. Jika belum, dia akan mengubah statusnya menjadi “changed”.

Struktur Playbook Ansible


Variables dan facts: bikin playbook lebih fleksibel

Ansible punya facts, yaitu data otomatis tentang host target (OS, IP, CPU, dll). Kamu bisa cek dengan:

ansible all -m setup -i hosts.ini

Contoh penggunaan facts:

- name: Print OS
  debug:
    msg: "OS target adalah {{ ansible_distribution }} {{ ansible_distribution_version }}"

Selain facts, gunakan variables agar playbook reusable:

vars:
  app_port: 3000

Mengenal module penting

Dalam Ansible, kamu tidak mengetik perintah terminal mentah. Kamu menggunakan Module. Module adalah fungsi-fungsi siap pakai yang sudah mengerti cara kerja sistem operasi.

Beberapa module yang akan sering kamu pakai:

  1. apt / yum: Untuk mengelola paket aplikasi.
  2. service / systemd: Untuk mengelola status aplikasi (start, stop, restart).
  3. copy: Untuk menyalin file dari laptop kamu ke server.
  4. template: Sama seperti copy, tapi kamu bisa memasukkan variabel ke dalam file tersebut (menggunakan Jinja2).
  5. user: Untuk menambah atau menghapus user di server.

Handlers: efisiensi dalam restart

Ada fitur keren namanya Handlers. Misalkan kamu mengubah file konfigurasi Nginx. Kamu hanya ingin Nginx direstart JIKA filenya memang berubah. Kalau filenya tidak berubah, tidak perlu restart, kan?

Contoh dalam Playbook:

    - name: Update konfigurasi Nginx
      copy:
        src: nginx.conf
        dest: /etc/nginx/nginx.conf
      notify: Restart Nginx  # Menghidupkan handler jika ada perubahan

  handlers:
    - name: Restart Nginx
      service:
        name: nginx
        state: restarted

Mengatur proyek besar: roles

Saat konfigurasi kamu makin kompleks, file YAML kamu akan jadi raksasa yang susah dibaca. Di sinilah Roles berperan. Role memungkinkan kamu memecah konfigurasi menjadi potongan-potongan kecil yang bisa digunakan kembali (reusable).

Struktur Role biasanya seperti ini:

roles/
  webserver/
    tasks/      # Daftar tugas utama
    handlers/   # Daftar handler
    templates/  # File konfigurasi (.j2)
    vars/       # Variabel-variabel
    files/      # File statis

Struktur Role Ansible


Tag, check mode, dan diff

Saat playbook makin besar, kamu butuh kontrol eksekusi:

  • Tags: jalankan bagian tertentu saja.
  • Check mode: simulasi tanpa perubahan.
  • Diff: lihat perubahan file sebelum apply.

Contoh:

ansible-playbook setup-web.yml --tags "nginx"
ansible-playbook setup-web.yml --check
ansible-playbook setup-web.yml --diff

Secrets dan Ansible vault

Jangan simpan password atau token di file YAML biasa. Gunakan Ansible Vault:

ansible-vault create secrets.yml
ansible-playbook -i hosts.ini setup-web.yml --ask-vault-pass

Ini menjaga rahasia tetap terenkripsi di repo.


Praktik baik untuk production

  • Gunakan become: yes hanya saat perlu.
  • Pisahkan environment dev/staging/prod di inventory atau variable files.
  • Jalankan playbook kecil dan terukur, jangan sekali tembak semua.
  • Simpan playbook di Git agar perubahan tertrack.

Kesalahan umum pemula

Berdasarkan pengalaman saya, berikut adalah tembok yang sering ditabrak pemula:

  1. Kesalahan Indentasi YAML: YAML sangat sensitif dengan spasi. Satu spasi yang salah bisa membuat playbook error. Gunakan editor seperti VS Code dengan extension YAML agar hidup kamu lebih tenang.
  2. Lupa Password Sudo: Jika server target butuh password untuk sudo, pastikan kamu menambahkan parameter --ask-become-pass saat menjalankan playbook.
  3. Inventory Salah Alamat: Selalu pastikan kunci SSH kamu sudah terdaftar di server target (ssh-copy-id), jika tidak, Ansible akan gagal login.

Mengapa Ansible membantu di dunia nyata?

Di pekerjaan saya sehari-hari sebagai IT Operation, Ansible mengubah hidup saya dari “petugas pemadam kebakaran” (yang sibuk memperbaiki server manual satu-satu saat ada masalah) menjadi “arsitek sistem”.

Otomatisasi memberikan saya:

  • Waktu Luang: Setup 10 server cuma butuh waktu 5 menit, bukan 5 jam.
  • Ketenangan Pikiran: Saya tahu persis apa yang terinstal di server karena kodenya ada di repositori Git saya.
  • Konsistensi: Tidak ada lagi server yang konfigurasinya berbeda sendiri.

Jalan terus!

Selamat, kamu sudah melewati gerbang pertama dunia otomatisasi! Tapi jangan berhenti di sini. Langkah selanjutnya yang saya sarankan:

  • Pelajari Molecule untuk mengetes playbook kamu di lingkungan terisolasi.
  • Buka Ansible Galaxy untuk melihat ribuan Role yang dibuat oleh komunitas secara gratis.
  • Coba integrasikan Ansible dengan CI/CD pipeline kamu.

Ansible sering digunakan bersama dengan tool Infrastructure as Code lainnya. Jika kamu ingin belajar cara provisioning resource cloud sebelum dikonfigurasi dengan Ansible, coba baca panduan Terraform dari nol. Dan untuk melihat contoh nyata pentingnya konfigurasi yang benar di production, simak studi kasus troubleshooting Docker yang saya tulis.

Otomatisasi bukan tentang menghilangkan pekerjaan kita, tapi tentang membuat kita bekerja lebih cerdas. Dengan Ansible, kamu tidak lagi merasa seperti buruh ketik di terminal, tapi sebagai konduktor dari simfoni infrastruktur yang hebat.

Selamat mengotomatisasi! Kalau ada yang bingung atau error, jangan sungkan tanya di komentar ya. Happy automating! 🚀


Semoga pembahasan Ansible dasar ini membantu kamu mengambil keputusan yang lebih tepat di lapangan.

Checklist Implementasi

  • Uji langkah di lab terlebih dulu sebelum produksi.
  • Dokumentasikan konfigurasi, versi, dan langkah rollback.
  • Aktifkan monitoring + alert untuk komponen yang diubah.
  • Audit akses dan terapkan prinsip least privilege.

Butuh Bantuan?

Jika ingin implementasi aman di produksi, saya bisa bantu assessment, eksekusi, dan hardening.

Hubungi Saya
Kamandanu Wijaya

Tentang Penulis

Kamandanu Wijaya

IT Infrastructure & Network Administrator

Administrator infrastruktur & jaringan dengan pengalaman enterprise 14+ tahun, fokus stabilitas, keamanan, dan automasi.

Sertifikasi: Google IT Support, Cisco Networking Academy, DevOps.

Lihat Profil

Butuh Solusi IT?

Tim DoWithSudo siap membantu setup server, VPS, dan sistem keamanan lo.

Hubungi Kami

Artikel Terkait

WhatsApp