Instal Nginx Php Dan Mariadb Di Centos Dengan Ansible
By Harjito
Instal Nginx Php Dan Mariadb Di Centos Dengan Ansible
Pada tutorial kali ini kita akan membahasa meengenai instalasi Nginx, PHP, dan MariaDB di CentOs. Tutorial ini sudah diuji dengan VPS yang dibuild di vultr dengan OS CentOS 7. Jika kalian belum tahu apa itu ansible kalian bisa baca dulu artikel saya sebelumnya yang berjudul Mengenal ansible tool untuk otomasi remote server. Untuk instalsinya bisa baca artikel saya dengan judul memulai bekerja dengan ansible. Saya anggap kalian telah paham apa itu ansible dan sudah install ansible. Mari kita lanjutkan.
Menyiapkan Inventory
Inventory adaah sebuah file dengan formal yaml yang berisi pengaturan awal. Beberapa hal yang perlu diatur di inventory anatara lain alamat remote host, user dan password ssh (akan lebih baik kalau tidak menggunakan password melainkan menggunakan key), versy python di remote host, password mysql dll. Karena ditulis dalam yaml, perhatikan betul indentasinya, karena cara kerja yaml mirip python. Pastikan untuk menggunakan editor yang suport yaml, untuk menghindari kesalahan indentasi. Tutorial ini menggunakan OS linux, tepatnya distro linux-mint. Silahka disesuaikan jika anda bekerja dengan OS berbeda.
- buat sebuaf file di folder ansible dan beri nama inventory.yaml
- Tulis script yaml berikut
hosts: ansible
vars:
domain: ansible.e-project-tech.com
ansible_user: root
ansible_ssh_private_key_file: ~/.ssh/id_rsa
ansible_python_interpreter: /usr/bin/python3
mysql_root_password: qwerty
nama hosts, domain, dan mysql_root_password didsesuaikan dengan keinginan kita, sedngakan ansible_python_interpreter disesuaikan dengan versi python yang terinstall di remote host
- buka file /etc/hosts
- Tambahkan di bagian akhir script berikut
xxx.xxx.xxx.xxx ansible # ini diperlukan untuk koneksi SSH
xxx.xxx.xxx.xxx ansible.e-project-tech.com #Ini diperlukan jika kita belum memiliki domain atau subdomain belum kita daftarkan dns-nya
xxx.xxx.xxx.xxx diisi dengan IP remote host, sedangkan ansible dan ansible.e-project-tech.com disamakan nama di inventory.yml
Uji Seting Inventory
Untuk memastikan tidak ada kesalahan lakukan pengujian dengan langkah sebagai berikut.
- buka terminal perintah
- Pastikan posisi cursir pada folder ansible
- Ping dengan perintah
sudo ansible-playbook -i inventory.yml
- Untuk pertama kali akan ditanyakan apakah akan menyimpan konfigurasi. jawab yes agar tidak ditanyakan lagi nantinya
- Jika tidak ada pesan error, berarti inventory berhasil.
Menyiapkan File instalasi
File instalasi juga merupakan file yaml. Dia dijalankan setelah inventory. Misalkan file instalasi kita adalah install.yaml, maka saat menjalankan ansible perintahnya adalah
sudo ansible-playbook -i inventory.yml install.yml
- Buat file baru di folder ansible dengan nama install.yml
- Ketikkan script berikut
- hosts: web
become: yes
web pada hosts mengarah pada konfigurasi di inventory.yml, perhatikan bahwa di inventory.yml, kita meberikan nama web
Menyiapkan Daftar Tugas
Install Nginx terbaru
- Masih di install.yml, tambahkan script berikut
tasks:
- name: "install nginx"
dnf:
name: ['nginx']
state: latest
name adalah nama penugasan, akan muncul sebagai penanda ketika tugas dijalankan. Untuk CentOS 7++, kita gunakan dnf bukan sebagai pengganti yum. Sedangkan state bisa kita pilih latest (terbaru)
Membuat Document Root Untuk Aplikasi WEB
- masih dalam file install.yml, di bawah tasks (pastikan posisinya sejajar dengan tasks:), tambahkan script berikut
- name: "create www directory"
file:
path: /var/www/{{ domain }}
state: directory
mode: '0775'
owner: "nginx"
group: "nginx"
Kita membuat sebuah folder dengan sesuai pengaturan nama domain di inventory.yml. Jadi {{ domain }} nantinya akan diganti dengan ansible.e-project-tech.com
Menghapus default_server pada virtual host
- Berbeda dengan distro debian, distro centos, tidak menggunakan site-enabled melainkan conf.d untuk pengaturan virtual host. Itu bisa dilihat pada file /etc/nginx/nginx.conf
- Virtual host default diletakkan di bagian bawah
- Untuk menghapus ddefault_server kita tambahkan script berikut
- name: "delete default nginx site"
shell: sed -i 's/default_server//' /etc/nginx/nginx.conf
notify: restart nginx
Kita menggunakan perintah sed (regex) untuk menghapus kata default_server pada file di /etc/nginx/nginx.conf
Menonaktifkan Selinux
SeLinux salah satu fitur yang sering membuat orang kelimpungan ketika pertama kali menggunakan CentOS. Secara default SeLinux on. Kit akan matikan untuk kita ganti dengan firewall. Adapun perintahnya sebagai beriku.
- name: "disable selinux"
shell: setenforce 0
Instalsi Firewall
Firewall membantu kita untuk mengamankan server, dengan cara menutup semua port yang tidak kita gunakan. Lalu kita buka port-port yang memamng diijinkan untuk diakses dari luar seperti port 80 (http) dan 443 (https). Adapun scriptnya sebagai berikut.
- name: "open port 80"
shell: firewall-cmd --permanent --zone=public --add-service=http
notify: restart firewalld
Menyiapkan konfigurasi untuk virtual host
Srtiap satu virtual host akan diatur oleh sebuah file .conf yang disimpa dalam folder /etc/nginx/conf.d/ dengan ekstensi .conf.
- Siapkan template dengan cara buat file baru di folder ansible, beri nama template.conf
- Ketikan script berikut
server {
listen 80;
listen [::]:80;
server_name {{ domain }};
index index.pkp index.html;
root /var/www/{{ domain }};
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- Siapkan task baru di untuk menyalin template.conf ke folder /etc/nginc/conf.d di reote host
- name: "copy nginx site.conf"
template:
src: template.conf
dest: /etc/nginx/conf.d/{{ domain }}.conf
owner: root
group: root
mode: '0644'
notify: restart nginx
menyiapkan Repo Remi untuk instalasi PHP
Repo yang ditulis Remi dipilih karena menyediakan kemudahan instalasi versi php. Adapun perintahnya sebagai berikut.
- name: "install repo php"
dnf:
name: ['https://rpms.remirepo.net/enterprise/remi-release-8.rpm']
state: latest
Mengaktifkan Repo Remi
Pertama mereset module php bawaan, dilanjutkan memilih versi php. Di contoh script kita menggunakan versi 7.4.
- name: "enable module php-7.4"
shell: dnf module reset php
shell: dnf module enable php:remi-7.4
Instalasi PHP dan ekstensi yang dibutuhakn
Karena kita memilih nginx sebagai webserver, maka kita gunakan PHP-FPM sebagai pengganti PHP-CGI. Adapun perintahnya sebagai berikut.
- name: "install php"
dnf:
name: ['php','php-fpm', 'php-common','php-xml', 'php-intl', 'php-mysql', 'php-pdo', 'php-mbstring']
state: latest
notify: restart php-fpm
Kalian bisa menambahkan ekstensi yang lain seperti php-gd jika memang dibutuhkan.
Instalasi MariaDB sebagai Engine Database
- name: "install mariadb"
dnf:
name: ['mariadb-server', 'python3-mysql']
state: latest
notify: restart mariadb
Mengatur Password MariaDB
Secara default instalasi MariaDB tanpa password, oleh karena itu kita perlu mengganti password. Adapun scriptnya sebagai berikut.
- name: Set root Password
mysql_user:
login_password: '{{ mysql_root_password }}'
check_implicit_admin: yes
name: root
host: '{{ item }}'
password: '{{ mysql_root_password }}'
state: present
with_items:
- localhost
- 127.0.0.1
- ::1
Mengatur Handler (triger)
Perhatikan pada beberapa task, ada baris perintah notify: ‘foo bar’. Artinya, setelah task dijalankan dia akan memanggil handlers (event manager). Perintahnya sebagai berikut.
handlers:
- name: restart nginx
service:
name: nginx
state: restarted
- name: restart firewalld
service:
name: firewalld
state: restarted
- name: restart php-fpm
service:
name: php-fpm
state: restarted
- name: restart mariadb
service:
name: mariadb
state: restarted
Setiap handler akan dipanggil sesuai dengan task yang memangilnya. Sebagai contoh task instalasi MariaDB, memanggil handler restart mariadb
Menjalankan Proses Instalasi
- Buka terminal perintah
- Pastikan cursor berada di folder ansible
- Jalankan perintah
sudo ansible-playbook -i inventory.yml install.yml
Menyiapkan Halaman Situs Untuk Menguji Instlasi
Untuk memastikan bahwa instalsi bekkerja sempurna, kita perlu membuat halaman pengujian. Dalam hal ini kita akan membuat halaman index.php dan info.php.
Menyiapkan Dokumen Web
- Buat folder baru di dalam folder ansible, beri nama site
- Buat dua buah file yaitu index.php dan info.php
- Pada index.php ketikkan script berikut
<!DOCTYPE html>
<html lang="en">
<title> </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://unpkg.com/tachyons/css/tachyons.min.css">
<body>
<article class="vh-100 dt w-100 bg-dark-pink">
<div class="dtc v-mid tc white ph3 ph4-l">
<h1 class="f6 f2-m f-subheadline-l fw6 tc">Hello World!</h1>
</div>
</article>
</body>
</html>
- Sedangkan Pada info.php ketikkan script berikut
<?php
phpinfo();
Membuat Penugasan Untuk Syinkronisasi
- Proses sinkronisasi pada prinsipnya adalah deploy aplikasi yang kita buat di lokal agar bisa diakses di remote host
- Buat file baru di folder ansible, beri nama deploy.yml
- Ketikkan perintah sebahai berikut
- hosts: web
become: yes
tasks:
- name: "sync local to server"
synchronize:
src: site/
dest: /var/www/{{ domain }}
archive: no
checksum: yes
recursive: yes
delete: yes
become: no
Jika kita familier dentan rsync, pada dasarnya ini menjalankan rsync
Menjalankan Proses Sinkronisasi
- Buka terminal perintah
- Jalankan perintah
sudo ansible-playbook -i inventory.yml deploy.yml
- Buka broswer, lalu ketikkan http://ansible.e-project-tech.com (silahkan disesuaikan dengan domain yang anda buat di file inventory.yml)
- Buka juga http://ansible.e-project-tech.com/info.php untuk melihat instalsi NGINX, PHP dan MariaDB
Demikian tutorial kita kali ini. Semoga bermanfaat.
Saya akan demi live di acara Online Learning di Group PHP Indonesia pada tanggal 17 Agustus 2021 pukul 19:00. Dont miss it.
Tags:
Ikuti terus tutorial saya di e-Project dan channel
saya di