Apa yang bisa kami bantu?

A. Pendahuluan

LEMP Stack adalah kumpulan perangkat lunak yang umum digunakan untuk menjalankan aplikasi dan website berbasis web pada server Linux. LEMP merupakan singkatan dari Linux, Nginx, MySQL/MariaDB, dan PHP. Kombinasi ini banyak dipilih karena ringan, cepat, dan stabil untuk kebutuhan pengembangan maupun produksi.

Pada artikel ini, proses instalasi LEMP Stack dilakukan di Ubuntu 24 menggunakan bash script agar tahapan instalasi menjadi lebih cepat, konsisten, dan mudah diulang. Dengan pendekatan otomatisasi ini, administrator sistem maupun developer dapat mengurangi kesalahan konfigurasi manual serta mempercepat proses penyediaan server.

 

B. Konfigurasi

Sebelum melakukan konfigurasi , penulis telah menyiapkan 1 VM(server) dengan spesifikasi 
vCpu : 2core
RAM : 2Gb

Sebelum memulai proses instalasi, pastikan server/VM yang akan digunakan telah dilakukan update sistem operasi agar seluruh package berada pada versi terbaru dan kompatibel dengan proses instalasi.

A. Pre-Installasi

Pada tahap ini, dilakukan pembuatan bash script yang digunakan untuk mengotomatisasi proses instalasi LEMP Stack di Ubuntu 24. Dengan menggunakan script, proses instalasi menjadi lebih cepat, terstruktur, dan meminimalkan kesalahan yang dapat terjadi saat konfigurasi dilakukan secara manual.
 

Berikut merupakan contoh pembuatan bash script untuk instalasi LEMP Stack pada Ubuntu 24. Pertama, buat file script terlebih dahulu, lalu edit isinya menggunakan text editor

#!/bin/bash
# Menentukan interpreter yang digunakan untuk menjalankan script ini, yaitu bash

set -e
# Menghentikan eksekusi script jika ada perintah yang gagal

# ==========================================
# KONFIGURASI AWAL
# Silakan ubah nilai variabel di bawah ini
# sesuai kebutuhan sebelum script dijalankan
# ==========================================

DOMAIN="isi_nama_domain_anda"
# Menentukan nama domain yang akan dikonfigurasi
# Contoh: DOMAIN="example.com"

WEBROOT="/var/www/$DOMAIN/public_html"
# Menentukan lokasi document root website berdasarkan domain

PHPVER="8.3"
# Menentukan versi PHP yang akan digunakan
# Contoh: PHPVER="8.3"

DB_NAME="set_nama_database"
# Menentukan nama database yang akan dibuat
# Contoh: DB_NAME="example_db"

DB_USER="set_user_database"
# Menentukan nama user database yang akan dibuat
# Contoh: DB_USER="example_user"

DB_PASS="set_password_database"
# Menentukan password untuk user database
# Contoh: DB_PASS="PasswordAman123!"

# ==========================================
# KONFIGURASI AKHIR
# Tidak perlu diubah jika menggunakan
# skenario instalasi standar
# ==========================================

echo "== Update system =="
# Menampilkan informasi bahwa proses update sistem dimulai

sudo apt update && sudo apt upgrade -y
# Memperbarui daftar repository dan meng-upgrade package sistem secara otomatis

echo "== Install Nginx =="
# Menampilkan informasi bahwa proses instalasi Nginx dimulai

sudo apt install -y nginx
# Menginstal web server Nginx

echo "== Install MariaDB =="
# Menampilkan informasi bahwa proses instalasi MariaDB dimulai

sudo apt install -y mariadb-server mariadb-client
# Menginstal MariaDB server dan client

echo "== Install PHP and extensions =="
# Menampilkan informasi bahwa proses instalasi PHP dan extension dimulai

sudo apt install -y php$PHPVER-fpm php$PHPVER-cli php$PHPVER-mysql \
php$PHPVER-curl php$PHPVER-mbstring php$PHPVER-xml php$PHPVER-zip \
php$PHPVER-gd php$PHPVER-intl unzip curl
# Menginstal PHP-FPM, PHP CLI, dan ekstensi yang dibutuhkan

echo "== Enable services =="
# Menampilkan informasi bahwa service akan diaktifkan saat boot

sudo systemctl enable nginx
# Mengaktifkan service Nginx agar berjalan otomatis saat server boot

sudo systemctl enable mariadb
# Mengaktifkan service MariaDB agar berjalan otomatis saat server boot

sudo systemctl enable php$PHPVER-fpm
# Mengaktifkan service PHP-FPM agar berjalan otomatis saat server boot

echo "== Restart services =="
# Menampilkan informasi bahwa service akan direstart

sudo systemctl restart nginx
# Merestart service Nginx

sudo systemctl restart mariadb
# Merestart service MariaDB

