Server/Infra 01 Oct 2026 6 views 0 komentar

Ansible untuk Pemula - Automasi Konfigurasi Server Tanpa SSH Manual

Ansible untuk Pemula - Automasi Konfigurasi Server Tanpa SSH Manual

Kemarin saya setup 5 VPS baru buat project kantor. Bayangin, install Nginx, konfigurasi firewall, bikin user, setup SSH key - diulang 5 kali. Jam kediga jam ketiga, tangan udah capek, Copy-paste command dari notes, kadang lupa ganti IP. Nah, kalau kamu juga sering ngalamin hal serupa, Ansible adalah solusi yang kamu cari.

Ansible itu tool automasi yang bikin kamu bisa konfigurasi puluhan server dengan satu perintah. Tidak perlu SSH manual ke tiap server. Tidak perlu ingat urutan install package. Cukup tulis apa yang mau kamu lakukan dalam file YAML yang disebut playbook, dan Ansible akan eksekusi di semua server yang kamu target.

Apa Itu Ansible dan Kenapa Wajib Dipelajari Developer DevOps

Ansible dibuat oleh Red Hat dan jadi salah satu tool paling populer di dunia DevOps. Beda dengan Chef atau Puppet yang butuh agent terinstall di setiap server, Ansible bersifat agentless. Artinya? Kamu cuma butuh SSH access ke server, dan Ansible jalan dari laptop kamu atau server control node.

Cara kerjanya simpel banget: kamu bikin file inventory yang isinya daftar IP server, lalu bikin playbook YAML yang berisi langkah-langkah yang mau dijalankan. Ansible baca playbook, connect via SSH ke tiap server, eksekusi command, dan balikin laporan hasilnya. Semua idempotent - kalau kamu run playbook 10 kali, hasilnya sama kayak run sekali. Tidak ada side effect ganda.

Buat yang baru dengar Ansible, ini kenapa kamu harus peduli:

  • Setup server konsisten - 1 atau 100 server, konfigurasinya sama persis. Tidak ada "oh di server A lupa install git".
  • Version controlled - playbook disimpan di Git, jadi setiap perubahan konfigurasi ada history. Rollback tinggal revert commit.
  • Reproducible - server down? Bikin baru, run playbook, selesai. Tidak perlu ingat "dulu gimana cara setup server ini".
  • Cocok untuk hosting murah - deploy ke DigitalOcean, Linode, atau Vultr droplet cuma butuh menit, bukan jam.

Install Ansible di Laptop atau Control Node

Ansible jalan dari mesin yang disebut control node. Biasanya laptop developer atau server khusus. Yang penting control node bisa SSH ke semua target server. Install-nya gampang banget:


# Ubuntu / Debian
sudo apt update
sudo apt install ansible -y

# macOS (via Homebrew)
brew install ansible

# Python pip (universal)
pip install ansible

# Verify installation
ansible --version

Setelah install, cek versinya. Versi terbaru saat ini sudah mendukung banyak modul built-in yang mempermudah hidup kamu. Kalau kamu pakai Ubuntu 24.04 LTS, Ansible langsung available di repo default.

Setup Inventory File - Daftar Server Target

Inventory adalah file yang berisi daftar server yang mau kamu manage. Formatnya bisa INI atau YAML. Untuk pemula, INI lebih gampang dibaca:


# ~/inventory.ini

