Cara Install Nginx untuk Multiple Website di Vultr dengan Centos 8

Beberapa hari yang lalu saya melakukan migrasi blog dari yang semula di shared hosting, saya pindahkan ke VPS di Vultr.

Tulisan saya kali ini akan membahas mengenai cara install nginx untuk multiple website di Vultr.

Untuk mengikuti tutorial ini, setidaknya kamu harus punya pengalaman menggunakan Linux ya. Jika belum, jangan khawatir karena dengan membaca tulisan ini, kamu bisa mendapatkan wawasan lebih luas tentang server dan Linux.

Apa itu VPS?

VPS adalah singkatan dari Virtual Private Server. Berbeda dengan hosting yang biasa, VPS memiliki kelebihan tersendiri.

Jika kita menggunakan VPS, maka resource server yang kita sewa adalah pure digunakan untuk kita sendiri. Hal ini berbeda dengan web hosting biasa yang merupakan shared hosting.

Ketika kita menyewa web hosting, sebenarnya server hosting tersebut dipakai beramai-ramai bersamaan dengan banyak website lain. Hal ini akan berpengaruh pada performa yang akan kita dapatkan.

Jika kamu merasa website-mu sudah mulai melambat seiring dengan bertambahnya pengunjung, maka solusinya adalah dengan menggunakan VPS.

Kelebihan Menggunakan VPS

Dari penjelasan singkat di atas, tentunya sudah terlihat kan kelebihan dari menggunakan VPS.

Lalu apa saja kelebihan lainnya? Berikut ini adalah beberapa kelebihan dari menggunakan VPS

  • Uptime yang sangat tinggi.
  • Bebas memilih resource CPU/Disk/Memory.
  • Backup otomatis.
  • Adanya fitur snapshot.
  • Bebas memilih lokasi server.
  • Instalasi (provisioning) server yang sangat cepat, hanya dalam hitungan menit.
  • Mendapatkan akses root dari server .
  • Bayar dari apa yang kita gunakan (pay as you use).

Kekurangan Menggunakan VPS

Selain kelebihan, tentunya selalu ada kekurangan yang harus menjadi perhatian kita semua.

Berikut ini adalah kekurangan menggunakan VPS.

  • Membutuhkan kemampuan/skill yang lebih dalam mengelola VPS.
  • Biaya yang relatif lebih mahal.

Sebenarnya, kekurangan ini bisa dengan mudah diatasi jika kamu punya budget berlebih.

Apa itu Vultr?

Vultr adalah salah satu penyedia infrastruktur cloud ternama yang bisa menjadi salah satu opsi kita untuk menyewa VPS.

Vultr sendiri menyediakan beberapa layanan, di antaranya adalah:

  • Cloud Compute
  • Bare Metal
  • Block Storage
  • Dedicated Cloud

Tulisan saya kali ini akan banyak membahas tentang Cloud Compute.

Untuk mengikuti tutorial ini, kita harus membuat akun dulu di Vultr ya. Klik aja link ini untuk Sign Up.

Apa itu Nginx?

Nginx adalah salah satu web server yang terkenal karena memiliki performa yang bagus. Nginx sebenarnya tidak hanya memiliki kemampuan sebagai web server, melainkan juga bisa sebagai load balancing, caching, reverse proxy, dan media streaming.

Web server lain yang seringkali digunakan untuk website adalah Apache. Saya akan membahasnya di lain waktu ya.

Cara Install Nginx untuk Multiple Website dan Domain di Vultr

Baik, sekarang saya akan lanjut ke inti tulisan ini, yaitu tentang cara install Nginx untuk multiple website di Vultr dengan Centos 8.

Selamat mengikuti!

Membuat Instance Baru di Vultr

Untuk membuat instance baru di Vultr tidak sulit. Setelah memiliki akun dan login, di menu Products, pada bagian kanan ada tombol plus ( + ) berwarna biru.

Arahkan mouse pada tombol tersebut, kemudian klik Deploy New Instance. Setelah itu, kamu bisa memilih resource yang kamu butuhkan.

Di sini saya menggunakan pilihan sebagai berikut:

  • Choose Server: Cloud Compute
  • Server Location: Singapore
  • Server Type: 64bit OS, Centos 8
  • Server Size: 55GB / 1 CPU / 2048 Memory

Setelah itu, Klik Deploy Now. Tunggu beberapa saat sampai server ready.

Selanjutnya, saya asumsikan kamu sudah punya instance baru di Vultr ya. Pada tutorial ini saya menggunakan Centos 8 dengan resource 1 CPU dan RAM 2GB.

Apa yang Akan Kita Lakukan?

Sesuai judul dari tulisan ini, kita akan membuat dua buah website yang akan dihandle oleh Nginx.