sudo systemctl restart php$PHPVER-fpm
# Merestart service PHP-FPM

echo "== Create web root =="
# Menampilkan informasi bahwa direktori web root akan dibuat

sudo mkdir -p "$WEBROOT"
# Membuat direktori web root beserta parent directory jika belum ada

sudo chown -R $USER:$USER /var/www/$DOMAIN
# Mengubah kepemilikan direktori website ke user yang sedang menjalankan script

sudo chmod -R 755 /var/www/$DOMAIN
# Memberikan permission agar direktori dapat diakses dengan aman

echo "== Create test PHP file =="
# Menampilkan informasi bahwa file uji PHP akan dibuat

cat > /tmp/index.php <<EOF
<?php
\$conn = new mysqli("localhost", "$DB_USER", "$DB_PASS", "$DB_NAME");
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>$DOMAIN</title>
</head>
<body>
    <h1>LEMP Stack berhasil - $DOMAIN</h1>
    <p>Website berhasil dikonfigurasi pada Ubuntu 24.</p>

    <?php if (\$conn->connect_error): ?>
        <p style="color:red;">Database connection failed: <?php echo \$conn->connect_error; ?></p>
    <?php else: ?>
        <p style="color:green;">Database connection success</p>
    <?php endif; ?>
</body>
</html>
EOF
# Membuat file index.php sederhana untuk pengujian PHP dan koneksi database

sudo mv /tmp/index.php "$WEBROOT/index.php"
# Memindahkan file index.php ke web root website

echo "== Create Nginx server block for domain =="
# Menampilkan informasi bahwa konfigurasi server block domain akan dibuat

sudo tee /etc/nginx/sites-available/$DOMAIN > /dev/null <<EOF
server {
    listen 80;
    listen [::]:80;

    server_name $DOMAIN www.$DOMAIN;

    root $WEBROOT;
    index index.php index.html index.htm;

    access_log /var/log/nginx/${DOMAIN}_access.log;
    error_log /var/log/nginx/${DOMAIN}_error.log;

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

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

    location ~ /\.ht {
        deny all;
    }
}
EOF
# Membuat file konfigurasi Nginx untuk domain utama

echo "== Create default deny server block =="
# Menampilkan informasi bahwa blok default untuk menolak akses via IP akan dibuat

sudo tee /etc/nginx/sites-available/default-deny > /dev/null <<EOF
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
EOF
# Membuat konfigurasi default Nginx untuk menolak semua akses selain domain yang dikonfigurasi

echo "== Enable Nginx site =="
# Menampilkan informasi bahwa site Nginx akan diaktifkan

sudo ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN
# Mengaktifkan konfigurasi domain

sudo ln -sf /etc/nginx/sites-available/default-deny /etc/nginx/sites-enabled/default-deny
# Mengaktifkan konfigurasi penolakan akses via IP/default host

sudo rm -f /etc/nginx/sites-enabled/default
# Menghapus konfigurasi default bawaan Nginx agar tidak bentrok

echo "== Test Nginx config =="
# Menampilkan informasi bahwa konfigurasi Nginx akan diuji

sudo nginx -t
# Melakukan pengecekan syntax konfigurasi Nginx

echo "== Reload Nginx =="
# Menampilkan informasi bahwa service Nginx akan dimuat ulang

sudo systemctl reload nginx
# Memuat ulang konfigurasi Nginx tanpa menghentikan service

echo "== Create MariaDB database and user =="
# Menampilkan informasi bahwa database dan user MariaDB akan dibuat

