Introduction
Dalam dunia DevOps dan sistem administrasi modern, pengelolaan konfigurasi server secara manual bukan hanya memakan waktu tapi juga rawan kesalahan. Di sinilah Ansible hadir sebagai solusi otomasi yang powerful, sederhana, dan agentless (tanpa perlu instalasi tambahan di target server).
Salah satu fitur andalan Ansible adalah Playbook—sebuah file YAML yang berisi sekumpulan task yang dijalankan secara otomatis untuk mengatur konfigurasi server, seperti instalasi paket, pengaturan user, deployment aplikasi, dan sebagainya.
Artikel ini akan membahas langkah demi langkah bagaimana membuat dan menjalankan Ansible Playbook untuk otomasi konfigurasi server, lengkap dari persiapan hingga eksekusi.
Prepare
Sebelum mulai menulis playbook, pastikan beberapa hal berikut sudah siap :
a Server Inventory (target)
Minimal 1 server Linux (Ubuntu/CentOS) dengan akses SSH.
b. Ansible Control Node
Sebuah mesin (laptop, VM, WSL, atau server) yang sudah diinstall Ansible.
Instalasi Ansible di Ubuntu:
sudo apt update
sudo apt install ansible -y
c. Akses SSH tanpa password (menggunakan SSH Key)
ssh-keygen -t rsa -b 4096
ssh-copy-id user@ip-server
Struktur file & Topology

.
├── README.MD
├── group_vars
│ └── nginx-docker-deployment.yml
├── host_vars
├── inventory
│ └── host.ini
├── playbook-docker.yml
├── playbook-nginx.yml
└── roles
├── certbot
│ └── tasks
│ ├── install.yaml
│ └── main.yaml
├── docker
│ └── tasks
│ ├── deploy.yml
│ ├── install.yml
│ ├── main.yml
│ ├── remove-container.yml
│ └── uninstall.yml
└── nginx
├── handlers
│ └── main.yml
├── tasks
│ ├── deploy.yml
│ ├── install.yml
│ ├── main.yml
│ ├── remove.yml
│ └── uninstall.yml
└── templates
└── nginx.conf.j2
Step 1 – Create inventory
inventory/host.ini
[webserver]
192.168.1.100 ansible_user=ubuntu
192.168.1.101 ansible_user=ubuntu
File ini berisi daftar server yang akan dikelola oleh Ansible, lengkap dengan nama grup host, IP/hostname, dan user SSH.
Step 2 – group_vars
Folder ini menyimpan variabel yang berlaku untuk seluruh grup host tertentu. Dalam hal ini, semua host dalam grup nginx-docker-deployment akan menerima variabel dari file ini.
docker_apps:
- image: "gunawand/front"
tag: "latest"
host_port: "3006"
container_port: "3000"
name: "backend-api"
- image: "gunawand/nodeapp"
tag: "v1"
host_port: "3010"
container_port: "3000"
name: "backend-nodeapp"
docker_remove_apps:
- name: backend-api
image: gunawand/front
tag: latest
- name: backend-nodeapp
image: gunawand/nodeapp
tag: v1
nginx_sites:
#deploy
- nginx_action: deploy
domain_name: test.igunawan.com
upstream_url: "http://localhost:3009"
nginx_conf_name: backend.conf
- nginx_action: deploy
domain_name: nodeapp.igunawan.com
upstream_url: "http://localhost:3010"
nginx_conf_name: nodeapp.conf
#remove
- nginx_action: remove
nginx_conf_name: backend.conf
- nginx_action: remove
nginx_conf_name: nodeapp.conf
Step 3 – host_vars
Di sini kamu bisa mendefinisikan variabel per host, jika ada konfigurasi yang spesifik untuk satu IP/host saja. Kalau belum dipakai, folder ini boleh kosong.
Contoh nama file: host_vars/192.168.10.11.yml
Step 4 – Create playbook
1. playbook-nginx.yml
Berisi tugas untuk menginstal, mengatur, dan menjalankan NGINX melalui role nginx.
- name: Deploy or Remove All Nginx Sites
hosts: all
vars_files:
- group_vars/nginx-docker-deployment.yml
become: yes
roles:
- role: nginx
tags:
- nginx_deploy
- nginx_remove
2. playbook-docker.yml
Berisi instruksi untuk menginstal Docker, dan melakukan deploy container menggunakan role docker.
- name: Install Docker on servers
hosts: all
vars_files:
- group_vars/nginx-docker-deployment.yml
become: yes
roles:
- role: docker
vars:
docker_action: install
tags: docker_install
- name: Uninstall Docker on servers
hosts: all
become: yes
vars_files:
- group_vars/nginx-docker-deployment.yml
roles:
- role: docker
vars:
docker_action: uninstall
tags: docker_uninstall
- name: Deploy Docker containers
hosts: all
become: yes
vars_files:
- group_vars/nginx-docker-deployment.yml
roles:
- role: docker
vars:
docker_action: deploy
tags: docker_deploy
- name: Remove Docker containers and images
hosts: all
become: yes
vars_files:
- group_vars/nginx-docker-deployment.yml
roles:
- role: docker
vars:
docker_action: remove
tags: docker_remove
Step 5 – Roles
roles/nginx/
tasks/install.yml→ Install paket nginx.tasks/deploy.yml→ Salin konfigurasi, buat folder, dll.handlers/main.yml→ Restart nginx jika ada perubahan.templates/nginx.conf.j2→ Template konfigurasi nginx dinamis.tasks/uninstall.yml→ Hapus nginx jika diperlukan.
roles/docker/
tasks/install.yml→ Install Docker Engine.tasks/deploy.yml→ Jalankan container sesuai variabel digroup_vars.tasks/remove-container.yml→ Stop & remove container tertentu.tasks/uninstall.yml→ Hapus Docker dari sistem.
roles/certbot/
tasks/install.yaml→ Install Certbot.- Bisa ditambahkan untuk setup HTTPS secara otomatis (nginx + certbot = TLS)
Step 6 – Eksekusi Playbook
Jalankan playbook sesuai kebutuhan:
ansible-playbook -i inventory/host.ini playbook-docker.yml \
--tags docker_deploy \
--limit servers-1
ansible-playbook -i inventory/host.ini playbook-nginx.yml --tags "install"
ansible-playbook -i inventory/host.ini playbook-docker.yml --tags "deploy"
Gunakan --tags jika kita ingin jalankan bagian tertentu, misalnya hanya install atau remove.
Struktur Ansible milikmu sudah sangat production ready:
- Inventory jelas.
- Variabel terpisah per grup (group_vars).
- Role modular dan reusable.
- Template bisa dikustomisasi.
- Playbook rapi dan terfokus pada tugas spesifik.

Admin website igunawan.com, System Administrator, DevOps Engineer
