# Setup Virtual Private Server (VPS) Linux Ubuntu untuk Hosting Website

Step by step setup Virtual Private Server (VPS) Linux Ubuntu untuk Hosting Website  
Full Playlist Youtube : https://www.youtube.com/playlist?list=PLlEPW\_5eA4BMy7QHjnT1i1MYB56mcindC

# 01. Prasyarat Update Repository, Create User Baru dan Setup SSH Public Key ke VPS

### Login SSH Root ke VPS Linux Ubuntu

Login ssh ke VPS yang telah dibuat, ketikkan perintah berikut :

```bash
#ssh [user]@[ip] // default port ssh 22
ssh root@103.126.232.199

#ssh -p 2222 [user]@[ip] //optional jika port ssh tidak 22
ssh -p root@103.126.232.199
```

[![Screenshot 2023-10-13 at 03.03.36.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-03-36.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-03-36.png)

jika anda pertama kali login, akan muncul dialog untuk menyimpan detail known host ssh, masukan perintah "yes"

[![Screenshot 2023-10-13 at 03.03.45.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-03-45.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-03-45.png)

kemudian masukan password vps, jika host, username dan password benar, anda akan masuk ke root ssh seperti gambar berikut. [![Screenshot 2023-10-13 at 03.04.13.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-04-13.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-04-13.png)

### Merubah Repository dan Upgrade Linux Ubuntu

untuk melihat/merubah repository yang digunakan di ubuntu, jalankan perintah edit berikut :

```bash
nano /etc/apt/sources.list
```

[![Screenshot 2023-10-13 at 03.04.36.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-04-36.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-04-36.png)

sesuaikan repository yang akan digunakan, jika sudah simpan

[![Screenshot 2023-10-13 at 03.05.49.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-05-49.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-05-49.png)

jalankan perintah update

```bash
apt update
```

[![Screenshot 2023-10-13 at 03.06.15.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-06-15.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-06-15.png)

setelah selesai update, kita bisa lihat list package yang bisa di upgrade

[![Screenshot 2023-10-13 at 03.07.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-07-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-07-07.png)

untuk melihat aplikasi yang bisa di upgrade jalankan perintah berikut

```bash
apt list --upgradeable
```

[![Screenshot 2023-10-13 at 03.07.44.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-07-44.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-07-44.png)

jika sudah yakin dengan package-package yang akan diupgrade, jalankan perintah

```bash
apt upgrade
```

kemudian tekan "Y"

[![Screenshot 2023-10-13 at 03.08.37.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-08-37.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-08-37.png)

pada dialog Configuring Openssh-server, kita bisa pilih Keep the local version currently installed, kemudian klik tab dan enter

[![Screenshot 2023-10-13 at 03.18.42.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-18-42.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-18-42.png)

pada dialog Pending kernel upgrade, klik tab dan enter

[![Screenshot 2023-10-13 at 03.21.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-21-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-21-07.png)

kemudian pada dialog Daemons using outdated libraries, bisa kita pilih service daemon apa yang mau direstart, kemudian klik tab dan enter

[![Screenshot 2023-10-13 at 03.21.37.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-21-37.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-21-37.png)

semua dialog sudah dikonfirmasi pada saat upgrade, anda akan mendapatkan pesan sukses upgrade seperti dibawah ini

[![Screenshot 2023-10-13 at 03.22.06.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-22-06.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-22-06.png)

### Menambahkan user non-root baru

untuk menambahkan user baru, login ssh sebagai root, dan jalankan perintah berikut :

```bash
adduser naja
```

[![Screenshot 2023-10-13 at 03.26.31.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-26-31.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-26-31.png)

Isi password dan kemudian semua detail user yang akan di create seperti gambar berikut

[![Screenshot 2023-10-13 at 03.27.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-27-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-27-05.png)

kemudian jalankan perintah berikut untuk menambahkan user naja ke group sudo

```bash
usermod -aG sudo naja
```

coba login ssh dengan user naja

[![Screenshot 2023-10-13 at 03.28.29.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/F4uscreenshot-2023-10-13-at-03-28-29.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/F4uscreenshot-2023-10-13-at-03-28-29.png)

lakukan perintah dengan sudo seperti berikut untuk melakukan pengecekan apakah sudah mendapatkan akses sudo

```bash
sudo ls /
```

### Generate Public Key SSH dan Copy ke VPS

untuk generate ssh key, jalankan perintah berikut

```bash
ssh-keygen -t rsa
```

[![Screenshot 2023-10-13 at 03.30.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/fGrscreenshot-2023-10-13-at-03-30-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/fGrscreenshot-2023-10-13-at-03-30-07.png)

tentukan lokasi file penyimpanan rsa nya, dan klik enter, untuk password bisa dimasukan dengan password yang berbeda dengan password VPS atau tanpa password

[![Screenshot 2023-10-13 at 03.30.56.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-30-56.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-30-56.png)

jika sudah tergenerate, copy public ssh key ke vps dengan perintah

```bash
ssh-copy-id -f -i /Users/naja/.ssh/idrive_rsa.pub naja@103.126.232.199
```

[![Screenshot 2023-10-13 at 03.32.00.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-32-00.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-32-00.png)

coba login ssh dengan private key dengan perintah

```bash
ssh -i /Users/naja/.ssh/idrive_rsa naja@103.126.232.199
```

[![Screenshot 2023-10-13 at 03.32.52.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-03-32-52.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-03-32-52.png)

selamat anda telah berhasil login ssh dengan private dan public key

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/CP7biLyCgdQ?si=al33Vi7qS3y3HsI1" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 02. Install Engine-X (Nginx) Web Server di VPS Linux Ubuntu

### Install Engine-X (Nginx) Web Server

untuk install nginx, terlebih dulu login ke VPS

[![Screenshot 2023-10-13 at 04.14.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-14-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-14-05.png)

Install nginx dengan perintah berikut :

```bash
sudo apt install nginx
```

[![Screenshot 2023-10-13 at 04.15.33.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-15-33.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-15-33.png)

### Memahami Struktur Folder Enginx-X (Nginx)

config utama nginx ada di /etc/nginx/nginx.conf, jalankan perintah berikut untuk melihat config nginx

```bash
cat /etc/nginx/nginx.conf
```

[![Screenshot 2023-10-13 at 04.15.53.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-15-53.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-15-53.png)

VirtualHost default nginx ada di folder /etc/nginx/sites-available/default dan di symlink ke /etc/nginx/sites-enable/default, untuk melihat confignya jalankan perintah berikut :

```bash
cat /etc/nginx/sites-available/default
```

[![Screenshot 2023-10-13 at 04.18.50.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-18-50.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-18-50.png)

### Modifikasi Index Default Engine-X file index.nginx-debian.html

untuk melihat perubahan pada tampilan default nginx seperti berikut ini

[![Screenshot 2023-10-13 at 04.22.40.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-22-40.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-22-40.png)

rubah file default dengan perintah berikut

```bash
sudo nano /var/www/html/index.nginx-debian.html
```

sesuaikan file htmlnya, misal seperti berikut ini

[![Screenshot 2023-10-13 at 04.22.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-22-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-22-35.png)

simpan dan berikut hasil perubahannya

[![Screenshot 2023-10-13 at 04.24.11.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-24-11.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-24-11.png)

### Start, Stop dan Restart Service Nginx

untuk melakukan start, stop dan restart service jalankan perintah berikut

```bash
# start service
sudo service nginx start

# stop service
sudo service nginx stop

# restart service
sudo service nginx restart
```

[![Screenshot 2023-10-13 at 04.39.40.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-39-40.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-39-40.png)

### Enable dan Disable Service Engine-X saat Startup VPS

jika kita menginginkan service jalan ketika reboot, maka kita bisa enable service tersebut via systemctl, jalankan perintah berikut

```bash
# enable service saat startup
sudo systemctl enable nginx

# disable service saat startup
sudo systemctl disable nginx
```

[![Screenshot 2023-10-13 at 04.40.26.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-04-40-26.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-04-40-26.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/s6Q2kWdmwek?si=M05_f7DIHFXILUg4" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 03. Install RDBMS MySQL Server di VPS Linux Ubuntu

### Install MySQL Server di Ubuntu 22.04

untuk install MySQL Server, login terlebih dulu dengan ssh, kemudian update repo

[![Screenshot 2023-10-13 at 05.41.55.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-41-55.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-41-55.png)

jalankan perintah berikut

```bash
sudo apt instal mysql-server
```

[![Screenshot 2023-10-13 at 05.42.32.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-42-32.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-42-32.png)

cek status, start, stop, restart service mysql, jalankan perintah berikut

```bash
# cek status mysql
sudo service mysql status

# restart mysql
sudo service mysql restart

# stop mysql
sudo service mysql stop

# start mysql
sudo service mysql start
```

[![Screenshot 2023-10-13 at 05.43.57.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-43-57.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-43-57.png)

### Login ke Database MySQL

untuk login ke mysql, jalankan perintah sudo mysql seperti berikut

```bash
# login mysql root pertama kali
sudo mysql

# login mysql root dengan password
sudo mysql -u root -p
```

[![Screenshot 2023-10-13 at 05.45.04.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-45-04.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-45-04.png)

### Merubah Password Root MySQL

untuk merubah password root mysql, jalankan perintah berikut

```mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Rahasia.123';
```

[![Screenshot 2023-10-13 at 05.46.36.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-46-36.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-46-36.png)

### Membuat User Baru MySQL

untuk membuat user baru di MySQL jalankan perintah berikut :

```mysql
CREATE USER 'naja'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Rahasia.123';
```

[![Screenshot 2023-10-13 at 05.48.15.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-48-15.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-48-15.png)

### Memberikan privileges full pada user MySQL biasa

untuk memberikan full privileges dan grant access pada user biasa, jalankan perintah berikut :

```mysql
GRANT ALL PRIVILEGES ON *.* TO 'naja'@'localhost' WITH GRANT OPTION;
```

### [![Screenshot 2023-10-13 at 05.49.36.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-49-36.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-49-36.png)

### Mengamankan celah dari MySQL

untuk mengamankan celah dari MySQL bisa dengan menggunakan script bash dari mysql\_secure\_installation, untuk menjalankan wizardnya ketik perintah berikut :

```bash
sudo mysql_secure_installation
```

[![Screenshot 2023-10-13 at 05.50.13.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-50-13.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-50-13.png)

pada settingan Validate Password Component bisa pilih "Y"

[![Screenshot 2023-10-13 at 05.51.32.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-51-32.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-51-32.png)

pada password validation policy bisa dipilih dari LOW/MEDIUM/STRONG

[![Screenshot 2023-10-13 at 05.51.52.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-51-52.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-51-52.png)

Pada bagian remove anonymous user, kita bisa menghapus dengan menekan "Y"

[![Screenshot 2023-10-13 at 05.52.04.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-52-04.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-52-04.png)

untuk Remove test database tekan "Y" pada instruksi Remove test database and access to it

[![Screenshot 2023-10-13 at 05.52.10.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-13-at-05-52-10.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-13-at-05-52-10.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/qjNSHqSI6tY?si=7azcXJPiz94B-aA_" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 04. Install Multiple PHP FastCGI Process Manager (PHP-FPM) di VPS Linux Ubuntu

### Prasyarat Install Multiple PHP

untuk install multiple php di ubuntu, login ssh ke vps

[![Screenshot 2023-10-19 at 01.44.57.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-44-57.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-44-57.png)

Install paket prasyarat untuk install multiple php

```bash
sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https
```

[![Screenshot 2023-10-19 at 01.46.00.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-46-00.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-46-00.png)

### Menambahkan Repository deb.sury.org ke vps

untuk menambahkan repository, kita bisa menggunakan perintah add-apt-repository sebagai berikut

```bash
sudo add-apt-repository ppa:ondrej/php
```

[![Screenshot 2023-10-19 at 01.46.52.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-46-52.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-46-52.png)

tekan Enter untuk melanjutkan

### Install PHP 7.4 di VPS Ubuntu

untuk install php7.4 jalankan perintah berikut kemudian tekan "Y" dan enter :

```bash
sudo apt-get install php7.4 php7.4-cli php7.4-fpm php7.4-gd php7.4-common \
php7.4-curl php7.4-mbstring php7.4-mysql php7.4-xml php7.4-zip php7.4-bz2 \
php7.4-intl php7.4-gmp php7.4-apcu php7.4-imagick php7.4-json php7.4-memcached
```

[![Screenshot 2023-10-19 at 01.48.26.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-48-26.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-48-26.png)

### Start, Status dan Stop Service php7.4-fpm

untuk melakukan perintah start, cek status dan stop, jalankan perintah berikut ini :

```bash
# start service
sudo systemctl start php7.4-fpm

# status service
sudo systemctl status php7.4-fpm

# stop service
sudo systemctl stop php7.4-fpm
```

[![Screenshot 2023-10-19 at 01.51.10.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-51-10.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-51-10.png)

setelah start service php7.4-fpm, cek apakah php sudah jalan atau tidak dengan "php -v"

[![Screenshot 2023-10-19 at 01.51.30.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-51-30.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-51-30.png)

### Install PHP 8.1 di VPS Ubuntu

untuk install php8.1 jalankan perintah berikut kemudian tekan "Y" dan enter :

```bash
sudo apt-get install php8.1 php8.1-cli php8.1-fpm php8.1-gd php8.1-common \
php8.1-curl php8.1-mbstring php8.1-mysql php8.1-xml php8.1-zip php8.1-bz2 \
php8.1-intl php8.1-gmp php8.1-apcu php8.1-imagick php8.1-memcached
```

[![Screenshot 2023-10-19 at 01.55.40.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-55-40.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-55-40.png)

kemudian restart service lain yang diperlukan klik ok

[![Screenshot 2023-10-19 at 01.57.02.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-57-02.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-57-02.png)

### Start, Status dan Stop Service php8.1-fpm

untuk melakukan perintah start, cek status dan stop, jalankan perintah berikut ini :

```bash
# start service
sudo systemctl start php8.1-fpm

# status service
sudo systemctl status php8.1-fpm

# stop service
sudo systemctl stop php8.1-fpm
```

[![Screenshot 2023-10-19 at 02.20.41.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-20-41.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-20-41.png)

### Mengganti Default PHP Versi CLI Linux Ubuntu

untuk mengganti versi php default yang digunakan pada cli, jalankan perintah berikut :

```bash
# cek versi php saat ini
php -v

# mengganti versi default php
sudo update-alternatives --config php

```

pilih versi php sesuai nomor pada selection dan tekan enter

[![Screenshot 2023-10-19 at 01.58.12.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-01-58-12.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-01-58-12.png)

### Menggunakan Versi PHP berbeda dalam Script

untuk menggunakan versi php berbeda dalam script php, kita bisa memanggil full path dari php kita seperti berikut ini :

```bash
# menjalankan php 7.4 dengan cek versi php
/usr/bin/php7.4 -v

#menjalankan php 8.1 dengan cek versi php
/usr/bin/php8.1 -v
```

[![Screenshot 2023-10-19 at 02.00.54.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-00-54.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-00-54.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/hryk8ZIXCXg?si=q5Ar7EVeQ4m1U2nA" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 05. Pointing Domain dan Sub Domain ke VPS Linux Ubuntu dan Membuat Nginx VirtualHost

### Pointing Domain DNS A Record ke IP VPS

Login ke DNS Manajemen domain anda, jika di cloudflare login ke cloudflare dan klik menu records, tambahkan domain dan subdomain dengan record "A" dan matikan dns proxy untuk langsung mengarahkan ke VPS

[![Screenshot 2023-10-19 at 02.30.09.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/BcGscreenshot-2023-10-19-at-02-30-09.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/BcGscreenshot-2023-10-19-at-02-30-09.png)

lakukan pengecekan berkala setelah merubah record pada DNS, dengan perintah ping seperti berikut ini :

[![Screenshot 2023-10-19 at 02.31.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-31-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-31-05.png)

Jika ip sudah mengarah ke VPS, coba akses domain secara langsung, jika web server default aktif, akan tampil seperti berikut ini

[![Screenshot 2023-10-19 at 02.31.17.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-31-17.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-31-17.png)

### Membuat Nginx VirtualHost Idrive.id

untuk membuat nginx virtualhost, login ssh terlebih dahulu ke VPS

[![Screenshot 2023-10-19 at 02.31.42.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-31-42.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-31-42.png)

kemudian pindah ke direktori sites-available di nginx dengan perintah

```bash
cd /etc/nginx/sites-available
```

[![Screenshot 2023-10-19 at 02.32.18.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-32-18.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-32-18.png)

copy file virtualhost default nginx ke idrive.id dengan perintah berikut :

```bash
sudo cp default idrive.id
```

sesuaikan nama virtualhost dengan nama domain anda

[![Screenshot 2023-10-19 at 02.33.25.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-33-25.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-33-25.png)

dan edit konfigurasi virtualhost dengan perintah nano

[![Screenshot 2023-10-19 at 02.33.39.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-33-39.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-33-39.png)

sesuaikan konfigurasi seperti berikut ini :

```nginx
server {
        listen 80;
        listen [::]:80;

        root /var/www/idrive;

        index index.html index.php index.htm index.nginx-debian.html;

        server_name idrive.id www.idrive.id;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }
}
```

simpan dan exit editor

[![Screenshot 2023-10-19 at 02.36.59.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-36-59.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-36-59.png)

kemudian buat symlink virtualhost idrive.id ke sites-enabled agar virtualhost aktif dengan perintah berikut :

```bash
# buat symlink
sudo ln -s /etc/nginx/sites-available/idrive.id /etc/nginx/sites-enabled/

# cek hasil symlink
ls -lsha /etc/nginx/sites-enabled/
```

setelah symlink dibuat, cek hasilnya dan coba cek nginx config apakah ada pesan kesalahan atau tidak

[![Screenshot 2023-10-19 at 02.37.37.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-37-37.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-37-37.png)

setelah symlink sukses, cek nginx config untuk virtualhost untuk memastikan tidak ada config yang salah

```bash
# cek nginx config
sudo nginx -t
```

[![Screenshot 2023-10-19 at 02.37.50.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-37-50.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-37-50.png)

Buat folder sesuai dengan root direktori yang kita setting pada nginx virtualhost, buat folder idrive pada folder /var/www

```bash
# pindah ke direktori 
cd /var/www

# buat folder idrive
sudo mkdir idrive
```

[![Screenshot 2023-10-19 at 02.38.09.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-38-09.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-38-09.png)

### Membuat Nginx VirtualHost jurnal.idrive.id

untuk membuat virtualhost subdomain jurnal.idrive.id, pindah ke direktori sites-available dan copy config dari virtualhost idrive dengan perintah berikut :

```bash
# pindah ke sites available nginx
cd /etc/nginx/sites-available/

# copy idrive.id virtualhost ke virtualhost jurnal.idrive.id
sudo cp idrive.id jurnal.idrive.id

# edit virtualhost
sudo nano jurnal.idrive.id
```

[![Screenshot 2023-10-19 at 02.41.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-41-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-41-05.png)

edit dengan config berikut :

```nginx
server {
        listen 80;
        listen [::]:80;

        root /var/www/jurnal;

        index index.html index.php index.htm index.nginx-debian.html;

        server_name jurnal.idrive.id www.jurnal.idrive.id;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        }
}
```

kemudian buat symlink seperti sebelumnya ke sites-enabled

```bash
sudo ln -s /etc/nginx/sites-available/jurnal.idrive.id /etc/nginx/sites-enabled/
```

[![Screenshot 2023-10-19 at 02.41.58.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-41-58.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-41-58.png)

jalankan kembali nginx config test

```bash
sudo nginx -t
```

[![Screenshot 2023-10-19 at 02.42.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-42-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-42-05.png)

### Idrive.id dengan PHP 7.4

akses domain idrive.id akan menampilkan informasi web menggunakan php7.4-fpm sesuai dengan nginx config

[![Screenshot 2023-10-19 at 02.43.14.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-43-14.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-43-14.png)

### Jurnal.idrive.id dengan PHP 8.1

akses sub domain jurnal.idrive.id akan menampilkan informasi web menggunakan php8.1-fpm sesuai dengan nginx config

[![Screenshot 2023-10-19 at 02.44.16.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-02-44-16.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-02-44-16.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/98uZ7zjpG7Y?si=mgpbvy9umVNmCFZ-" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 06. Konfigurasi Nginx Web Server untuk menggunakan PHP-FPM

### Struktur Folder Nginx

login ke vps dengan ssh

[![Screenshot 2023-10-19 at 03.17.38.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-17-38.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-17-38.png)

pada folder sites-available adalah kumpulan nginx virtualhost config, pada sites-enabled adalah config yang diaktifkan, untuk menghapus file virtualhost jika tidak digunakan cukup mengahapus symlink pada virtualhost di direktori sites-enabled

[![Screenshot 2023-10-19 at 03.19.43.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-19-43.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-19-43.png)

### Konfigurasi Nginx dengan Pastcgi\_pass TCP

untuk merubah konfigurasi dari unix socket ke tcp, kita hanya perlu merubah pastcgi\_pass parameter seperi berikut ini

[![Screenshot 2023-10-19 at 03.25.54.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-25-54.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-25-54.png)

dan menyesuaikan php pool untuk listen pada tcp

[![Screenshot 2023-10-19 at 03.26.15.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-26-15.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-26-15.png)

### Menambahkan Access dan Error Log Nginx

untuk menambahkan access log dan error log per virtualhost, tambahkan config access\_log dan error\_log pada setiap virtualhost dengan lokasi penyimpanan yang diinginkan seperti berikut ini :

```nginx
server {
        listen 80;
        listen [::]:80;

        root /var/www/idrive;

        index index.html index.php index.htm index.nginx-debian.html;

        access_log /var/log/nginx/idrive.id.log;
        error_log /var/log/nginx/idrive.id.error.log;

        server_name idrive.id www.idrive.id;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        }
}
```

[![Screenshot 2023-10-19 at 03.27.25.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-27-25.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-27-25.png)

cek access\_log dengan perintah tail untuk melihat perubahan secara langsung

[![Screenshot 2023-10-19 at 03.32.20.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-32-20.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-32-20.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/O6_yVdL122U?si=6JZys02CWm414a1C" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 07. Generate SSL Free Let's Encrypt Nginx dengan Certbot

### Update Snap Core dan Refresh Database

Untuk install core snap, login terlebih dahulu ke vps

[![Screenshot 2023-10-19 at 03.46.28.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-46-28.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-46-28.png)

kemudian jalankan perintah berikut :

```bash
sudo snap install core; sudo snap refresh core
```

[![Screenshot 2023-10-19 at 03.48.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-48-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-48-05.png)

tunggu proses selesai seperti berikut ini

[![Screenshot 2023-10-19 at 03.48.56.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-48-56.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-48-56.png)

### Remove Certbot Lama dengan APT

setelah snap certbot terinstall, remove certbot lama yang terinstall di apt dengan perintah

```bash
sudo apt remove certbot
```

[![Screenshot 2023-10-19 at 03.49.12.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-49-12.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-49-12.png)

### Install Certbot dengan Ubuntu Snap

untuk install certbot via snap jalankan perintah berikut

```bash
sudo snap install --classic certbot
```

[![Screenshot 2023-10-19 at 03.50.22.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-50-22.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-50-22.png)

tunggu hingga proses selesai dan lakukan symlink certbot di folder snap ke usr dengan perintah berikut :

```bash
sudo ln -s /snap/bin/certbot /usr/bin/certbot
```

[![Screenshot 2023-10-19 at 03.51.18.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-51-18.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-51-18.png)

### Install SSL dengan Certbot Nginx

untuk install ssl let's encrypt dengan certbot di nginx, jalankan perintah berikut :

```bash
sudo certbot --nginx -d idrive.id -d www.idrive.id -d jurnal.idrive.id -d www.jurnal.idrive.id
```

[![Screenshot 2023-10-19 at 03.53.05.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-53-05.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-53-05.png)

lakukan pengecekan pada nginx virtualhost, ada perubahan config seperti berikut ini managed by certbot

[![Screenshot 2023-10-19 at 03.54.08.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-54-08.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-54-08.png)

### Cek Snap Certbot Renew

untuk melakukan pengecekan apakah certbot autorenew berjalan dengan baik jalankan perintah berikut :

```bash
sudo systemctl status snap.certbot.renew.service
```

[![Screenshot 2023-10-19 at 03.55.01.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-55-01.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-55-01.png)

### Testing Renew SSL Certbot Dry-Run

anda dapat melakukan testing renew sertifikat ssl anda dengan perintah berikut untuk simulasi :

```bash
sudo certbot renew --dry-run
```

[![Screenshot 2023-10-19 at 03.56.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-03-56-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-03-56-07.png)

jika sudah terinstall, coba akses domain apakah sudah diarahkan ke https seperti gambar berikut

[![Screenshot 2023-10-19 at 04.14.43.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-19-at-04-14-43.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-19-at-04-14-43.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/kAwuD3tcz_w?si=bvdtfmbkGEr6gq9w" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 08. Multiple versi PHP-FPM pada Nginx Virtual Host

### Login VPS dan Lihat Nginx Config

Login ke vps dengan ssh menggunakan ssh public key

[![Screenshot 2023-10-31 at 00.30.11.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-30-11.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-30-11.png)

kemudian kita lihat configurasi nginx kita sebelumnya

```bash
cat /etc/nginx/sites-enabled/idrive.id
```

[![Screenshot 2023-10-31 at 00.30.58.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-30-58.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-30-58.png)

### Membuat Folder untuk Sub Directory Backend

untuk membuat root directory untuk sub directory pada domain, kita buat terlebih dahulu folder dan file index.php untuk testing, jalankan perintah berikut

```bash
# pindah direktory
cd /var/www/

# membuat folder baru 
sudo mkdir backend
```

[![Screenshot 2023-10-31 at 00.32.02.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-32-02.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-32-02.png)

buat file `index.php` dengan perintah `sudo nano index.php` kemudian enter dan isi dengan kode berikut :

```bash
<?php

echo phpinfo();
```

[![Screenshot 2023-10-31 at 00.32.43.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-32-43.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-32-43.png)

### Membuat Location Backend di Nginx VirtualHost 

edit file nginx virtualhost dengan pindah ke directory nginx confignya dengan perintah `cd /etc/nginx/sites-available/` dan kemudian edit file `idrive.id` dengan perintah `sudo nano idrive.id` kemudian enter

[![Screenshot 2023-10-31 at 00.34.23.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-34-23.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-34-23.png)

tambahkan konfigurasi berikut

```nginx
        location /backend {
             root /var/www/;
             try_files $uri $uri/ =404;

             location ~ ^/backend/(.+\.php)$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
             }
        }
```

[![Screenshot 2023-10-31 at 00.38.56.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-38-56.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-38-56.png)

setelah konfigurasi disimpan, testing konfigurasi nginx dengan perintah `sudo nginx -t`, jika tidak ada error, restart service nginx dengan perintah `sudo service nginx restart` kemudian enter

[![Screenshot 2023-10-31 at 00.39.25.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-00-39-25.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-00-39-25.png)

Hasil Multiple PHP-FPM satu Nginx VirtualHost

akses website `<a href="https://idrive.id">https://idrive.id</a>` akan diload dengan php versi 7.4

[![Screenshot 2023-10-31 at 01.00.34.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-00-34.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-00-34.png)

dan akses website `<a href="https://idrive.id">https://idrive.id/backend</a>` akan diload dengan php versi 8.1

[![Screenshot 2023-10-31 at 01.00.40.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-00-40.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-00-40.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/Pbev5Uo40pc?si=FKQOCpDwH8qgiSo7" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 09. Optimalisasi Nginx Web Server dan PHP-FPM

### Setting Nginx Worker

untuk setting nginx worker, login ke vps terlebih dahulu dengan ssh public key / password

[![Screenshot 2023-10-31 at 01.35.44.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-35-44.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-35-44.png)

kemudian edit nginx config dengan perintah `sudo nano /etc/nginx/nginx.conf` kita bisa menyesuaikan konfigurasi `worker_prosesses auto;` agar menyesuaikan dengan core vps dan `worker_connections 1024;` untuk setiap koneksi yang dapat di handle worker process

[![Screenshot 2023-10-31 at 01.36.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-36-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-36-35.png)

### Setting Max Upload dan Timeout di Nginx VirtualHost

untuk setting max upload dan timeout di nginx, edit virtualhost yang diinginkan dengan perintah berikut :

```bash
# sesuaikan nama virtualhost anda
sudo nano /etc/nginx/sites-enabled/idrive.id
```

[![Screenshot 2023-10-31 at 01.39.07.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-39-07.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-39-07.png)

kemudian tambahkan configurasi berikut :

```nginx
# max client uploud
client_max_body_size 128M;

# max client timeout dan proxy timeout
client_body_timeout 360;
proxy_read_timeout 360;
proxy_connect_timeout 360;
proxy_send_timeout 360;
```

[![Screenshot 2023-10-31 at 01.39.34.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-39-34.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-39-34.png)

Test konfigurasi nginx dengan perintah `sudo nginx -t` dan restart nginx service dengan perintah `sudo service nginx restart`

### Setting Memory Limit, Max Upload dan Timeout di PHP-FPM

untuk setting memory limit, max upload dan timeout di php, edit file `php.ini` lokasinya tergantung system operation yang digunakan, misal kita edit dengan lokasi berikut `sudo nano /etc/php/7.4/fpm/php.ini` edit file konfigurasi berikut :

```bash
# memory limit php process
memory_limit = 128M

# maksimal script parsing request
max_input_time = 360

# maksimal php execution time
max_execution_time = 360

# maksimal upload file
upload_max_filesize = 128M

# maksimal php upload single request
max_file_upload = 20

# maksimal post data php
post_max_size = 128M
```

[![Screenshot 2023-10-31 at 01.42.41.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-42-41.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-42-41.png)

### Edit &amp; Optimalkan PHP Pool FPM PHP Process Manager

untuk optimalkan php pool pada php-fpm, kita bisa menambahkan atau merubah file di `sudo nano /etc/php/7.4/fpm/pool.d/www.conf`

[![Screenshot 2023-10-31 at 01.49.15.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-49-15.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-49-15.png)

kita bisa menyesuaikan sesuai dengan kapasitas ram dan cpu dari vps kita, dengan contoh configurasi berikut :

```bash
# maksimal proses turunan php pm
pm.max_children = 10

# default start proses turunan php pm
pm.start_servers = 5

# minimal spare server proses turunan php pm
pm.min_spare_servers = 3

# maksimal spare server proses turunan php pm
pm.max_spare_servers = 5

# php pm idle timeout 
pm.process_idle_timeout = 10s;
```

untuk melakukan pengecekan berapa proses yang jalan dan berapa penggunaan ram per proses dapat jalankan dengan perintah berikut :

```bash
# cek proses php-fpm yang jalan
ps -ylC php7.4-fpm --sort:rss

# cek rata-rata penggunaan memory proses php-fpm
ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | grep php-fpm
```

[![Screenshot 2023-10-31 at 01.50.34.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-50-34.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-50-34.png)

setelah menyesuaikan perubahan pada pool php di `/etc/php/7.4/fpm/pool.d/www.conf` restart php-fpm dan nginx dengan perintah `sudo service php7.4-fpm restart` dan lakukan pengecekan kembali jumlah service php process manager dengan perintah sebelumnya

[![Screenshot 2023-10-31 at 01.52.50.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-01-52-50.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-01-52-50.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/Jav7YNS03RM?si=q_DcBWXANwG6R5XE" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 10. Install dan Konfigurasi PHPMyAdmin dengan Nginx Web Server

### Install PHPMyAdmin Linux Ubuntu

login terlebih dahulu ke vps

[![Screenshot 2023-10-31 at 02.56.59.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-56-59.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-56-59.png)

kemudian jalankan perintah `sudo apt install phpmyadmin` dan enter

[![Screenshot 2023-10-31 at 02.57.26.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-57-26.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-57-26.png)

pada popup configure database for phpmyadmin with dbconfig-common pilih yes

[![Screenshot 2023-10-31 at 02.57.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-57-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-57-35.png)

kemudian MySQL application password for phpmyadmin biarkan kosong dan klik tab kemudian pilih ok klik spasi

[![Screenshot 2023-10-31 at 02.57.45.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-57-45.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-57-45.png)

pada web server to reconfigure automatically kosongkan saja klik tab dan ok

[![Screenshot 2023-10-31 at 02.57.58.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-57-58.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-57-58.png)

jika terjadi error seperti ini, karena settingan password policy saat install mysql, klik oke terlebih dahulu

[![Screenshot 2023-10-31 at 02.58.08.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-58-08.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-58-08.png)

dan pilih abort

[![Screenshot 2023-10-31 at 02.58.29.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-58-29.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-58-29.png)

### Uninstall Component Validate Password

jika proses installasi phpmyadmin gagal seperti pada langkah sebelumnya, kita perlu uninstall validate password, login ke mysql dengan perintah `sudo mysql -uroot -p` kemudian jalankan perintah sql berikut :

```sql
UNINSTALL COMPONENT "file://component_validate_password";
```

[![Screenshot 2023-10-31 at 02.59.32.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-02-59-32.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-02-59-32.png)

kemudian ketik perintah `exit` untuk keluar mysql

[![Screenshot 2023-10-31 at 03.00.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-00-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-00-35.png)

setelah ini install kembali phpmyadmin seperti langkah diatas dengan perintah `sudo apt install phpmyadmin`

### Install Component Validate Password

setelah phpmyadmin terinstall, aktifkan kembali component\_validate\_password dengan login kembali ke mysql `sudo mysql -uroot -p` dan jalankan perintah berikut :

```sql
INSTALL COMPONENT "file://component_validate_password";
```

[![Screenshot 2023-10-31 at 03.00.35.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/I9dscreenshot-2023-10-31-at-03-00-35.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/I9dscreenshot-2023-10-31-at-03-00-35.png)

### Install PHP 8.2 untuk PHPMyAdmin

Karena PHPMyAdmin melakukan install php 8.2 sebagai dependency, namun untuk apache, kita install php8.2-fpm untuk nginx dengan command berikut

```bash
sudo apt-get install php8.2 php8.2-cli php8.2-fpm php8.2-gd php8.2-common \
php8.2-curl php8.2-mbstring php8.2-mysql php8.2-xml php8.2-zip php8.2-bz2 \
php8.2-intl php8.2-gmp php8.2-apcu php8.2-imagick php8.2-memcached
```

[![Screenshot 2023-10-31 at 03.36.33.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-36-33.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-36-33.png)

### Membuat Snippet PHPMyAdmin Nginx

setelah PHPMyAdmin Terinstall, kita buat snippets untuk phpmyadmin di nginx, jalankan perintah pindah directory `cd /etc/nginx` dan buat file dengan nano, untuk membuat file snippets nginx `sudo nano snippets/phpmyadmin.conf`

[![Screenshot 2023-10-31 at 03.03.47.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-03-47.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-03-47.png)

pastekan snippet phpmyadmin berikut :

```nginx
location /phpmyadmin {
    root /usr/share/;
    index index.php index.html index.htm;
    location ~ ^/phpmyadmin/(.+\.php)$ {
        try_files $uri =404;
        root /usr/share/;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }

    location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
        root /usr/share/;
    }
}
```

[![Screenshot 2023-10-31 at 03.04.30.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-04-30.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-04-30.png)

### Include Snippets di VirtualHost Nginx

setelah snippets dibuat, includekan snippets tersebut pada virtualhost yang diinginkan, misal di virtualhost idrive.id, jalankan perintah edit `sudo nano /etc/nginx/sites-available/idrive.id` kemudian tambahkan baris konfigurasi `include snippets/phpmyadmin.conf`

[![Screenshot 2023-10-31 at 03.05.37.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-05-37.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-05-37.png)

simpan dan cek configurasi nginx `sudo nginx -t` dan restart dengan perintah `sudo service nginx restart`

[![Screenshot 2023-10-31 at 03.05.55.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-05-55.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-05-55.png)

### Login dengan PHPMyAdmin

setelah snippets ditambahkan, coba akses domain dengan subdirectory phpmyadmin `https://idrive.id/phpmyadmin`

[![Screenshot 2023-10-31 at 03.09.01.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-09-01.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-09-01.png)

Test login dengan username dan password mysql

[![Screenshot 2023-10-31 at 03.22.43.png](https://book.najamudinridha.com/uploads/images/gallery/2023-10/scaled-1680-/screenshot-2023-10-31-at-03-22-43.png)](https://book.najamudinridha.com/uploads/images/gallery/2023-10/screenshot-2023-10-31-at-03-22-43.png)

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" src="https://www.youtube.com/embed/OYvjpwgPhVk?si=mclmWc5mU_OA1h7b" style="width: 100%; aspect-ratio: 16/10;" title="YouTube video player"></iframe>

# 11. Install CMS Wordpress di Hosting VPS Linux Ubuntu



# 12. Install CMS Open Journal System (OJS) di Hosting VPS Linux Ubuntu



# 13. Install dan Konfigurasi ConfigServer Security and Firewall (CSF)



# 14. Optimalisasi RDBMS MySQL dengan MySQLTuner di VPS Linux Ubuntu



# 15. Backup dan Restore database dengan MySQLDump di VPS Linux Ubuntu



# 16. Mengamankan SSH Login, Mengganti Port Default dan Disable Login Password



# 17. Install dan Scan Backdoor dan Rootkit dengan RKHunter di VPS Linux Ubuntu



# 18. Install dan Scan Virus dengan Anti Virus ClamAV di VPS Linux Ubuntu



# 19. Install dan Konfigurasi Sendmail untuk PHP Script di VPS Linux Ubuntu



# 20. Menambahkan Swap Partition pada VPS Linux Ubuntu



# 21. Install dan Konfigurasi TightVNC Server dan TightVNC Client VPS Linux Ubuntu



# 22. Install dan Konfigurasi RClone Untuk Backup Data ke Berbagai Layanan Cloud



# 23. Cara Menggunakan RClone untuk Backup Data ke Berbagai Layanan Cloud



# 24. Backup Website dan Database Otomatis Dengan Cronjob dan Rclone VPS Linux Ubuntu