sudo mariadb <<EOF
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\`;
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOF
# Membuat database, user, dan memberikan hak akses ke database

echo ""
# Menampilkan baris kosong

echo "========================================="
# Menampilkan garis pemisah output

echo "INSTALLATION COMPLETE"
# Menampilkan informasi bahwa instalasi selesai

echo "========================================="
# Menampilkan garis pemisah output

echo "Domain      : $DOMAIN"
# Menampilkan domain yang dikonfigurasi

echo "Web Root    : $WEBROOT"
# Menampilkan lokasi web root website

echo "DB Name     : $DB_NAME"
# Menampilkan nama database

echo "DB User     : $DB_USER"
# Menampilkan nama user database

echo "DB Password : $DB_PASS"
# Menampilkan password database

echo ""
# Menampilkan baris kosong

echo "Open:"
# Menampilkan informasi alamat yang bisa diakses

echo "http://$DOMAIN"
# Menampilkan URL domain

echo ""
# Menampilkan baris kosong

echo "Next:"
# Menampilkan langkah lanjutan setelah instalasi

echo "1. Pastikan DNS A record domain sudah mengarah ke server"
# Mengingatkan untuk mengarahkan DNS domain ke server

echo "2. Jalankan sudo mysql_secure_installation"
# Mengingatkan untuk menjalankan pengamanan awal MariaDB

echo "========================================="
# Menampilkan garis penutup output.

 

Script di atas merupakan contoh otomatisasi instalasi LEMP Stack pada Ubuntu 24. Sebelum script dijalankan, harap dilakukan pengecekan dan penyesuaian terlebih dahulu menggunakan text editor agar sesuai dengan kebutuhan environment yang digunakan.

Beberapa bagian yang perlu diperiksa dan diedit antara lain:
- Versi PHP yang akan digunakan
- Nama domain yang akan dikonfigurasi
- Path direktori website / web root
- Nama database
- Username database
- Password database / kredensial database
- Path konfigurasi Nginx
- Socket PHP-FPM yang digunakan
- Struktur direktori website apabila berbeda dengan contoh pada script

Pastikan seluruh parameter tersebut sudah sesuai sebelum proses eksekusi dilakukan. Hal ini penting untuk menghindari kegagalan instalasi, kesalahan konfigurasi service, maupun ketidaksesuaian dengan standar environment server yang digunakan.
Apabila script akan digunakan pada environment production, disarankan untuk melakukan review ulang konfigurasi dan pengujian terlebih dahulu pada server staging atau testing.

B. Installasi

Setelah dilakukan penyesuaian pada isi bash script, tahap selanjutnya adalah menjalankan proses instalasi. Proses ini akan memasang dan mengonfigurasi komponen LEMP Stack secara otomatis sesuai parameter yang telah ditentukan.

Buat file baru yang akan digunakan untuk menyimpan bash script instalasi yang telah dibuat sebelumnya.
 

Gambar 1.0 Buat File Bash.

Setelah file bash dibuat di server, lakukan copy dan paste isi script yang sebelumnya telah disiapkan pada text editor ke dalam file tersebut.

Gambar 1.1 Isi Script Bash.

Setelah seluruh isi script ditempelkan, simpan file dengan menekan tombol Esc, kemudian ketik :wq untuk menyimpan perubahan dan keluar dari editor.


Selanjutnya, berikan permission execute pada file script agar dapat dijalankan.

chmod +x $nama File bash script yang sudah dibuat

Gambar 1.2 Permission Executable.

Setelah permission execute diberikan, jalankan bash script untuk memulai proses instalasi LEMP Stack pada server.
./$nama File bash script yang sudah dibuat

Gambar 1.3 Eksekusi Bash Script

Selanjutnya, tunggu hingga proses instalasi dan konfigurasi LEMP Stack selesai dijalankan oleh script.

Gambar 1.4 Proses Instalasi LEMP Stack.

Pada saat menjalankan bash script, sistem mungkin akan menampilkan prompt konfirmasi terkait pembaruan file konfigurasi, seperti pada file /etc/cloud/cloud.cfg

Gambar 1.5 Konfirmasi Pembaharuan.


Apabila notifikasi tersebut muncul, silakan pilih opsi Y untuk melanjutkan proses instalasi menggunakan versi file konfigurasi terbaru dari package. Jika tidak ingin pembaharuan bisa pilih opsi N

Setelah seluruh proses instalasi dan konfigurasi selesai dijalankan, sistem akan menampilkan informasi hasil eksekusi seperti berikut.

 

C. Uji Coba

Silakan akses alamat domain secara langsung melalui web browser untuk memastikan website telah berhasil dikonfigurasi.
 

Gambar 2.0 Uji Coba Akses Domain.

 

C. Kesimpulan

Instalasi LEMP Stack pada Ubuntu 24 dapat dilakukan dengan lebih cepat dan efisien menggunakan bash script. Dengan metode ini, proses pemasangan dan konfigurasi layanan seperti Nginx, MariaDB, dan PHP dapat berjalan secara otomatis sehingga mengurangi potensi kesalahan saat dilakukan secara manual.

Meskipun demikian, sebelum script dijalankan, seluruh parameter konfigurasi tetap perlu diperiksa dan disesuaikan terlebih dahulu, seperti nama domain, versi PHP, kredensial database, path direktori website, serta konfigurasi Nginx. Dengan persiapan dan penyesuaian yang tepat, LEMP Stack dapat terpasang dengan baik dan siap digunakan untuk kebutuhan hosting website atau aplikasi berbasis PHP pada Ubuntu 24.

Semoga artikel yang telah kami sampaikan dapat membantu Anda. Anda juga dapat menemukan artikel lainnya melalui halaman Knowledge Base Biznet Gio. Jika Anda masih memiliki kendala teknis terkait dengan layanan Biznet GIO, Anda dapat menghubungi kami melalui email support@biznetgio.com atau dapat melalui live chat di website Biznet GIO, melalui chat WhatsApp dan bisa juga melalui telepon ke nomor (021) 5714567