Tutorial Instalasi LEMP Nginx, MySQL, PHP di Ubuntu 22.04 LTS

Cara melakukan instalasi Nginx, MySQL, dan PHP pada Ubuntu 22.04 LTS. Pada tulisan ini kita akan melakukan instalasi Nginx, MySQL 8 Community and PHP 8.1.

Kita juga akan melakukan instalasi ekstensi PHP dan merubah beberapa konfigurasi untuk membuat virtual host serta kita akan memasang sertifikat SSL dari Let’s Encrypt yang bersifat gratis untuk koneksi HTTPS ke server kita.

Petunjuk ini sudah kita implementasikan di mesin EC2 AWS Amazon Web Service, sehingga pada cloud lainnya ataupun mesin virtual seperti virtual box, seharusnya juga sama asalkan menjalankan sistem operasi Ubuntu 22.04.

Syarat Awal

Memiliki akses dengan pengguna root atau dengan pengguna dengan akses sudo.

Memiliki domain atau subdomain untuk kita konfigurasi dengan Let’s Encrypt.

Perbaharui Server

Pertama kita lakukan update dan updgrade paket dari ubuntu server ini sehingga menjadi yang terbaru, menggunakan perintah dibawah ini.

sudo apt update
sudo apt upgrade

Setelah selesai, kita bisa mulai melakukan instalasi LEMP nya.

Instalasi Nginx

Untuk melakukan instalasi Nginx dapat dilakukan dengan perintah.

sudo apt install nginx

Perintah tersebut akan melakukan instalasi nginx dengan semua dependensi yang dibutuhkan oleh nginx.

Setup Firewall

Kita akan konfigurasi firewall terlebih dahulu, di ubuntu server 22.04 sudah terpasang firewall yang dinamakan Uncomplicated Firewall (UFW). Kita akan mengizinkan nginx dan koneksi SSH kita untuk diakses dari jaringan publik, yakni port 80 dan 443 untuk HTTP dan HTTPS nginx serta port 22 untuk koneksi SSH kita. with Apache to allow public access on default web ports for HTTP and HTTPS

sudo ufw app list

Kita akan melihat daftar aplikasi yang sudah terpasang di ubuntu server 22.04 ini.

Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
  • Nginx: Ini akan membuka port 80 (normal, web trafik yang tidak di enkripsi)
  • Nginx Full: Ini akan membuka port 80 dan port 443 (TLS/SSL trafik yang di enksripsi)
  • Nginx Secure: Ini akan membuka port 443 (TLS/SSL trafik yang di enksripsi)
  • OpenSSH: Ini akan membuka port 22 untuk akses SSH.

Jika kita tidak menggunakan koneksi SSL kita bisa mengaktifkan profile Nginx saja.

Di panduan ini kita akan menggunakan Nginx Full.

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'

Kemudian kita aktifkan UFW dengan perintah dibawah ini.

sudo ufw enable

Kita bisa melihat status dari UFW dengan perintah ini.

sudo ufw status

Cek Instalasi Nginx

Kita sudah melakukan instalasi nginx pada langkah sebelumnya, kita bisa cek status dari nginx dengan perintah dibawah ini.

sudo service nginx status
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-05-04 05:36:49 UTC; 44s ago
       Docs: man:nginx(8)
    Process: 10272 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCC>
    Process: 10273 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 10274 (nginx)
      Tasks: 3 (limit: 1151)
     Memory: 5.3M
        CPU: 35ms
     CGroup: /system.slice/nginx.service

Jika belum berjalan, kita bisa menjakankan dengan perintah

sudo service nginx start

Agar apache berjalan saat server kita menyala, kita bisa set dengan perintah

sudo systemctl enable nginx

Melihat versi dari Nginx bisa kita gunakan perintah

sudo nginx -v

Sampai langkah ini, kita sudah berhasil melakukan instalasi nginx dan melakukan konfigurasi firewall dengan UFW.

Instalasi MySQL

Pada Ubuntu 22.04 MySQL 8 sudah dimasukan sebagai versi default di repositori Jammy Jellyfish (nama ubuntu 22.04), jadi kita bisa langsung melakukan instalasi dengan perintah  apt install.

sudo apt install mysql-server

Saat proses instalasi selesai, MySQL akan berjalan dan kita bisa dengan cek dengan perintah dibawah ini.

sudo service mysql status

Hasilnya akan menunjukan bahwa mysql sudah berjalan dan aktif.

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-04-29 00:38:45 UTC; 11s ago
    Process: 13836 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, statu>
   Main PID: 13844 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 1151)
     Memory: 351.4M
        CPU: 1.043s
     CGroup: /system.slice/mysql.service
             └─13844 /usr/sbin/mysqld

Kita bisa melakukan cek versi MySQL dengan perintah.

sudo mysql -V
Output
mysql  Ver 8.0.28-0ubuntu4 for Linux on x86_64 ((Ubuntu))

Mengamankan MySQL

Instalasi MySQL sudh disertai dengan script yang dinakaman mysql_secure_installation yang memudahkan kita untuk meningkatkan keamanan dari server MySQL kita.

Namun sebelum itu, kita harus melakukan perubahan pada cara MySQL melakukan authentikasi untuk pengguna root, agar dapat masuk menggunakan kata sandi. Jalankan perintah untuk masuk ke MySQL.

sudo mysql

Kita akan dibawa ke terminal database mysql dengan pengguna root.

mysql >

Masukan perintah SQL berikut ini untuk mengganti methode authentikasi pengguna root pada mysql dengan password.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'GantiPasswordDisini';

Kemudian ketikan ‘exit‘ untuk keluar dari terminal database mysql.

Selanjutnya kita jalankan perintah dibawah ini.

