Cara install LEMP di Ubuntu 18.04

Panduan cara install Nginx, MariaDB, PHP atau LEMP stack di Linux Ubuntu 18.04 LTS. Sebagai bonus, pada tutorial ini dilengkapi dengan instalasi Redis server dan OPCache untuk meningkatkan kinerja web server serta konfigurasi dan optimasi Nginx.

Diawali dengan update sistem Linux

apt update

Langkah 1 – Install MariaDB

Secara default pada Linux 18.04 LTS paket software MariaDB sudah menggunakan versi mutakhir, yaitu MariaDB versi 10. begitupun dengan PHP sudah versi 7.2.

apt install mariadb-server -y

Kemudian tingkatkan kemanan instalasi MariaDB, seperti setup password untuk akun root, disable remote akses MySQL dan menghapus database yang tidak terpakai, (test), jalankan perintah berikut

mysql_secure_installation

Jawab pertanyaan berikut ini dengan yang saya tandai warna merah, lalu tekan Enter.

Enter current password for root (enter for none): Tekan Enter
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Langkah 2 – Install PHP dan modul

Baris perintah dibawah ini akan meng-install modul-modul penting agar Nginx, MySQL dan PHP dapat berfungsi dan terintegrasi dengan baik, diantaranya: php-fpm dan php-mysql.

apt install php-fpm php-mysql php-cli php-gd php-ldap php-odbc php-pdo php-pear php-mbstring php-xml php-xmlrpc php-mbstring php-snmp php-soap -y

Install OPCache dan Redis

Langkah ini optional, Anda bisa melewatinya jika sedang terburu-buru atau langsung ke langkah 3 –  install Nginx.

OPCache berguna untuk meningkatkan kinerja PHP dengan cara menyimpan skrip precompiled bytecode dalam shared memori, sehingga tidak perlu memuat dan mem-parsing skrip pada setiap request.

apt install php-opcache

Edit php.ini

nano /etc/php.ini

Cari baris berikut, sesuaikan

cgi.fix_pathinfo=0
upload_max_filesize = 32M
post_max_size = 128M
max_execution_time = 90

Dilanjut dengan pemasangan redis-server dan ekstensi php-redis

Selain OPCache, Redis (REmote DIctionary Server) akan melengkapi kesempurnaan kinerja web server digunakan untuk caching, message broker dan database agar dapat mengurangi penggunaan bandwith dan server load, sangat cocok untuk situs yang sibuk.

apt install redis server && apt install php-redis -y

Aktifkan redis

systemctl start redis-server
systemctl enable redis-server.service

Setelah selesai proses instalasi, cek apakah Redis telah aktif

redis-cli

Ketik ping dan Enter, hasilnya harusnya seperti ini

127.0.0.1:6379> ping
PONG
127.0.0.1:6379>

Pengguna WordPress, silahkan ikuti panduan cara install dan konfigurasi Redis.

Langkah 3 – Install Nginx

Pada Linux Ubuntu 18.04 paket software Nginx web server versi terbaru sudah ada di repository, jadi langsung saja

apt install nginx -y

Kemudian start service Nginx dan aktifkan saat sistem booting

systemctl start nginx && systemctl enable nginx

Langkah 4 – Konfigurasi dan optimasi Nginx

Edit konfigurasi virtual host Nginx pakai nano teks editor.

echo > /etc/nginx/sites-available/default && nano /etc/nginx/sites-available/default

Kemudian copy-paste template berikut

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

        location /error/ {
           alias   /usr/share/nginx/html/errors/;
        }

        root /var/www/html/;
        index index.htm index.html index.php;

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

        access_log /var/log/nginx/access_log;
        access_log off;
        error_log /var/log/nginx/error_log error;

        # security
        error_page 403 = 404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }

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

        # compress
        gzip on;
        gzip_comp_level    5;
        gzip_min_length    256;
        gzip_proxied       any;
        gzip_vary          on;
        gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon image/png image/gif image/jpeg text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/xml
        text/vtt text/x-component text/x-cross-domain-policy;
        # text/html sudah dikompres oleh gzip module

        # caches
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; add_header Cache-Control "public, no-transform"; }


        # php block
        location ~ \.php?$ {
		try_files $uri = 404;
		include fastcgi_params;
		fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		fastcgi_intercept_errors on;
		fastcgi_split_path_info ^(.+\.php)(.*)$;

		# Cegah kebocoran info versi
		fastcgi_hide_header X-Powered-By;

        }
}

Restart service php-fpm  dan nginx

systemctl restart php-fpm && systemctl restart nginx

Kemudian buat file info.php untuk memeriksa apakah Nginx, PHP-FPM serta modul-modul PHP lain sudah bekerja dengan baik. Jalankan perintah berikut:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Ubah hak kepemilikan (chown) www-data dan chmod file (644) dan folder (755) yang ada di direktori web root /var/www/html

chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

Akses menggunakan browser http://ip-server, pastikan kolom Server API adalah FPM/FastCGI dan ada ekstensi Redis disana.

Langkah 5 – Troubleshooting

Jika IP tidak bisa diakses melalui browser, cek apakah firewall aktif, jika iya tambahkan service http (buka port 80) dengan perintah berikut:

ufw allow http
ufw allow https

Selamat mencoba 😀

Catatan:

Sebelum dipublikasikan tutorial ini sudah dites pada Linux Ubuntu 18.04.2 LTS dan bekerja dengan sangat baik. Pada tutorial selanjutnya akan dibahas cara install LEMP di CentOS 7.

Referensi:

Add a comment