Framework & Development

Cara Instalasi LEMP Stack di Ubuntu 24.04 LTS

Cara Instalasi LEMP Stack di Ubuntu 24.04 LTS
Daftar Isi

LEMP Stack (Linux, Nginx, MySQL, PHP) adalah kombinasi software yang paling umum dipakai sebagai alternatif LAMP Stack untuk menjalankan aplikasi web berbasis PHP, dengan Nginx sebagai web server pengganti Apache. Panduan ini menjelaskan langkah instalasi LEMP Stack di Ubuntu 24.04 LTS, mulai dari update sistem sampai pengujian akhir, menggunakan paket qVM-2. Sebagai studi kasus, panduan ini juga mencakup deploy landing page (kombinasi PHP dan HTML), instalasi phpMyAdmin untuk manajemen database melalui browser, dan pemasangan SSL gratis menggunakan Let's Encrypt.

Pengenalan

LEMP Stack terdiri dari empat komponen utama: Linux sebagai sistem operasi, Nginx sebagai web server, MySQL (atau MariaDB) sebagai database, dan PHP sebagai bahasa pemrograman. Bedanya dengan LAMP ada di komponen web server: Nginx bekerja dengan arsitektur event-driven/asynchronous, sehingga lebih ringan menangani banyak koneksi bersamaan dibanding Apache yang berbasis proses/thread per request. Untuk menjalankan PHP, Nginx tidak memakai modul seperti mod_php di Apache - PHP dijalankan lewat PHP-FPM (FastCGI Process Manager) yang berjalan terpisah sebagai service sendiri.

Ubuntu 24.04 LTS dipilih sebagai basis OS karena mendapat dukungan resmi (security update dan bug fix) sampai April 2029, sehingga cocok dipakai untuk server yang butuh masa pakai jangka panjang tanpa perlu upgrade OS terlalu sering. Panduan ini ditujukan untuk VPS atau qVM yang baru saja di-deploy (fresh install), belum ada konfigurasi tambahan apa pun di atasnya.

Persyaratan

Sebelum mulai instalasi, pastikan hal-hal berikut sudah terpenuhi:

Software

  • Ubuntu 24.04 LTS, kondisi fresh install (belum ada web server/database lain yang bentrok port)
  • Akses root atau user dengan hak sudo
  • Koneksi ke internet untuk mengunduh paket dari repository Ubuntu
  • SSH client di sisi lokal untuk remote ke qVM

Hardware / Spesifikasi VPS qVM

Panduan ini menggunakan paket qVM-2, dengan spesifikasi:

  • vCPU: 1 core
  • RAM: 2 GiB
  • Storage: 50 GiB
  • Domain yang sudah diarahkan (A record) ke IP Publik qVM — dipakai untuk konfigurasi server block dan pembuatan sertifikat SSL

Spesifikasi ini sudah cukup untuk menjalankan Nginx, MySQL, PHP-FPM, dan phpMyAdmin sekaligus untuk landing page skala kecil sampai menengah. Kalau traffic mulai naik signifikan atau ukuran database membesar, tinggal upgrade ke paket qVM di atasnya tanpa perlu instalasi ulang.

Tahapan

1. Update dan Upgrade OS Ubuntu 24.04 LTS

Lakukan update dan upgrade pada sistem operasi Ubuntu 24.04 LTS terlebih dahulu, sebelum memulai instalasi service lainnya.

bash
apt update && sudo apt upgrade -y

SCR-20260815-rcnm

2. Instalasi Nginx

Ada dua opsi instalasi Nginx di Ubuntu 24.04 LTS. Pilih salah satu saja.

Opsi 1: Install dari Repository Resmi Ubuntu

Cara paling simpel, langsung dari repository bawaan Ubuntu. Cukup jalankan satu baris perintah berikut:

bash
apt install nginx -y

Opsi 2: Install dari Repository Resmi Nginx.org

Repository bawaan Ubuntu biasanya membawa versi Nginx yang lebih lawas dibanding versi terbaru dari nginx.org. Kalau butuh versi terbaru langsung dari pengembang Nginx, gunakan repository resmi nginx.org. Install dependency yang dibutuhkan:

bash
apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring -y

SCR-20260815-rdob

Unduh dan import GPG key resmi Nginx:

bash
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

SCR-20260815-rdxk

Verifikasi fingerprint key yang baru diimport supaya cocok dengan fingerprint resmi yang dipublikasikan di dokumentasi nginx.org, sebelum key ini dipercaya untuk verifikasi paket:

bash
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

SCR-20260815-rhfv

Tambahkan repository nginx.org:

bash
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

SCR-20260815-rdxk

Set pinning supaya paket dari nginx.org selalu diprioritaskan dibanding paket bawaan Ubuntu saat apt upgrade, mencegah Nginx ke-downgrade balik ke versi repo Ubuntu:

bash
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

SCR-20260815-rfsu

Update dan install:

bash
apt update
apt install nginx -y

SCR-20260815-rgqb

Cek build info untuk memastikan Nginx yang terinstall benar dari nginx.org:

bash
nginx -V

SCR-20260815-rjhi

Verifikasi Instalasi (berlaku untuk kedua opsi)

Set Nginx supaya otomatis running saat qVM reboot, lalu cek statusnya:

bash
systemctl enable nginx
systemctl status nginx

SCR-20260815-rjrp

Kalau statusnya active (running), Nginx sudah bisa dipakai. Buka http://<IP-qVM> di browser, akan muncul halaman default "Welcome to nginx!".

SCR-20260815-rjvp

3. Instalasi MySQL Server

MySQL digunakan untuk menyimpan seluruh data aplikasi dalam bentuk database relasional. Untuk melakukan instalasi MySQL gunakan perintah berikut:

bash
apt install mysql-server -y

Kalau lebih memilih MariaDB (drop-in replacement MySQL, sering dipakai karena tetap open source penuh), ganti perintah di atas dengan:

bash
apt install mariadb-server -y

SCR-20260815-rkof

Anda dapat memilih salah satu dan tidak disarankan untuk running bersama karena service MySQL dan MariaDB sama-sama berjalan di port 3306 secara default.

Set enable supaya otomatis running saat qVM reboot:

bash
systemctl enable mariadb
systemctl status mariadb

SCR-20260815-rkss

4. Amankan Instalasi Database

Jalankan script keamanan bawaan untuk mengatur password root, menghapus user anonymous, dan menonaktifkan remote login untuk root.

bash
mysql_secure_installation

Ikuti prompt yang muncul: set password root, jawab Y untuk menghapus test database, menghapus akses remote root, dan reload privilege table.

SCR-20260815-rloj

5. Instalasi PHP dan Modul/Ekstensi Pendukung

Ubuntu 24.04 LTS secara default hanya menyediakan satu versi PHP di repository resminya. Supaya VPS qVM bisa multi-PHP — install beberapa versi PHP sekaligus dan dapat menyesuaikan kebutuhan dari aplikasi Anda — tambahkan repository PPA Ondřej Surý, sumber paket PHP yang paling umum digunakan di Ubuntu.

bash
apt install software-properties-common ca-certificates apt-transport-https lsb-release -y

SCR-20260815-rnta

bash
add-apt-repository ppa:ondrej/php -y
apt update -y

SCR-20260815-roay

Berbeda dari LAMP yang pakai libapache2-mod-php, di Nginx PHP dijalankan lewat PHP-FPM, service terpisah yang diakses Nginx lewat unix socket. Instal PHP beserta paket -fpm dan modul/ekstensi yang dibutuhkan untuk terhubung ke MySQL:

Contoh instalasi PHP 8.3

bash
apt install php8.3 php8.3-fpm php8.3-mysql php8.3-cli php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip -y

SCR-20260815-rpgy

Contoh instalasi PHP 8.4

bash
apt install php8.4 php8.4-fpm php8.4-mysql php8.4-cli php8.4-curl php8.4-xml php8.4-mbstring php8.4-zip -y

SCR-20260815-rpqc

Ekstensi PHP di atas sudah mencakup kebutuhan dasar mayoritas aplikasi PHP modern (koneksi database, proses XML, string multibyte, dan lain-lain). Tambahkan ekstensi lain sesuai kebutuhan aplikasi yang akan di-deploy. Jika Anda butuh versi PHP lain berjalan berdampingan — misalnya PHP 8.1 untuk aplikasi lama yang belum kompatibel dengan versi terbaru — tinggal instal dengan pola nama paket yang sama:

bash
apt install php8.1 php8.1-fpm php8.1-mysql php8.1-cli -y

SCR-20260815-rpqc

Set enable supaya PHP-FPM otomatis running saat qVM reboot, lalu cek statusnya:

bash
systemctl enable php8.3-fpm
systemctl status php8.3-fpm

SCR-20260815-rpst

Kelebihan PHP-FPM dibanding mod_php di Apache: tiap versi PHP jalan sebagai service dan socket sendiri-sendiri (/run/php/php8.3-fpm.sock, /run/php/php8.4-fpm.sock, dst), jadi beberapa versi PHP bisa aktif bersamaan tanpa perlu switch modul global — tinggal arahkan tiap server block Nginx ke socket versi PHP yang diinginkan.

Untuk PHP CLI (dipanggil lewat terminal), atur versi default dengan:

bash
update-alternatives --config php

SCR-20260815-rqsz

6. Konfigurasi Nginx untuk File PHP