[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu
web2 ansible_host=192.168.1.11 ansible_user=ubuntu

[databases]
db1 ansible_host=192.168.1.20 ansible_user=ubuntu

[all:vars]
ansible_python_interpreter=/usr/bin/python3

Di contoh di atas, saya punya 2 group: webservers dan databases. Tiap server punya IP dan username SSH. Section [all:vars] set variable global yang apply ke semua server. Test konektivitasnya:


# Test koneksi ke semua server
ansible all -i ~/inventory.ini -m ping

# Test hanya ke web servers
ansible webservers -i ~/inventory.ini -m ping

Kalau semua server balas SUCCESS, berarti SSH jalan dan Ansible siap dipakai. Kalau ada yang gagal, cek SSH key, firewall, dan username.

Tulis Playbook Pertama - Install Nginx di Multiple Servers

Sekarang masuk ke bagian serunya. Kita bikin playbook yang install Nginx, start service, dan pastikan service auto-start saat boot. Bikin file setup-nginx.yml:


---
- name: Setup Nginx Web Server
 hosts: webservers
 become: yes
 
 tasks:
 - name: Update apt cache
 apt:
 update_cache: yes
 cache_valid_time: 3600

 - name: Install Nginx
 apt:
 name: nginx
 state: present

 - name: Ensure Nginx is running
 service:
 name: nginx
 state: started
 enabled: yes

 - name: Copy custom index.html
 copy:
 content: |
 <!DOCTYPE html>
 <html>
 <body>
 <h1>Server managed by Ansible</h1>
 <p>Hostname: {{ ansible_hostname }}</p>
 </body>
 </html>
 dest: /var/www/html/index.html
 owner: www-data
 group: www-data
 mode: '0644'

 - name: Allow HTTP in UFW
 ufw:
 rule: allow
 port: '80'
 proto: tcp

Perhatikan beberapa hal penting di playbook di atas. Pertama, become: yes berarti Ansible pakai sudo saat eksekusi command. Kedua, tiap task punya name yang deskriptif - ini penting karena akan muncul di output saat playbook run, jadi kamu tahu persis apa yang sedang terjadi. Ketiga, variable {{ ansible_hostname }} akan otomatis diganti dengan hostname tiap server. Run playbook-nya:


ansible-playbook -i ~/inventory.ini setup-nginx.yml

Output-nya bakal kayak gini:


PLAY [Setup Nginx Web Server] *************

TASK [Gathering Facts] ********************
ok: [web1]
ok: [web2]

TASK [Update apt cache] *******************
changed: [web1]
changed: [web2]

TASK [Install Nginx] **********************
changed: [web1]
changed: [web2]

TASK [Ensure Nginx is running] *************
ok: [web1]
ok: [web2]

PLAY RECAP *********************************
web1 : ok=5 changed=3 unreachable=0 failed=0
web2 : ok=5 changed=3 unreachable=0 failed=0

Task yang changed berarti Ansible melakukan perubahan. Yang ok berarti kondisi server sudah sesuai yang diminta (idempotent). Kalau kamu run playbook ini lagi, task Install Nginx akan jadi ok karena package sudah terinstall. Ini inti dari idempotency - Ansible tidak akan install ulang kalau sudah ada.

Roles - Struktur Playbook untuk Project Besar

Kalau playbook kamu sudah 200 baris, saatnya pecah ke roles. Role adalah cara Ansible mengorganisir tasks, variables, templates, dan files jadi struktur folder yang reusable. Bikin role dengan command:


# Bikin struktur role otomatis
mkdir -p ~/ansible-project/roles/nginx/{tasks,handlers,templates,vars,defaults,files,meta}

# File utama: roles/nginx/tasks/main.yml

---
# roles/nginx/tasks/main.yml

- name: Install Nginx
 apt:
 name: nginx
 state: present

- name: Copy nginx config template
 template:
 src: nginx.conf.j2
 dest: /etc/nginx/sites-available/default
 notify: restart nginx

- name: Ensure Nginx running
 service:
 name: nginx
 state: started
 enabled: yes

---
# roles/nginx/handlers/main.yml

- name: restart nginx
 service:
 name: nginx
 state: restarted

Perhatikan keyword notify: restart nginx di task config. Ini memanggil handler restart nginx. Handler hanya dipanggil kalau task yang notify-nya mengalami perubahan (changed). Jadi kalau config tidak berubah, Nginx tidak akan di-restart. Efisien banget kan?

Vault - Encrypt Password dan Secret

Playbook kamu mungkin butuh password database, API key, atau secret lain. Jangan simpan plaintext di Git! Ansible Vault bikin kamu bisa encrypt file atau variable tertentu:


# Encrypt file
ansible-vault encrypt secrets.yml

# Edit encrypted file
ansible-vault edit secrets.yml

# Run playbook dengan vault
ansible-playbook -i inventory.ini --ask-vault-pass playbook.yml

# Decrypt file (jika perlu)
ansible-vault decrypt secrets.yml

Best practice-nya: simpan vault password di password manager seperti Bitwarden atau 1Password, lalu pass via environment variable ANSIBLE_VAULT_PASSWORD_FILE. Jadi tidak perlu ketik password tiap run playbook.

Tips Praktis dari Pengalaman Pribadi

Setelah pakai Ansible hampir 2 tahun, ini hal-hal yang saya pelajari:

  • Always test di satu server dulu. Tambahkan serial: 1 di playbook untuk rollout bertahap. Kalau ada yang break, cuma 1 server yang affected, bukan semua.
  • Pakai --check untuk dry run. Command ansible-playbook playbook.yml --check akan simulate tanpa benar-benar ubah apa-apa. Bagus untuk verify sebelum deploy ke production.
  • Tagging tasks. Kalau playbook kamu punya 50 tasks tapi cuma mau run 2, pakai tags. Contoh: tags: [nginx, config], lalu run dengan --tags "config".
  • Struktur folder rapi. Pisahkan inventory per environment: inventory/dev.ini, inventory/staging.ini, inventory/prod.ini. Jangan campur aduk.
  • Gunakan Galaxy. Ansible Galaxy adalah marketplace role siap pakai. Cari nginx, docker, nodejs - tinggal download dan pakai. Hemat banyak waktu.

Kesimpulan

Ansible mengubah cara kamu manage server dari manual SSH ke perintah otomatis yang reproducible. Mulai dari install package, konfigurasi service, deploy aplikasi, sampai setup security - semua bisa satu playbook. Buat yang baru mulai, jangan takut dengan YAML. Strukturnya readable dan error message-nya cukup jelas. Coba bikin playbook sederhana untuk install Nginx di 1 VPS dulu, lalu expand ke multiple servers. Kalau kamu punya VPS di DigitalOcean atau Linode, itu tempat perfect buat eksperimen Ansible tanpa takut break apa-apa.

Sudah pernah pakai Ansible atau masih pakai SSH manual? Cerita pengalaman kamu di kolom komentar, atau tanya kalau ada yang bingung saat setup pertama kali!


Bagikan artikel ini:

Komentar (0)

Belum ada komentar. Jadilah yang pertama memberikan tanggapan!

Tinggalkan Komentar