Belajar Ansible dari Nol, Berhenti Capek Setup Server Secara Manual
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.

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:
- Ansible membuka koneksi SSH ke target.
- Module dikirim dan dieksekusi menggunakan Python di server target.
- Hasil dievaluasi untuk menentukan status
changedatauok.
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”.

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:
- apt / yum: Untuk mengelola paket aplikasi.
- service / systemd: Untuk mengelola status aplikasi (start, stop, restart).
- copy: Untuk menyalin file dari laptop kamu ke server.
- template: Sama seperti copy, tapi kamu bisa memasukkan variabel ke dalam file tersebut (menggunakan Jinja2).
- 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

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: yeshanya 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:
- 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.
- Lupa Password Sudo: Jika server target butuh password untuk
sudo, pastikan kamu menambahkan parameter--ask-become-passsaat menjalankan playbook. - 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.
Referensi Resmi
Butuh Bantuan?
Jika ingin implementasi aman di produksi, saya bisa bantu assessment, eksekusi, dan hardening.
Hubungi SayaTentang 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 ProfilButuh Solusi IT?
Tim DoWithSudo siap membantu setup server, VPS, dan sistem keamanan lo.
Hubungi Kami