Server block langsung dibuat untuk domain studi kasus lemp.sequel.web.id, agar konfigurasi tidak perlu dilakukan dua kali pada tahap berikutnya. Path konfigurasi mengikuti opsi instalasi Nginx yang dipilih pada tahap 2:

Opsi 1 (repository resmi Ubuntu): menggunakan struktur sites-available/sites-enabled bawaan paket Ubuntu Opsi 2 (repository resmi nginx.org): menggunakan struktur conf.d/ secara langsung, tanpa sites-available/sites-enabled

Silakan pointing terlebih dahulu subdomain atau domain yang ingin Anda gunakan ke Publik IP qVM Anda contoh

SCR-20260815-sgab

Jika sudah, selanjutnya buat terlebih dahulu direktori project dan atur kepemilikannya:

bash
mkdir -p /var/www/landingpage
chown -R $USER:$USER /var/www/landingpage

Untuk Opsi 1 (repository resmi Ubuntu)

Buat file server block:

bash
vim /etc/nginx/sites-available/lemp.sequel.web.id.conf

Isi dengan konfigurasi berikut:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name lemp.sequel.web.id;

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

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

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

    location ~ /\.ht {
        deny all;
    }

    access_log /var/log/nginx/landingpage_access.log;
    error_log /var/log/nginx/landingpage_error.log;
}

Aktifkan dengan symlink ke sites-enabled:

bash
ln -s /etc/nginx/sites-available/lemp.sequel.web.id.conf /etc/nginx/sites-enabled/

Untuk Opsi 2 (repository resmi nginx.org)

Buat file server block langsung di conf.d/ — direktori ini otomatis ter-load, sehingga tidak memerlukan symlink tambahan:

bash
vim /etc/nginx/conf.d/lemp.sequel.web.id.conf

Isi dengan konfigurasi berikut. Paket nginx.org tidak menyertakan snippets/fastcgi-php.conf seperti paket Ubuntu, sehingga parameter FastCGI ditulis manual:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name lemp.sequel.web.id;

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

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

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    access_log /var/log/nginx/landingpage_access.log;
    error_log /var/log/nginx/landingpage_error.log;
}

SCR-20260815-sfah

Sesuaikan socket php8.3-fpm.sock pada kedua opsi di atas dengan versi PHP yang digunakan.

Uji konfigurasi sebelum melakukan reload, agar kesalahan penulisan (syntax error) dapat terdeteksi lebih awal tanpa menyebabkan Nginx berhenti berfungsi:

bash
nginx -t
systemctl reload nginx

SCR-20260815-sfir

7. Uji Instalasi PHP

Buat file pengujian untuk memastikan PHP-FPM sudah terhubung dengan Nginx.

bash
vim /var/www/landingpage/info.php

Isi dengan:

php
<?php
phpinfo();
?>

Akses http://lemp.sequel.web.id/info.php melalui browser. Apabila halaman informasi konfigurasi PHP tampil, berarti seluruh stack (Nginx, PHP-FPM, dan koneksi ke MySQL) sudah berjalan dengan benar.

SCR-20260815-sgsr

File di atas hanya digunakan untuk pengujian. Setelah berhasil, hapus file info.php tersebut karena berisi informasi konfigurasi server yang sensitif apabila diakses secara publik.

bash
rm /var/www/landingpage/info.php

8. Instalasi phpMyAdmin

phpMyAdmin digunakan untuk mengelola database MySQL melalui browser, tanpa harus selalu masuk melalui command line.

bash
apt install phpmyadmin -y

SCR-20260815-shrx

Saat instalasi berjalan akan muncul beberapa prompt konfigurasi:

Pada pilihan web server, jangan pilih apa pun — langsung Tab ke <Ok> lalu Enter. Paket phpMyAdmin hanya menyediakan konfigurasi otomatis untuk Apache dan Lighttpd, tidak untuk Nginx, sehingga konfigurasi Nginx perlu dilakukan secara manual. Pilih Yes untuk mengonfigurasi database melalui dbconfig-common

SCR-20260815-shjx

Masukkan password untuk user aplikasi phpMyAdmin saat diminta SCR-20260815-shmn SCR-20260815-shos

Tambahkan konfigurasi manual ke server block yang sudah dibuat pada tahap 6, agar path /phpmyadmin diarahkan ke lokasi file phpMyAdmin (/usr/share/phpmyadmin). Edit file server block sesuai opsi instalasi Nginx yang dipilih pada tahap 2:

bash
# Opsi 1 (repository resmi Ubuntu)
vim /etc/nginx/sites-available/lemp.sequel.web.id.conf
bash
# Opsi 2 (repository resmi nginx.org)
vim /etc/nginx/conf.d/lemp.sequel.web.id.conf

