Ansible adalah alat otomatisasi sederhana yang mengotomatiskan penerapan aplikasi perangkat lunak, penyediaan cloud, dan manajemen konfigurasi. Ini adalah alat orkestrasi server yang membantu Anda mengelola dan mengontrol sejumlah besar node server dari satu tempat yang disebut 'Mesin Kontrol'. Ansible dibuat oleh Michael DeHaan pada tahun 2012 dan ditulis dengan Python dan Powershell.
Dalam tutorial ini, kami akan menunjukkan cara membuat Ansible Playbook dasar untuk menyediakan LEMP Stack di Server Ubuntu 18.04. Anda akan belajar cara membuat Ansible Playbook dasar yang dapat diskalakan untuk aplikasi proyek PHP lainnya seperti WordPress, Nextcloud, dll.
Prasyarat
- 2 OS Ubuntu.
- 10.5.5.20 memungkinkan
- 10.5.5.26 ketentuan
- Pengetahuan tentang penggunaan dasar Memungkinkan
- Hak istimewa root
Apa yang akan kami lakukan:
- Menyiapkan Proyek Playbook yang Memungkinkan
- Buat Struktur Direktori Peran Playbook yang Memungkinkan
- Siapkan host dan site.yml
- Menyiapkan Peran 'umum' - Penyiapan dasar
- Siapkan Peran 'web' - Konfigurasi Nginx dan PHP-FPM
- Menyiapkan Peran 'db' - Konfigurasi Database MySQL
- Pengujian
Langkah 1 - Siapkan Proyek Playbook yang Memungkinkan
Playbook Ansible adalah sekumpulan instruksi yang Anda kirim untuk dijalankan pada satu atau sekelompok host server. Ini mewakili penyediaan yang memungkinkan, di mana otomatisasi didefinisikan sebagai tugas, dan semua pekerjaan seperti menginstal paket, mengedit file, akan dilakukan oleh modul yang memungkinkan.
Playbook Ansible berisi beberapa konfigurasi dasar, termasuk host dan informasi pengguna dari server penyediaan, daftar tugas yang akan diimplementasikan ke server penyediaan, konfigurasi template dan kustom, dan sekelompok variabel bagian dari template dan tugas.
Pertama, buat direktori proyek master pada mesin 'ansible-control'. Direktori proyek master akan menyimpan semua direktori, file, dan konfigurasi buku pedoman kami.
Buat direktori proyek Ansible yang disebut 'project-lemp' dan masuk ke dalamnya.
mkdir project-lemp/
cd project-lemp
Sekarang buat file konfigurasi baru 'hosts' dan 'site.yml', lalu buat direktori baru bernama 'roles'.
touch hosts site.yml
mkdir -p roles/
Detail tentang konfigurasi:
host - Ini adalah file inventaris yang berisi potongan informasi tentang server yang dikelola oleh ansible. Ini memungkinkan Anda membuat grup server yang membuat Anda lebih mudah mengelola dan menskalakan file inventaris itu sendiri. File inventaris dapat dibuat dengan berbagai format, termasuk format INI dan YAML.
site.yml - File buku pedoman master yang berisi grup host mana yang akan dikelola menggunakan peran kami yang tersedia.
peran - itu adalah grup playbook Ansible yang akan digunakan untuk menyediakan server. Peran yang memungkinkan memiliki struktur direktori sendiri, setiap peran akan berisi direktori seperti tugas, penangan, vars, dll.
Langkah 2 - Buat Peran yang Mungkin untuk Struktur Direktori
Pada langkah ini, kita akan membuat direktori peran yang memungkinkan menggunakan perintah ansible-galaxy. Kami akan menghasilkan dua peran yang disebut peran 'umum' dan peran 'web'.
Di dalam direktori 'project-lemp', buka direktori 'roles'.
cd roles/
Buat direktori struktur peran dan file untuk peran 'umum' dan 'web' dengan menjalankan perintah ansible-galaxy di bawah ini.
ansible-galaxy init common
ansible-galaxy init web
ansible-galaxy init db
Setelah itu, periksa semua struktur direktori peran yang tersedia menggunakan perintah berikut.
tree .
Anda akan diperlihatkan hasilnya seperti di bawah ini.
Langkah 3 - Siapkan host dan site.yml
File 'hosts' akan berisi daftar dan grup server yang dikelola oleh Ansible. Untuk panduan ini, kami akan membuat grup bernama 'lemp' dengan anggota bernama 'server01' dan alamat IP 10.5.5.26.
Edit file 'hosts' menggunakan editor vim.
vim hosts
Tempelkan konfigurasi di bawah.
[lemp]
server01 ansible_host=10.5.5.26
Simpan dan tutup.
Selanjutnya, edit file konfigurasi site.yml.
vim site.yml
Tempelkan konfigurasi di bawah.
---
- hosts: lemp
remote_user: hakase
become: yes
roles:
- common
- web
- db
Simpan dan tutup.
Langkah 3 - Siapkan Peran Umum
Pada langkah ini, kita akan menyiapkan peran umum. Dan untuk melakukan itu, kita perlu membuat daftar tugas yang akan kita lakukan.
Di bawah daftar tugas yang akan kita lakukan pada peran 'umum'.
- Ubah repositori
- Perbarui repositori
- Tingkatkan paket ke versi terbaru
- Siapkan zona waktu server
Sekarang masuk ke direktori 'common' dan edit konfigurasi 'tasks/main.yml'.
cd common/
vim tasks/main.yml
Buat tugas untuk mengubah repositori, dan kita akan menggunakan modul 'copy' yang akan menyalin basis 'sources.list' pada direktori 'files' ke remote host '/etc/apt/'.
- name: Change repository Ubuntu 18.04Step 4 - Setup 'web' Roles
copy:
src: sources.list
dest: /etc/apt/
backup: yes
Buat tugas untuk memperbarui repositori dan tingkatkan semua paket ke versi terbaru menggunakan modul 'apt'.
- name: Update repository and Upgrade packages
apt:
upgrade: dist
update_cache: yes
Sekarang buat tugas untuk mengonfigurasi zona waktu sistem menggunakan modul zona waktu yang memungkinkan.
- name: Setup timezone to Asia/Jakarta
timezone:
name: Asia/Jakarta
state: latest
Simpan dan tutup.
Setelah itu, buat konfigurasi repositori baru 'sources.list' di dalam direktori 'file'.
vim files/sources.list
Pilih repositori terdekat dari lokasi server Anda, di bawah ini milik saya.
deb http://buaya.klas.or.id/ubuntu/ bionic main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-updates main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic universe
deb http://buaya.klas.or.id/ubuntu/ bionic-updates universe
deb http://buaya.klas.or.id/ubuntu/ bionic multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-updates multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-backports main restricted universe multiverse
deb http://buaya.klas.or.id/ubuntu/ bionic-security main restricted
deb http://buaya.klas.or.id/ubuntu/ bionic-security universe
deb http://buaya.klas.or.id/ubuntu/ bionic-security multiverse
Simpan dan tutup.
terakhir, konfigurasi peran 'umum' telah selesai.
Langkah 4 - Siapkan Peran 'web'
Pada langkah ini, kita akan menyiapkan peran 'web'. Ini akan melakukan beberapa tugas termasuk menginstal server web Nginx, PHP-FPM dengan beberapa ekstensi dasar, dan mengkonfigurasi PHP-FPM dengan Nginx.
Di bawah ini adalah detail tugas yang akan kami lakukan pada peran 'web':
- Instal Nginx
- Instal PHP-FPM
- Konfigurasi php.ini
- Buat host virtual
- Tambahkan file phpinfo
Buka direktori 'web' dan edit file 'tasks/main.yml'.
cd web/
vim tasks/main.yml
Buat tugas pertama untuk instalasi nginx menggunakan modul apt.
- name: Install Nginx
apt:
name: nginx
state: latest
Sekarang buat tugas untuk menginstal PHP-FPM dengan beberapa ekstensi dasar. Dan untuk instalasi multiple package, kita bisa menggunakan format python 'list' seperti di bawah ini.
- name: Instal PHP-FPM
apt:
name: ['php','php-fpm','php-common','php-cli','php-curl']
state: latest
Selanjutnya, kita akan menambahkan baris baru ke konfigurasi php.ini menggunakan modul 'blockinfile'. Dan di akhir baris, kami akan memberitahukan kemungkinan untuk me-restart layanan php-fpm setelah mengkonfigurasi file php.ini.
- name: Configure php.ini
blockinfile:
dest: /etc/php/{{ php_version }}/fpm/php.ini
block: |
date.time = Asia/Jakarta
cgi-fix_pathinfo = 0
backup: yes
notify: restart php-fpm
Sekarang kita akan menyalin konfigurasi virtual host nginx menggunakan modul 'template'. Modul template akan menyalin konfigurasi dari direktori 'template' ke server jauh. Kami akan menyalin template host virtual jinja2 'vhost.j2' ke direktori '/etc/nginx/sites-enabled/', dan yang terakhir kami akan memberi tahu kemungkinan untuk memulai ulang layanan nginx.
- name: Create Nginx virtual host
template:
src: vhost.j2
dest: /etc/nginx/sites-enabled/vhost-{{ domain_name }}
notify: restart nginx
Setelah itu, kita akan membuat tugas baru untuk membuat direktori web-root menggunakan modul 'file' dan menyalin template index.php ke dalamnya.
- name: Create web-root directory
file:
path: /var/www/{{ domain_name }}
state: directory
- name: Upload index.html and info.php files
template:
src: index.php.j2
dest: /var/www/{{ domain_name }}/index.php
Simpan dan tutup.
Sekarang kita akan mengonfigurasi handler untuk memulai ulang layanan nginx dan php-fpm. Edit konfigurasi 'handlers/main.yml' menggunakan editor vim.
vim handlers/main.yml
Tempelkan konfigurasi di bawah.
- name: restart nginx
service:
name: nginx
state: restarted
enabled: yes
- name: restart php-fpm
service:
name: php{{ php_version }}-fpm
state: restarted
enabled: yes
Simpan dan tutup.
Selanjutnya, kita akan mengedit konfigurasi 'vars/main.yml'. Di bagian atas konfigurasi Anda akan melihat konfigurasi variabel '{{ php_version }}' dan '{{ domain_name }}'. Variabel-variabel tersebut mewakili pengaturan lingkungan kita untuk versi php dan nama domain yang akan digunakan. Variabel memungkinkan lebih dapat digunakan kembali karena kita hanya perlu mengedit konfigurasi variabel 'vars/main.yml' dan tidak mengedit konfigurasi dasar.
Edit konfigurasi variabel 'vars/main.yml' menggunakan editor vim.
vim vars/main.yml
Tempelkan konfigurasi di bawah.
php_version: 7.2
domain_name: hakase-labs.io
Simpan dan tutup.
Sekarang kita akan membuat konfigurasi template jinja2 'index.php.j2' dan 'vhost.j2' pada direktori 'templates/'.
vim templates/index.php.j2
Tempelkan konfigurasi di bawah.
<html>
<body>
<h1><center>index.html for domain {{ domain_name }}</center></h1>
<p>
<p>
<?php
phpinfo();
?>
</body>
</html>
Simpan dan tutup.
Setelah itu, buat template untuk konfigurasi virtual host nginx 'vhost.j2'.
vim templates/vhost.j2
Tempelkan konfigurasi di bawah.
server {
listen 80;
listen [::]:80;
root /var/www/{{ domain_name }};
index index.php index.html index.htm index.nginx-debian.html;
server_name {{ domain_name }};
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php{{ php_version }}-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Simpan dan tutup konfigurasi, dan kita telah menyelesaikan konfigurasi peran web.
Langkah 5 - Siapkan Peran 'db'
Pada langkah ini, kita akan mengonfigurasi peran 'db' untuk instalasi dan konfigurasi database MySQL.
Di bawah ini adalah detail tugas yang akan dilakukan pada peran 'db'.
- instal mysql
- Buat database MySQL
- Buat pengguna MySQL
- mulai ulang mysql
Buka direktori 'db' dan edit konfigurasi 'tasks/main.yml'.
cd db/
vim tasks/main.yml
Sekarang instal paket MySQL menggunakan modul 'apt' dan format python 'list' untuk instalasi beberapa paket.
- name: Install MySQL
apt:
name: ['mysql-server','mysql-client','python-mysqldb']
state: latest
notify: restart mysql
Kemudian buat tugas baru untuk membuat database MySQL dan pengguna, lalu berikan semua hak istimewa pengguna ke database.
- name: Create database
mysql_db:
name: '{{ db_name }}'
state: present
- name: Create user for the database
mysql_user:
name: '{{ db_user }}'
password: '{{ db_pass }}'
encrypted: yes
priv: '{{ db_name }}.*:ALL'
state: present
Simpan dan tutup.
Selanjutnya, edit konfigurasi 'handlers/main.yml'.
vim handlers/main.yml
Tempel konfigurasi tugas untuk memulai ulang layanan MySQL.
- name: restart mysql
service:
name: mysql
state: restarted
enabled: yes
Simpan dan tutup.
Setelah itu, edit konfigurasi variabel vars 'vars/main.yml'.
vim vars/main.yml
Tempel variabel ini untuk database MySQL dan konfigurasi pengguna di bawah ini.
db_name: hakase-db
db_user: hakase
db_pass: '*C960D382DB42E57D3BAC33891CF87900DCB1A869'
Simpan dan tutup.
Variabel 'db_pass' memiliki kata sandi terenkripsi MySQL, dan Anda dapat membuat kata sandi MySQL terenkripsi menggunakan alat online.
Langkah 6 - Jalankan Playbook yang Mungkin
Masuk ke direktori proyek Ansible.
cd project-lemp/
Jalankan perintah ansible-playbook di bawah ini.
ansible-playbook -i hosts site.yml
Sekarang kemungkinannya akan menjalankan semua peran yang kita tetapkan ke host. Jika sudah selesai maka akan ditampilkan hasil seperti dibawah ini.
Pastikan Anda tidak mendapatkan kesalahan.
Langkah 7 - Pengujian
Buka browser web Anda dan ketik nama domain di bilah alamat http://hakase-labs.io.
Dan Anda akan ditampilkan halaman indeks dengan phpinfo seperti di bawah ini.
PHP-FPM dan Nginx berfungsi.
Selanjutnya, kembali ke terminal server dan login ke server MySQL menggunakan user dan password yang telah kita buat pada variabel role 'mysql'.
mysql -u hakase -p
PASSWORD: hakasepass
periksa daftar database yang dimiliki oleh pengguna.
show databases;
Dan Anda akan masuk ke shell MySQL dan akan ditampilkan database bernama 'hakase-db' pada daftar.
Terakhir, Ansible Playbook untuk instalasi dan konfigurasi LEMP Stack telah berhasil dibuat dan diuji.