LEMP stack adalah kumpulan software yang umum digunakan untuk membantu kita dalam menjalankan aplikasi web dan laman web dinamis. Kalau kamu familiar dengan LAMP Stack (Linux Apache MySQL PHP), maka unsur Apache web server digantikan oleh Engine-X (Nginx).

Panduan ini memberikan anda langkah-langkah yang diperlukan untuk menginstall LAMP di atas Ubuntu Linux versi

Persyaratan

Diasumsikan anda sudah memiliki server dengan OS Ubuntu 18.04, dan akses user root atau user dengan sudo privileges.

Langkah 1 – Install Nginx Web Server

Agar kita dapat menampilkan laman web kita ke pengunjung, kita akan menggunakan Nginx (Engine-X). Semua software yang akan kita install sudah terdapat dalam default repository Ubuntu 18.04. Kita cukup menggunakan perintah apt untuk menginstall.

Update dulu rrepository index di server anda, kemudian install Nginx:

sudo apt update
sudo apt install nginx

Pada Ubuntu 18.04, Nginx akan langsung berjalan setelah proses instalasi berhasil.

Jika anda memiliki aplikasi ufw firewall yang sudah beroperasi, maka anda perlu mengijinkan Nginx untuk beroperasi pada port 80. Jalankan perintah berikut (Jika ufw telah terinstall dan aktif, jika tidak, anda bisa meloncat ke langkah berikutnya):

sudo ufw allow 'Nginx HTTP'

Verifikasi dengan menjalankan perintah berikut:

sudo ufw status
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Jika anda belum memiliki domain name, jalankan perintah berikut untuk mengetahui IP public anda:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Periksa apakah instalasi berhasil:

http://server_domain_or_IP

Nginx default page

Anda berhasil menginstall Nginx jika melihat output seperti di atas.

Langkah 2 – Install MySQL

Install MySQL dengan perintah berikut:

sudo apt install mysql-server

Setelah selesai, jalankan perintah berikut untuk meningkatkan keamanan sistem:

sudo mysql_secure_installation

Script tersebut akan meminta anda untuk mengaktivasi VALIDATE PASSWORD PLUGIN.

Peringatan: Mengaktifkan plugin ini terkadang bisa menimbulkan masalah. Plugin ini bisa dibiarkan disabled, namun pastikan anda menggunakan password yang cukup strong.

Jawab Y untuk menginstall, atau tombol lainnya untuk mengabaikan.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Selanjutkan, jika anda memilih Yes, anda akan memilih password validation level.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Selanjutnya, anda bisa mengisi password untuk user root:

Please set the password for root here.

New password:

Re-enter new password:

Anda bisa menekan tombol  Y dan ENTER untuk tahapan-tahapan selanjutnya.

Pada Ubuntu yang menjalankan MySQL 5.7 (atau versi lebih baru), user root MySQL diset untuk login melalui auth_socket plugin ketimbang menggunakan password. Secara umum ini adalah konfigurasi yang memberikan tingkat keamanan lebih baik.

Jika anda ingin mengganti metode autentifikasi user root dari auth_socket ke mysql_native_password, Jalankan perintah berikut:

sudo mysql

Cek metode yang digunakan saat ini:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Alter user root:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Kemudian jalankan perintah berikut untuk reload grant tables dan mengaktifkan aturan baru yang kita buat tadi:

  • FLUSH PRIVILEGES;

Periksa kembali apakah perubahan telah terjadi:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Keluar dari MySQL:

  • exit

Kemudian coba login menggunakan password:

mysql -u root -p.

Langkah 3 – Install PHP dan Konfigurasi Nginx Agar Menggunakan PHP Processor

Karena Nginx tidak memiliki native PHP processing bawaan, (berbeda dengan Apache), maka anda harus menginstall php-fpm, kepanjangannya “fastCGI process manager”. Kita akan memerintahkan Nginx untuk melempar PHP requests ke php-fpm.

Note: Jika anda belum mengaktivasi universe repository, jalankan perintah berikut:

sudo add-apt-repository universe

Install php-fpm module berbarengan dengan package lain yang diperlukan, php-mysql, yang memungkinkan PHP berkomunikasi dengan MySQL:

sudo apt install php-fpm php-mysql

Dengan demikian anda telah selesai menginstall LEMP stack, namun tetap perlu menambahkan beberapa konfigurasi.

Tambahkan kofigurasi di dalam folder /etc/nginx/sites-available/ . Misalkan kita ingin menserve web dengan alamat domain example.com, yang bisa anda ganti sesuai dengan nama domain anda:

sudo nano /etc/nginx/sites-available/example.com

Edit file tersebut:

/etc/nginx/sites-available/example.com
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;

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

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

        location ~ /\.ht {
                deny all;
        }
}

Berikut penjelasan beberapa directive yang digunakan:

  • listen — Mendefinisikan port yang akan dilisten olen Nginx. dalam hal ini kita menggunkan port 80, default port untuk HTTP.
  • root — Mendefinisikan root directory dari file web yang akan diakses.
  • index — Memberitahu Nginx untuk memprioritaskan index.php ketika request datang, jika file index.php tersebut tersedia.
  • server_name — Mendefiniskan blok server mana yang akan digunakan. Isi dengan nama domain atau IP address.
  • location / — Blok lokasi pertama yang berisi try_files directive, yang memeriksa keberadaan file yang cocok dengan URI request. Jika tak ditemukan, Nginx akan mengembalikan 404 error.
  • location ~ \.php$ — Block ini menghandle PHP request dan mengarahkan Nginx ke fastcgi-php.conf configuration file dan php7.2-fpm.sock file, yang mendeklarasikan socket yang sesuai dengan php-fpm.
  • location ~ /\.ht — Blok yang berurusan dengan .htaccess files, yang tidak diproses oleh Nginx. Dengan menambahkan deny all directive, jika terdapat .htaccess file di document root, tidak akan diserve ke visitor.

Simpan, lalu buat simbolic link ke folder sites-enabled:

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

Kemudian, unlink default configuration file dari direktori /sites-enabled/ :

sudo unlink /etc/nginx/sites-enabled/default

Catatan: Anda dapat kembali mengaktifkan default condiguration dengan cara menjalankan perintah berikut:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Tes konfigurasi:

sudo nginx -t

Jika ada error, pebaiki hingga tidak ada lagi.

Reload Nginx:

sudo systemctl reload nginx

Langkah 4 – Membuat PHP File Untuk Memastikan Instalasi LEMP Berhasil

Buat sebuah file info.php di document root:

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

Tambakan baris berikut:

/var/www/html/info.php
<?php
phpinfo();

Kemudian simpan file.

Akses laman berikut:

http://your_server_domain_or_IP/info.php

Akan muncul respons berikut:

PHP page info

Setelah berhasil, jangan lupa hapus file tersebut untuk alasan keamanan:

sudo rm /var/www/html/info.php

Kesimpulan

Anda telah berhasil menginstall LEMP Stack. Langkah berikutnya mungkin anda perlu mensetup SSL pada Nginx menggunakan Let’s Encrypt.