Untuk memudahkan tutorial ini, saya beri nama website tersebut adalah website1.com dan website2.com

Hasil akhir dari tutorial ini adalah, kamu dapat mengakses kedua website tersebut.

Saya mengasumsikan website1.com dan website2.com sudah di setting nameserver nya.

Setting nameserver dilakukan supaya domain yang kita punya sudah mengarah ke server yang akan kita install.

Jika kamu kesulitan melakukan konfigurasi nameserver. Silahkan baca tulisan saya tentang setting nameserver di sini:

Cara Setting Nameserver di Hawkhost

Setup Nginx dengan Multiple Website/Domain

1. Login ke server menggunakan SSH

Pertama-tama kamu harus login dulu ke VPS yang telah kamu bikin menggunakan SSH. Informasi akses dapat kamu lihat di Vultr.

2. Install Nginx dan Jalankan Service nya

Install Nginx dengan menggunakan command/perintah berikut:

dnf install nginx

Tunggu beberapa saat, setelah selesai, kita harus menyalakan service dari Nginx. Jalankan perintah berikut:

systemctl start nginx

Supaya kita tidak perlu start service setiap kali restart, jalankan perintah di bawah ini:

systemctl enable nginx

3. Setting Firewall untuk HTTP dan HTTPS

Karena website kita akan diakses dari luar server, maka kita perlu melakukan konfigurasi firewall. Caranya, jalankan beberapa baris perintah berikut:

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

4. Testing Halaman Default Web Nginx

Setelah menjalankan langkah-langkah di atas, seharusnya kamu sudah bisa melihat halaman berikut ketika mengakses IP VPS mu di browser.

Setelah halaman Welcome to nginx terlihat, kita akan mulai melakukan konfigurasi website untuk Nginx.

5. Membuat User Baru untuk Masing-masing Website

Pertama-tama kita akan membuat user baru untuk masing-masing website. Ini penting dilakukan supaya masing-masing website berjalan dengan user yang berbeda.

Untuk membuat user, gunakan perintah sebagai berikut:

useradd website1
useradd website2

Jika kamu perhatikan, maka akan muncul direktori baru yaitu di /home/website1 dan /home/website2

Kedua user ini, tidak perlu kita set password, kecuali kalau kita akan membuat akses FTP nya.

6. Menyiapkan public_html untuk Website

Selanjutnya, kita akan membuat folder public_html untuk kedua website tersebut. Folder ini ditujukan untuk menaruh source code website yang kita punya.

Jalankan perintah berikut untuk membuat folder public_html

mkdir -p /home/website1/public_html
mkdir -p /home/website2/public_html

Jangan lupa untuk mengubah owner dari folder tersebut sesuai dengan pemilik nya masing-masing.

chown website1:website1 /home/website1/public_html
chown website2:website2 /home/website2/public_html

7. Instalasi PHP dan PHP-FPM

Pada tahap ini kita akan menginstall PHP dan PHP-FPM. Untuk menginstall nya, gunakan perintah berikut ini:

dnf install php php-fpm php-gd php-mysqlnd

Setelah itu, jangan lupa untuk start service dari PHP-FPM. Termasuk juga enable autostart setelah booting server

systemctl start php-fpm
systemctl enable php-fpm

8. Konfigurasi Pool PHP-FPM

Secara default, PHP-FPM memiliki pool yang running dengan nama www. Kita akan membuat pool baru dengan nama sesuai website masing-masing.

vi /etc/php-fpm.d/website1.conf 

Kemudian isikan konfigurasi seperti di bawah ini:

[website1]
user = website1
group = website1
listen = /run/php-fpm/website1.sock
listen.owner = website1
listen.group = website1
listen.allowed_clients = 127.0.0.1
listen.mode = 0666

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /

Ulangi langkah yang sama untuk website2.conf

Setelah itu, kita restart service PHP-FPM dengan perintah:

systemctl restart php-fpm

Terakhir untuk PHP-FPM, kita cek status nya, pastikan outputnya mirip seperti di bawah ini.

[root@fahmialazhar ~]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-05-30 09:38:05 WIB; 6 days ago
Main PID: 8369 (php-fpm)
Status: "Processes active: 0, idle: 14, Requests: 64205, slow: 0, Traffic: 0.1req/sec"
Tasks: 15 (limit: 11519)
Memory: 367.3M
CGroup: /system.slice/php-fpm.service
├─ 1522 php-fpm: pool website1
├─ 1586 php-fpm: pool website1
├─ 3981 php-fpm: pool website1
├─ 8369 php-fpm: master process (/etc/php-fpm.conf)
├─ 8377 php-fpm: pool www
├─ 8378 php-fpm: pool www
├─ 8379 php-fpm: pool www
├─ 8380 php-fpm: pool www
├─ 8381 php-fpm: pool www
├─14444 php-fpm: pool website2
├─14446 php-fpm: pool website2

