Melanjutkan posting sebelum nya tentang ansible, kali ini kita akan mencoba beberapa module dan notasi-notasi baru seperti notify, with_items, dan lain sebagainya.
Agar percobaan kita semakin menarik maka kali ini kita akan menggunakan studi kasus membuat web hosting sederhana dengan memanfaatkan Nginx.
Mari kita mulai setahap demi setahap. Web hosting yang akan kita bangun ini memberikan akses ssh untuk setiap user yang ada. Kita akan membuat playbook yang akan menambahkan user ke dalam server, membuat direktori html sebagai webroot nya dan membuat setting untuk virtual host di Nginx dan mengarahkannya ke direktori html yang dibuat sebelumnya. Bagian terakhir adalah melakukan restart pada service nginx.
Buat file hosting.yaml dan isi dengan text sebagai berikut :
- name: Build Hosting hosts: all become: true become_user: root tasks: - name: Create User ansible.builtin.user: name: "{{ user }}" group: www-data password: "{{ passwd | password_hash('sha512', 'mysecretsalt') }}" shell: /bin/bash - name: Create HTML Directory ansible.builtin.file: name: "/home/{{ user }}/html" owner: "{{ user }}" group: www-data state: directory - name: Apply Nginx Settings ansible.builtin.template: src: nginx.j2 dest: "/etc/nginx/sites-enabled/{{ user }}" notify: - restart nginx handlers: - name: restart nginx ansible.builtin.service: name: nginx state: restarted
Pada playbook di atas kita akan berkenalan dengan empat macam module dari Ansible dan tiga notasi tambahan yaitu handlers, notify dan penggunaan environment variable.
Pada bagian pertama tasks kita dapat perhatikan terdapat penggunaan module ansible.builtin.user. Module ini digunakan untuk melakukan manajemen pengguna pada sistem target. Kita memberikan argumen pada penggunaan module tersebut antara lain:
- name. argumen ini akan menjadi nama user. Dalam kasus ini nama usernya akan dinamis diambil dari envorinmen variable bernama user. Notasi yang digunakan adalah {{ <nama-variable }}.
- group, argumen ini akan menjadi nama grup dari user yang dibuat. Karena pengguna ini hanya akan berkerja dengan webhosting maka tidak perlu adanya hak akses sudo. Untuk itu di putuskan memasukan user tersebut ke group www-data.
- password, argumen ini akan menjadi password untuk pengguna yang bersangkutan. Password juga diambil dari environmen variable passwd , kemudian dimasukan ke dalam fungsi password_hash agar menghasilkan bentuk password string yang sudah dihash.
- shell, argumen ini digunakan untuk menentukan shell apa yang akan dipakai oleh pengguna tersebut.
Pada bagian kedua task kita dapat perhatikan penggunaan module ansible.builtin.file. Module ini digunakan untuk membuat direktori atau file. Dalam kasus ini kita akan membuat direktori html yang akan menjadi webroot dari setiap domain yang ada. Kita memberikan argumen pada module tersebut antara lain:
- name,. argumen ini akan menentukan dimana nantinya file atau direktori dibuat.
- owner, menentukan siapa pemilik dari direktori tersebut. Sangat penting untuk menyesuikan pemilik direktori sesuai dengan user yang dibuat karena perintah ansible ini dieksekusi oleh root.
- group, menentukan group pemilik dari direktori tersebut
- state, memberi tahu kepada modul bahwa kita menginginkan pembuatan direktori bukan file
Pada bagian ketiga kita menggunakan module ansible.builtin.template. Modul ini berguna untuk membuat file pada target server berdasarkan template yang sudah ada. Kita memberikan argumen pada modul tersebut antara lain:
- src, argumen ini akan memberikan informasi dimana letak file template yang akan kita gunakan
- dest, argumen ini akan menunjukan dimana file tersebut di letakan.
pada module tersebut kita juga menggunakan notasi notify. Notasi ini akan menjalankan handlers yaitu restart nginx apabila modul tersebut mendeteksi adanya perubahan.
Selanjutnya masih pada direktori yang sama buatlah file nginx.j2 dan isi dengan text seperti berikut ini
server { listen 80; server_name {{ user }}.hosting.vm; location / { alias /home/{{ user }}/html/; autoindex on; } }
Mari saatnya kita mencoba menambahkan user dengan perintah berikut ini
ansible-playbook -i hosts.ini -e user=sate -e passwd=sate hosting.yaml
PLAY [Build Hosting] **************************** TASK [Gathering Facts] ************************** ok: [ubuntu_server] TASK [Create User] ****************************** changed: [ubuntu_server] TASK [Create HTML Directory] ******************** changed: [ubuntu_server] TASK [Apply Nginx Settings] ********************* changed: [ubuntu_server] RUNNING HANDLER [restart nginx] ***************** changed: [ubuntu_server] PLAY RECAP ************************************** ubuntu_server : ok=5 changed=4
Dapat kita lihat bahwa skrip tersebut telah membuat user, kemudian membuat direktori html , membuat setting pada nginx dan terakhir melakukan restart pada layanan nginx.
Saat nya kita mencoba, pertama pada komputer yang akan mengakses hostingan itu kita harus merubah file /etc/hosts sehingga domain yang diset tadi dapat di ping.
Selanjutnya tinggal kita buka browser dan arahkan untuk membuka http://<nama-user>.hosting.vm.
Apabila berhasil harusnya muncul tampilan seperti ini
Dan user yang tadi diset juga bisa mengakses server hosting sederhana ini dengan perintah ssh <user>@<ip-server> untuk melakukan manajeman website nya. Contohnya ssh [email protected].
Selamat mencoba dan tunggu lagi update selanjutnya
UPDATE:
Bagian ke lima telah terbit