Software LEMP Stack adalah sekelompok perangkat lunak yang dapat digunakan untuk melayani halaman web dan aplikasi web yang dinamis. LEMP merupakan akronim dari Linux, Nginx (Engine-X), MySQL, PHP yang menjelaskan sistem operasi Linux, dengan server web Nginx (diucapkan seperti “Engine-X”). Data backend disimpan dalam database MySQL dan pemrosesan dinamis ditangani oleh PHP.

LEMP Ubuntu Server
LEMP Ubuntu Server

Panduan ini mendemonstrasikan cara menginstal LEMP Stack pada Ubuntu server 18.04. Sistem operasi Ubuntu akan menangani persyaratan pertama. Kami akan menjelaskan cara mengaktifkan dan menjalankan komponen lainnya.

Langkah 1 – Instalasi Nginx Web Server

Untuk menampilkan halaman web kepada pengunjung situs, Nginx adalah salah satu software server paling populer, server web modern dan efisien.

Semua perangkat lunak yang digunakan dalam prosedur ini akan berasal dari repositori paket default Ubuntu. Ini berarti kita dapat menggunakan paket manajemen apt yang tepat untuk menyelesaikan instalasi yang diperlukan.

Karena ini adalah pertama kalinya kami menggunakan apt untuk sesi ini, mulailah dengan memperbarui indeks paket server Anda. Setelah Anda login melalui SSH di server (VPS atau dedicated server)

sudo apt update

sudo apt install nginx

Pada Ubuntu 18.04, Nginx dikonfigurasi untuk mulai berjalan setelah instalasi.

Jika Anda menjalankan ufw firewall, Anda harus mengizinkan koneksi ke Nginx. Nginx mendaftar sendiri dengan ufw saat instalasi, jadi prosedurnya cukup mudah.

Disarankan agar Anda mengaktifkan profil paling ketat yang masih akan memungkinkan lalu lintas yang Anda inginkan. Karena Anda belum mengonfigurasi SSL untuk server dalam panduan ini, Anda hanya perlu mengizinkan lalu lintas di port 80.

Aktifkan ini dengan mengetik:

sudo ufw allow 'Nginx HTTP'

Anda dapat memverifikasi perubahan dengan menjalankan perintah:

sudo ufw status

Output perintah ini akan menunjukkan bahwa lalu lintas HTTP diizinkan:

Status: active

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

Dengan aturan firewall baru ditambahkan, Anda dapat menguji apakah server aktif dan berjalan dengan mengakses nama domain server Anda atau alamat IP publik di browser web Anda.

Jika Anda tidak memiliki nama domain yang diarahkan ke server Anda dan Anda tidak tahu alamat IP publik server Anda, Anda dapat menemukannya dengan menjalankan perintah berikut:

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

Setelah mengetahui alamat IP server Anda, buka browser di komputer dan ketik alamat IP di Address bar browser Anda :

http://server_IP_atau_domain
nginx_default
tampilan default nginx

Jika Anda melihat halaman di atas, Anda telah berhasil menginstal Nginx.

Langkah 2 – Instal MySQL sebagai Database

Sekarang Anda memiliki server web, Anda perlu menginstal MySQL (sistem manajemen basis data) untuk menyimpan dan mengelola data untuk situs Anda.

Instal MySQL dengan mengetik:

sudo apt install mysql-server

Perangkat lunak database MySQL sekarang diinstal, Untuk mengamankan instalasi, MySQL dilengkapi dengan skrip yang akan menanyakan apakah kita ingin memodifikasi beberapa default yang tidak aman. Mulai skrip dengan mengetik:

Peringatan: Mengaktifkan fitur ini adalah semacam dilema. Jika diaktifkan, kata sandi yang tidak cocok dengan kriteria yang ditentukan, akan ditolak oleh MySQL dengan pesan error.

Ini akan menimbulkan masalah jika Anda menggunakan kata sandi yang lemah bersama dengan perangkat lunak yang secara otomatis mengkonfigurasi kredensial pengguna MySQL, seperti paket Ubuntu untuk phpMyAdmin.

Sebenarnya Anda bisa memilih untuk tidak mengaktifkan, tetapi Anda harus selalu menggunakan kata sandi yang kuat dan unik untuk kredensial basis data.

sudo mysql_secure_installation

Script ini akan menanyakan apakah Anda ingin mengkonfigurasi VALIDATE PASSWORD PLUGIN.

Jawab Y untuk ya, atau tekan tombol apa saja untuk tidak melanjutkan.

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:

Jika Anda telah mengaktifkan validasi, skrip juga akan meminta Anda untuk memilih tingkat validasi kata sandi. Jika memasukkan 2 (untuk level terkuat), Anda akan menerima kesalahan saat mencoba mengatur kata sandi yang tidak mengandung angka, huruf besar dan kecil, dan karakter khusus, atau yang didasarkan pada kata-kata kamus umum. Penting untuk menangkis serangan brute force menggunakan metode dictionary attack.

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 

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