Tambahkan block berikut di dalam server { ... }, sebelum tanda kurung kurawal penutup terakhir:

nginx
location /phpmyadmin {
    root /usr/share/;
    index index.php index.html index.htm;

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

    location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
        root /usr/share/;
    }
}

SCR-20260815-skci

Uji dan reload konfigurasi:

bash
nginx -t
systemctl reload nginx

Akses melalui http://lemp.sequel.web.id/phpmyadmin, login menggunakan user root MySQL beserta password yang sudah ditentukan pada tahap 4.

SCR-20260815-sknh SCR-20260815-skoq

9. Studi Kasus: Deploy Landing Page (PHP + HTML)

Server block dan direktori project untuk domain lemp.sequel.web.id sudah dibuat pada tahap 6. Selanjutnya, isi halaman utama dengan kombinasi HTML statis dan satu bagian PHP dinamis:

bash
vim /var/www/landingpage/index.php
php
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <title>Landing Page</title>
</head>
<body>
    <h1>Selamat Datang</h1>
    <p>Landing page ini berjalan di atas LEMP Stack, paket qVM-2.</p>
    <footer>
        <p>&copy; <?php echo date("Y"); ?> — Semua hak cipta dilindungi.</p>
    </footer>
</body>
</html>

![SCR-20260815-skyl](https://kb.sequel.id/s3/kb-sequel/media/cf27e0bd-829a-4299-a13a-967083e09976.webp)

Bagian HTML tetap statis seperti biasa, sementara tag `<?php echo date("Y"); ?>` membuat tahun pada footer diperbarui secara otomatis tanpa perlu diedit manual setiap tahun — contoh sederhana mengapa PHP dan HTML sering digabungkan dalam satu file.

Tidak ada perubahan konfigurasi Nginx yang perlu dimuat ulang pada tahap ini karena server block sudah aktif sejak tahap 6. Akses http://lemp.sequel.web.id — landing page sudah dapat dibuka melalui domain sendiri.

![SCR-20260815-slfs](https://kb.sequel.id/s3/kb-sequel/media/a58c30c2-947a-4e64-b2f1-8b5be5660130.webp)

### 10. Konfigurasi SSL dengan Let's Encrypt

Untuk memperoleh SSL gratis, Certbot dapat digunakan. Instal terlebih dahulu beserta plugin Nginx-nya untuk otomatisasi penerbitan dan pemasangan SSL.

```bash
apt install certbot python3-certbot-nginx -y

SCR-20260815-slkh

Jalankan Certbot dan arahkan ke domain yang digunakan:

bash
certbot --nginx -d lemp.sequel.web.id

Certbot akan meminta email untuk notifikasi perpanjangan, konfirmasi persetujuan term of service, kemudian menawarkan opsi redirect otomatis dari HTTP ke HTTPS — pilih opsi redirect agar seluruh trafik diteruskan melalui HTTPS. Plugin ini secara otomatis mengedit server block yang sudah dibuat pada tahap 6 untuk menambahkan blok listen 443 ssl beserta path sertifikat.

SCR-20260815-slvm

Sertifikat Let's Encrypt berlaku 90 hari dan diperpanjang otomatis melalui systemd timer bawaan Certbot. Periksa terlebih dahulu apakah mekanisme perpanjangan (renewal) berjalan dengan normal:

bash
certbot renew --dry-run

SCR-20260815-smdk

Setelah tahap ini, https://lemp.sequel.web.id sudah dapat diakses dengan koneksi terenkripsi SSL. Begitu juga untuk /phpmyadmin pada domain yang sama otomatis ikut terenkripsi karena berada pada server block yang sama.

SCR-20260815-smhs SCR-20260815-smjv

Kesimpulan

Sampai tahap ini, VPS qVM-2 (1 core, 2 GiB RAM, 50 GiB storage) telah memiliki LEMP Stack lengkap: Nginx, MySQL, PHP-FPM multi-versi, dan phpMyAdmin untuk manajemen database melalui browser. Studi kasus landing page (kombinasi HTML statis dan PHP dinamis) berhasil di-deploy melalui server block terpisah dan telah diamankan dengan SSL gratis dari Let's Encrypt beserta redirect otomatis ke HTTPS. Konfigurasi ini sudah memadai untuk digunakan pada landing page skala kecil hingga menengah dalam lingkungan production; untuk aplikasi yang lebih besar, langkah lanjutan yang disarankan adalah membuat user database khusus per aplikasi (bukan menggunakan root), memisahkan pool PHP-FPM per aplikasi, dan menambahkan server block baru untuk setiap domain/aplikasi berikutnya.

Mulai Kelola Infrastruktur Cloud Anda

Akun Sequel Anda siap untuk memesan & mengelola layanan cloud.

Bagikan
Apakah artikel ini membantu?