sudo mysql_secure_installation

Silahkan ikuti langkah-langkah yang sudah disediakan oleh script tersebut sampai dengan selesai.

Instalasi PHP

Secara default Ubuntu 22.04 telah memiliki repositori PHP versi 8.1. Jadi kita bisa langsung melakukan instalasi PHP dengan perintah dibawah ini (kita sekalian melakukan instalasi berbagai librari untuk php).

sudo apt install php8.1-fpm php8.1 php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-intl php8.1-bcmath unzip -y

Setelah proses instalasi selesai kita bisa cek versi dari PHP dengan perintah.

php -v
Output
PHP 8.1.5 (cli) (built: Apr  7 2022 17:46:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.5, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.5, Copyright (c), by Zend Technologies

Konfigurasi PHP

Kita akan melakukan beberapa perubahan konfigurasi pada PHP dengan merubah value yang di file php.ini.

Untuk PHP 8.1 dengan Apache, file php.ini berada pada direktori.

sudo nano /etc/php/8.1/fpm/php.ini

Setelah editor nano terbuka, tekan F6 untuk mencari konfigurasi dibawah ini, lakukan perbaris dan ubah nilai nya sesuai yang dibawah ini.

upload_max_filesize = 32M
post_max_size = 48M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000

Setelah melakukan perubahan, silahkan simpan dengan ctrl + x dan ctrl + y. Kemudian lakukan restart pada php-fpm kita untuk melihat perubahan pada web server kita.

sudo service php8.1-fpm restart

Konfigurasi Nginx

Pertama, kita akan men-disable konfigurasi default dari Apache.

sudo rm -rf /etc/nginx/sites-enabled/default
sudo rm -rf /etc/nginx/sites-available/default

Lalu, kita buat folder baru dengan perintah.

sudo mkdir -p /var/www/html/nginx.henri.web.id/public

Kemudian konfigurasi permisi hak akses dan pemilik dari folder tersebut.

sudo chmod -R 755 /var/www/html/nginx.henri.web.id
sudo chown -R www-data:www-data /var/www/html/nginx.henri.web.id

Kemudian kita lanjutkan dengan membuat konfigurasi virtualhost untuk subdomain kita.

sudo nano /etc/nginx/sites-available/nginx.henri.web.id.conf

Silahkan paste konfigurasi dibawah ini.

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

    server_name nginx.henri.web.id;

    root /var/www/html/nginx.henri.web.id/public;
    index index.html index.php;

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

    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Setelah itu simpan dan kita enable konfigurasi apache tersebut dengan membuat softlink.

sudo ln -s /etc/nginx/sites-available/nginx.henri.web.id.conf /etc/nginx/sites-enabled/nginx.henri.web.id.conf

Kemudian kita restart nginx

sudo service nginx restart

Instalasi Let’s Encrypt SSL

HTTPS adalah protokol untuk mengamankan komunikasi antara server (instance) dan client (web browser). Let’s Encrypt menyediakan SSL certificates secara gratis, HTTPS sangat dibutuhkan saat ini untuk semua website untuk meningkatkan kepercayaan pengguna.

Kita langsung bisa instal di ubuntu karena certbot dari let’s encrypt sudah masuk dalam repositori ubuntu server 22.04.

sudo apt install python3-certbot-nginx

Tunggu hingga proses instalasi selesai, selanjutnya kita bisa melakukan generate sertifikat dengan perintah dibawah ini.

sudo certbot --nginx --agree-tos --redirect -m henri@henri.web.id -d nginx.henri.web.id

Perintah diatas akan men-generate sertifikat SSL untuk domain nginx.henri.web.id, juga membuat redirect dari HTTP ke HTTPS untuk domain kita dan melakukan restart nginx web server kita.

Peremajaan Sertifikat SSL

Sertifikat yang disediakan oleh Let’s Encrypt hanya valid dalam waktu 90 hari, jadi kita harus melakuan pembaharuan/renew dari sertifikat tersebut secara berkala.

Kita bisa melakukan pembaharuan dengan perintah

sudo certbot renew --dry-run

Perintah diatas akan melakukan tes kadaluarsa sertifikat dan akan melakukan pembaharuan jika sudah mendekati masa kadaluarsa.

Perpanjangan otomatis dapat dilakukan dengan memasukan perintah tersebut di atas didalam conjob.

sudo crontab -e

Kemudian masukan baris dibawah ini.

10 2 * * *   letsencrypt renew >> /var/log/letsencrypt/renew.log

Kita akan menjadwal pembaharuan sertifikat setiap jam 2:10 pagi setiap hari.

Tes Konfigurasi

Selanjutnya kita buat sebuah file php untuk melakukan tes di web browser.

sudo nano /var/www/html/nginx.henri.web.id/public/info.php

Tuliskan kode PHP dibawah ini, untuk menampilkan informasi tentang PHP yang kita install di server ini.

<?php phpinfo();

Kemudian simpan file.

Buka browser dan masukan alamat domain yang sudah kita konfigurasi dan tambahkan info.php di url (nginx.henri.web.id/info.php).

Kita akan di redirect dengan koneksi HTTPS dan menampilkan informasi tentang PHP yang ada di server.

Penutup

Demikianlah, kita sudah berhasil melakukan instalasi dan konfigurasi nginx dengan firewall dan SSL let’s encrypt, instalasi MySQL dan PHP pada Ubuntu 22.04.

Terimakasih, Semoga memberikan manfaat. Jika ada permasalahan atau pertanyaan silahkan beri komentar dibawah.

Referensi : CLoudbooklet

1 thought on “Tutorial Instalasi LEMP Nginx, MySQL, PHP di Ubuntu 22.04 LTS”

Leave a Comment