Selanjutnya tentukan password root untuk login ke MySQL:

Please set the password for root here.

New password:

Re-enter new password:

Untuk sisa pertanyaan, Anda harus menekan Y atau menekan tombol ENTER di setiap prompt. Langkah selanjutnya akan menghapus beberapa pengguna anonim dan database test, menonaktifkan login root jarak jauh, dan memuat aturan baru ini sehingga MySQL segera menerapkan perubahan yang baru kita buat.

Perhatikan bahwa dalam sistem Ubuntu yang menjalankan MySQL 5.7 (dan versi yang lebih baru), root pengguna MySQL diatur untuk mengotentikasi menggunakan plugin auth_socketsecara default daripada dengan kata sandi. Ini memungkinkan beberapa keamanan dan kegunaan yang lebih besar dalam banyak kasus, tetapi juga dapat menyulitkan ketika Anda perlu mengizinkan program eksternal (mis., PhpMyAdmin) untuk mengakses pengguna.

Jika menggunakan plugin auth_socket untuk mengakses MySQL yang sesuai dengan alur kerja Anda, Anda dapat melanjutkan ke Langkah 3. Namun, jika Anda lebih suka menggunakan kata sandi saat menghubungkan ke MySQL sebagai root, Anda perlu mengganti metode autentikasi dari auth_socket ke mysql_native_password. Untuk melakukan ini, buka prompt MySQL dari terminal Anda:

sudo mysql

Selanjutnya, periksa metode otentikasi mana yang digunakan setiap akun pengguna MySQL dengan perintah berikut:

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)

Dalam contoh ini, Anda dapat melihat bahwa pengguna root sebenarnya mengautentikasi diri menggunakan auth_socket. Untuk mengonfigurasi akun root untuk mengautentikasi dengan kata sandi, jalankan perintah ALTER USER berikut.

Pastikan untuk mengubah kata “password512″ menjadi kata sandi pilihan Anda:

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

Setelah selesai, jalankan perintah FLUSH PRIVILEGES yang memberi tahu server untuk memuat ulang tabel dan menerapkan perubahan baru Anda:

FLUSH PRIVILEGES;

Periksa kembali metode otentikasi yang digunakan oleh masing-masing pengguna Anda untuk mengonfirmasi bahwa root tidak lagi diautentikasi menggunakan plugin auth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;

Output

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *3636DACC8615D997782ADD0839F92C1571D6D78F | 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)

Anda dapat melihat dalam contoh dari output ini bahwa pengguna MySQL root sekarang di otentikasi menggunakan kata sandi. Setelah Anda mengonfirmasi ini di server Anda sendiri, Anda dapat keluar dari shell MySQL:

exit

Catatan: Setelah mengonfigurasi pengguna root MySQL untuk mengotentikasi dengan kata sandi, Anda tidak akan dapat lagi mengakses MySQL dengan perintah sudo mysql yang digunakan sebelumnya. Sebagai gantinya, Anda harus menjalankan yang berikut :

mysql -u root -p

Setelah memasukkan kata sandi yang baru saja Anda atur, Anda akan melihat prompt MySQL.

Pada titik ini, sistem database MySQL sekarang sudah diatur dan Anda dapat beralih ke instalasi PHP.

Langkah 3 – Install PHP dan konfigurasi Nginx untuk Menggunakan PHP

Anda sekarang telah menginstal Nginx untuk melayani halaman Anda dan MySQL diinstal untuk menyimpan dan mengelola data Anda. Namun, Anda masih belum memiliki apa pun yang dapat menghasilkan konten dinamis. Di sinilah PHP berperan.

Karena Nginx tidak mengandung pemrosesan PHP asli seperti beberapa server web lainnya, Anda perlu menginstal php-fpm, yang merupakan kependekan dari “fastCGI process manager”. Kami akan memberi tahu Nginx untuk mengirimkan permintaan PHP ke perangkat lunak ini untuk diproses.

Catatan: tergantung pada tempat Anda menyewa cloud, Anda mungkin perlu menambahkan repositori universe di Ubuntu, yang mencakup perangkat lunak bebas dan open-source yang dikelola oleh komunitas Ubuntu, sebelum menginstal paket php-fpm. Anda dapat melakukan ini dengan mengetik:

sudo add-apt-repository universe

Instal modul php-fpm bersama dengan paket pembantu tambahan, php-mysql, yang akan memungkinkan PHP untuk berkomunikasi dengan backend basis data Anda. Instalasi akan menarik file inti PHP yang diperlukan. Lakukan ini dengan mengetik:

sudo apt install php-fpm php-mysql

Anda sekarang telah menginstal semua komponen LEMP stack yang diperlukan, tetapi Anda masih perlu membuat beberapa perubahan konfigurasi untuk memberi tahu Nginx untuk menggunakan prosesor PHP untuk konten dinamis.

