Instalasi Web Server Nginx, MariaDB, PHP (LEMP) di Ubuntu 22.04

LEMP adalah kumpulan software yang digunakan dalam membuat sebuah server web. LEMP terdiri dari Linux sebagai sistem operasinya, Nginx (dibaca: Engine X) sebagai software web server, MySQL server sebagai databasenya dan PHP sebagai pemrograman web dinamisnya.

Pada tutorial ini kita akan menggunakan Linux Ubuntu Server 22.04 LTS sebagai sistem operasi. Khusus untuk server database kita akan menggunakan MariaDB karena MySQL sekarang sudah diakuisisi oleh Oracle yang berarti tidak benar-benar opensource lagi. Fitur, konfigurasi dan perintah-perintah pada MariaDB tidak jauh berbeda dengan MySQL sehingga kita tidak perlu beradaptasi lagi. Keunggulannya MariaDB tetap berkomitmen menjadi software opensource dan terus dikembangkan oleh komunitas.

Seperti biasa sebelum memulai tutorial ada beberapa prasyarat yang harus disiapkan sebelum install LEMP di ubuntu 22.04.

Prasyarat:

  • Sudah melakukan konfigurasi awal server. Silahkan lihat tutorial pengaturan awal pada Ubuntu Server 22.04.
  • [Opsional] Sudah memiliki domain. Anda dapat membelinya pada penyedia domain (domain registrar seperti Godaddy, Namecheap, idwebhost dan lainnya.
  • [Opsional] Sudah menghubungkan domain ke server atau VPS yang digunakan. Kita bisa menggunakan fitur DNS hosting pada Cloudflare untuk mengatur DNS Record domain kita. Silahkan simak cara menghubungkan domain ke server dengan DNS Cloudflare.

Berikut ini adalah cara install web server Nginx, MariaDB dan PHP8.1 (LEMP) pada Ubuntu Server 22.04 LTS.

1. Install Web Server Nginx

Perbarui database dari repositori dengan melakukan perintah:

$ sudo apt update

Install paket Nginx dengan perintah:

$ sudo apt -y install nginx

Karena pada pengaturan awal ubuntu server kita mengaktifkan firewall melalui UFW maka izinkan Nginx agar web kita dapat diakses.

$ sudo ufw allow 'Nginx Full'

Dengan mengizinkan Nginx Full berarti kita memberi akses pada port 80 yaitu HTTP dan 443 yaitu HTTPS.

Sekarang server kita telah memiliki web server. Untuk melakukan tes apakah web server telah benar-benar berjalan kita bisa mengakses tampilan default dari Nginx melalui internet browser dengan mengetikkan ip address server kita.

http://alamat_ip_server_anda

Seharusnya akan tampil seperti gambar di bawah ini:

Tampilan default nginx di browser

2. Install PHP 8.1

Kita akan menggunakan versi PHP terbaru yang support Ubuntu 22.04 yaitu PHP8.1 untuk mendapatkan semua fitur terbaru dan performa terbaik. Nginx tidak mendukung modul PHP biasa seperti yang digunakan di Apache melainkan menggunakan fastCGI. Oleh karena itu kita akan menginstall paket fastCGI dari PHP8.1 yaitu php8.1-fpm (fastCGI process manager).

Menurut pengalaman saya, php8.1-fpm memiliki kecepatan dan performa yang lebih baik dibandingkan modul pada Apache. Hal ini tentunya akan menghasilkan website yang lebih cepat dengan kombinasi Nginx yang lebih ringan dibanding Apache.

Lakukan instalasi php8.1-fpm dengan perintah:

$ sudo apt -y install php8.1-fpm

3. Install MariaDB (Database Server)

Selain menginstall mariadb-server kita juga harus install php8.1-mysql sebagai modul yang mendukung mySQL pada PHP.

$ sudo apt -y install mariadb-server php8.1-mysql

Lakukan instalasi keamanan dasar pada mariadb dengan perintah:

$ sudo mysql_secure_installation

Berikut ini rekomendasi pengaturan sesuai output pertanyaan yang muncul.

Enter current password for root (enter for none): Tekan enter karena kita tidak belum mengatur passwordnya.
Set root password? [Y/n] Y Ketik Y karena kita akan memberi password.
New password: Masukkan password baru untuk root database sesuai keinginan.
Re-enter new password: Masukkan lagi passwordnya.
Remove anonymous users? [Y/n] Y Ketik Y untuk menghapus user yang tidak diperlukan.
Disallow root login remotely? [Y/n] Y Ketik Y untuk menonaktifkan root login ke database.
Remove test database and access to it? [Y/n] Y Ketik Y untuk menghapus database test.
Reload privilege tables now? [Y/n] Y Ketik Y untuk menyimpan perubahan.

4. Konfigurasi Dasar Nginx

Sebelum berlanjut ke konfigurasi Nginx baiknya kita mengetahui file-file konfigurasi pada Nginx yang terletak pada direktori /etc/nginx/. Berikut ini saya jelaskan secara singkat bagian yang paling penting agar lebih mudah dipahami.

  • File nginx.conf berisi konfigurasi utama pada nginx.
  • Direktori sites-available berisi file-file konfigurasi website. Dalam nginx disebut dengan server block sedangkan pada Apache disebut Virtualhost.
  • Direktori sites-enabled berisi file-file symbolic link yang merujuk sites-available. Gunanya adalah untuk mengaktifkan website.
  • Direktori snippets berisi potongan konfigurasi yang bisa dimasukkan pada file konfigurasi website. Gunanya adalah agar tidak memasukkan konfigurasi yang berulang-ulang pada tiap website.

Pengaturan nginx tidak memiliki standar resmi. Setiap sysadmin memiliki style tersendiri sesuai kreativitas mereka. Saya biasanya membuat file konfigurasi berdasarkan fungsinya di direktori snippet. Misalnya semua pengaturan tentang gzip diletakkan pada file gzip.conf atau tentang ssl di file ssl.conf di direktori snippet.

Sebagai awal, pada tahap ini kita akan melakukan konfigurasi file utama yaitu nginx.conf. Buka file /etc/nginx/nginx.conf dengan teks editor seperti nano:

$ sudo nano /etc/nginx/nginx.conf

Ubah isi file tersebut. Berikut ini adalah isi dari file konfigurasi nginx.conf saya:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {
        ##
        # Basic Settings
        ##
        sendfile off;
        tcp_nopush off;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        server_tokens off;
        server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        client_max_body_size 2M;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log warn;

        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Simpan dan tutup file tersebut.

Penjelasan bagian penting konfigurasi di atas:

  • User yang menjalankan Nginx adalah www-data.
  • worker_connections adalah jumlah yang dapat dihandle dalam 1 detik oleh 1 core CPU. Nilai didapat dari perintah $ ulimit -n.
  • sendfile dan tcp_nopush off agar paket dikirim langsung tanpa menunggu paket penuh. tcp_nodelay on agar menonaktifkan delay pengiriman paket.
  • server_tokens off menonaktifkan keterangan tentang nginx di header paket.

5. Hubungkan Nginx dan php8.1-fpm

Agar server web dapat menghandle file PHP maka kita harus menghubungkan nginx dengan php8.1-fpm. Pengaturan tersebut dilakukan di dalam server block pada file di directory sites-available.

Buka file /etc/sites-available/default:

$ sudo nano /etc/nginx/sites-available/default

Ganti isi file tersebut dengan:

server {
        listen 80 default_server;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

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

Simpan dan tutup file tersebut.

Lihat bagian yang saya tebalkan pada file di atas. Bagian tersebut adalah bagian yang ditambahkan dari file defaultnya. Berikut penjelasannya:

  • Bagian index index.php index.html... (dan seterusnya) artinya file yang pertama kali dibuka sebagai index diserver adalah file index.php.
  • Bagian location ~ .php$... (dan seterusnya) merupakan pengaturan untuk menghandle semua file php menggunakan php8.1-fpm.

Buat file php untuk tes apakah server PHP sudah berjalan di server kita:

$ sudo nano /var/www/html/info.php

Masukkan script PHP di bawah ini:

<?php
phpinfo();

Simpan dan tutup file itu.

Restart Nginx dengan perintah:

$ sudo systemctl reload nginx

Anda dapat melihat hasilnya pada internet browser dengan mengetikkan alamat IP addressnya http://alamat_ip_server_anda/info.php

Maka seharusnya hasilnya adalah berupa informasi PHP seperti gambar di bawah ini:

Informasi php7.4 server di browser

Nah, dari awal tutorial kita hanya bisa melihat hasilnya dari alamat IP. Lalu bagaimana jika ingin kita punya domain yang sudah dihubungkan dengan server (prasyarat 2 & 3 terpenuhi)? Maka kita harus membuat server block untuk domain tersebut. Silahkan baca langkah 6 di bawah ini.

6. Atur Server Block untuk Membuat Website Berdasarkan Nama Domain (Opsional)

Langkah ini hanya untuk anda yang sudah memiliki domain dan telah menghubungkannya ke server atau VPS (prasyarat 2 dan 3). Dengan langkah ini maka kita dapat mengakses website di server berdasarkan nama domain.

Buat file baru pada direktori sites-available untuk membuat server block domain website kita.

$ sudo nano /etc/nginx/sites-available/itkoding.com

Masukkan kode di bawah ini pada file tersebut:

server {
        listen 80;
        root /var/www/itkoding;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name itkoding.com;

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

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

Simpan dan tutup file tersebut. Penjelasan lengkap kode tersebut akan saya share pada artikel khusus membahas server block nginx karena terlalu panjang.

Aktifkan website tersebut dengan membuat symbolic link:

$ sudo ln -s /etc/nginx/sites-available/itkoding.com /etc/nginx/sites-enabled/

Buat direktori root website:

$ sudo mkdir /var/www/itkoding

Buat file php untuk tes domain:

$ sudo nano /var/www/itkoding/index.php

Masukkan kode di bawah ini:

<?php
phpinfo();

Restart Nginx dengan perintah:

$ sudo systemctl reload nginx

Nah, selanjutnya kita bisa mencoba mengakses website dengan mengetikkan nama domainnya di browser misalnya http://itkoding.com

Maka akan muncul halaman PHP seperti gambar ini:

Informasi php menggunakan domain di browser

Selanjutnya kita bisa meletakkan semua script PHP website kita pada root directory sesuai pengaturan server block di atas misalnya /var/www/itkoding. Pengaturan tersebut bersifat mendasar. Tidak ada konfigurasi keamanan, kompresi gzip, ssl dan lainnya. Silahkan baca tulisan saya lainnya sesuai dengan kebutuhan.

M. Hernawan
Web developer yang juga suka dengan dunia sysadmin. Pernah belajar Teknik Informatika di Indonesia.

Komentar

  • yansen
    • M. Hernawan
  • Ajid
    • M. Hernawan

Tinggalkan Balasan ke yansenBatal