9. Konfigurasi Nginx untuk Masing-masing Website

Lanjut ke tahap selanjutnya, kita akan melakukan konfigurasi Nginx. Seperti pada PHP-FPM, kita juga akan membuat file konfigurasi khusus untuk masing-masing website.

Buat file konfigurasi baru:

vim /etc/nginx/conf.d/website1.conf

Isikan konfigurasi seperti di bawah ini:

server {
    listen 80;
    root /home/website1/public_html;
    index index.php index.html index.htm;

    server_name website1.com;

	 client_max_body_size 100M;

    location = /favicon.ico {
		log_not_found off;
		access_log off;
	}

	location = /robots.txt {
		allow all;
		log_not_found off;
		access_log off;
	}

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

	location ~ \.php$ {
		include fastcgi_params;
		fastcgi_intercept_errors on;
		fastcgi_pass unix:/run/php-fpm/website1.sock;
		fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
		expires max;
		log_not_found off;
	}
}

Ulangi hal yang sama untuk website2.conf

Setelah itu, kamu bisa test konfigurasi nginx dengan mengetikkan perintah:

nginx -t

Jika output nya seperti di bawah ini, maka file konfigurasi tersebut sudah benar (tidak ada typo)

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Restart Nginx dengan perintah:

systemctl restart nginx

Untuk mengecek status Nginx, kamu bisa mengetikkan perintah:

systemctl status nginx

Jika output yang kamu dapatkan adalah “running“, seperti di bawah ini, maka langkah yang kamu lakukan sudah benar.

[root@fahmialazhar ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/nginx.service.d
           └─php-fpm.conf
   Active: active (running) since Sat 2020-05-30 09:38:05 WIB; 6 days ago
  Process: 8360 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 8357 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 8355 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 8362 (nginx)
    Tasks: 2 (limit: 11519)
   Memory: 134.2M
   CGroup: /system.slice/nginx.service
           ├─2614 nginx: worker process
           └─8362 nginx: master process /usr/sbin/nginx

10. Testing Website

Setelah menyelesaikan konfigurasi di atas, hal terakhir yang kamu lakukan adalah melakukan pengujian / testing.

Kamu bisa membuat file script PHP sederhana, misalnya:

<?php
echo 'Website 1';
?>

Simpan di lokasi /home/website1/public_html/index.php untuk website1.com

Pastikan file ownernya sudah diubah menjadi website1 ya (karena kamu login menggunakan root).

Lakukan juga untuk website2.com

Jika sudah, cobalah akses website1.com dan website2.com dari browser mu.

test website dengan nginx

Jika yang tampil seperti diatas, maka selamat! Kamu berhasil melakukan install Nginx untuk multiple website.

Install Certificate HTTPS di Nginx

Setelah berhasil melakukan konfigurasi Nginx di atas, tentunya masih ada yang kurang karena website ini belum memiliki sertifikat HTTPS / SSL.

Di tahun 2020 ini, HTTPS adalah hal yang wajib dipasang. Oleh karena itu selanjutnya kita akan menginstall certificate HTTPS di Nginx.

Pada tutorial ini, saya menggunakan certificate dari Let’s Encrypt. Selain gratis, untuk memasang certificate ini juga dimudahkan dengan adanya Certbot Client.

Certbot adalah sebuah aplikasi yang memudahkan kita untuk menginstall Let’s Encrypt. Untuk menginstallnya terlebih dahulu jalankan perintah berikut:

curl -O https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin
chmod 755 /usr/local/bin/certbot-auto

Untuk menjalankan certbot, gunakan perintah berikut:

/usr/local/bin/certbot-auto --nginx

Secara otomatis certbot akan menampilkan daftar domain yang ada di konfigurasi Nginx. Kita dapat memilih pada domain mana kita akan menginstall SSL

Jika instalasi berhasil, jangan lupa untuk merefresh halaman testing yang telah kita buat di atas. Seharusnya kamu akan menemukan bahwa website tersebut sudah terinstall SSL.

Hebatnya, certbot client ternyata secara otomatis menambahkan konfigurasi SSL pada /etc/nginx/conf.d/

Suatu saat jika SSL kita expired, kita diharuskan untuk melakukan renew. Untuk melakukan renew certificate, kita bisa menjalankan perintah berikut:

/usr/local/bin/certbot-auto renew

Demikian tutorial tentang cara install nginx di Centos 8. Jika kamu mengalami kesulitan, feel free untuk bertanya di komentar ya!

1 thought on “Cara Install Nginx untuk Multiple Website di Vultr dengan Centos 8”

  1. instal wordpress nya gimana om. dan sampai konfigurasi ke domain nya.
    membuat file manager nya juga. dan phpmydadmin juga

    Reply

Leave a Comment