Untuk melakukan ini, buka file konfigurasi blok server baru di dalam direktori /etc/nginx/sites-available/. Dalam contoh ini, file konfigurasi block server baru bernama example.com, Anda dapat memberi nama apa pun yang Anda suka:

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

Dengan mengedit file konfigurasi blok server baru, daripada mengedit yang default, Anda dapat dengan mudah mengembalikan konfigurasi default jika perlu.

Tambahkan konten berikut, yang diambil dan sedikit dimodifikasi dari file konfigurasi blok server default, ke file konfigurasi blok server baru Anda:

sudo nano /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;
        }
}

Inilah yang dilakukan oleh masing-masing arahan dan blok lokasi ini:

  • listen — Menentukan port apa yang akan didengarkan Nginx. Dalam hal ini, ia akan mendengarkan pada port80, Port standar untuk HTTP.
  • root — Menentukan root dokumen tempat file dan folder situs web disimpan.
  • index — Mengkonfigurasi Nginx untuk memprioritaskan file penyajian bernama index.php saat file indeks diminta, jika tersedia.
  • server_nameMenentukan blok server mana yang harus digunakan untuk permintaan yang diberikan ke server. Arahkan konfigurasi server_name ini ke nama domain server Anda atau alamat IP publik.
  • location / — Blok lokasi pertama mencakup arahan try_files yang memeriksa keberadaan file yang cocok dengan permintaan URI. Jika Nginx tidak dapat menemukan file yang sesuai, itu akan mengeluarkan pesan error 404.
  • location ~ \.php$ — Blok lokasi ini menangani pemrosesan PHP aktual dengan mengarahkan Nginx ke file konfigurasi fastcgi-php.conf dan file php7.2-fpm.sock, yang menyatakan soket apa yang terkait dengan php-fpm.
  • location ~ /\.ht — Blok lokasi terakhir berkaitan dengan file .htaccess, yang tidak diproses oleh Nginx. Dengan menambahkan tolak semua arahan, jika ada file .htaccess terjadi untuk menemukan jalan mereka ke root dokumen, mereka tidak akan disajikan kepada pengunjung.

Setelah menambahkan konten ini, simpan dan tutup file. Aktifkan block server baru Anda dengan membuat tautan simbolik dari file konfigurasi block server baru Anda (di direktori /etc/nginx/sites-available/) ke direktori /etc/nginx/sites-enabled/ dengan mengetik perintah:

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

Kemudian, hapus tautan file konfigurasi default dari direktori /sites-enabled/:

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

Catatan: Jika Anda perlu mengembalikan konfigurasi default, Anda dapat melakukannya dengan membuat ulang tautan simbolik, seperti ini:

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

Uji file konfigurasi baru Anda untuk kesalahan sintaks dengan mengetik:

sudo nginx -t

Jika ada kesalahan yang dilaporkan, kembali dan periksa kembali file Anda sebelum melanjutkan.

Saat Anda siap, reload Nginx untuk melakukan perubahan yang diperlukan:

sudo systemctl reload nginx

Ini menyimpulkan instalasi dan konfigurasi LEMP stack Anda. Namun, sebaiknya konfirmasi bahwa semua komponen dapat berkomunikasi satu sama lain.

Langkah 4 – Tes Komunikasi LEMP Stack

LEMP stack Anda sekarang seharusnya sudah siap untuk digunakan untuk produktifitas. Namun jika ingin menguji sebelum mulai “berperang”, silahkan membuat file uji PHP yang disebut info.php di root dokumen Anda (asumsi dokumen root Anda berada di /var/www/html/):

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

Masukkan baris berikut ke dalam file baru. Kode ini adalah kode PHP yang akan menghasilkan informasi tentang server Anda:

<?php
phpinfo(); 
?>

Setelah selesai silahkan close dan kunjungi

http://alamat_server_domain_atau_IP/info.php

Anda seharusnya akan melihat halaman web yang dihasilkan oleh PHP dengan informasi tentang server Anda

linux LEMP
linux LEMP

Jika Anda melihat halaman yang terlihat seperti ini, Anda berhasil mengatur pemrosesan PHP dengan Nginx.

Setelah memverifikasi bahwa Nginx berhasil merender halaman dengan benar, langkah terbaik adalah menghapus file yang baru Anda buat, karena php-info dapat memberikan informasi berharga bagi para hacker yang dapat membantu mereka untuk mencoba membobol situs. Anda selalu dapat membuat ulang file ini jika Anda membutuhkannya nanti.

Untuk saat ini, hapus file dengan mengetik:

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

Dengan itu, Anda sekarang memiliki LEMP stack yang sepenuhnya terkonfigurasi dan berfungsi pada Ubuntu 18.04 server.

Kesimpulan

LEMP stack adalah platform kuat yang akan memungkinkan Anda untuk mengatur dan melayani hampir semua situs web dinamis atau aplikasi dari server Anda.