Ansible Playbook for Configuration automation server

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 di group_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.

Leave a Reply

Your email address will not be published. Required fields are marked *