Laravel

Cara Install Laravel di Ubuntu Server (LEMP Stack + SSL)

06 Jun 2026 Administrator
Header Hero

Cara Install Laravel di Ubuntu Server (LEMP Stack + SSL)

Panduan Produksi: Konfigurasi Nginx, Optimasi PHP-FPM, Sekuritisasi MySQL, dan Otomatisasi SSL Let's Encrypt

Melakukan instalasi framework Laravel di lingkungan **Ubuntu Server** dengan standarisasi produksi memerlukan persiapan tumpukan perangkat lunak (*software stack*) yang matang. Dibandingkan menggunakan Apache, mengombinasikan Laravel dengan LEMP Stack (Linux, Nginx, MySQL, PHP-FPM) adalah arsitektur yang sangat direkomendasikan oleh para profesional server administrator. Nginx memiliki efisiensi komputasi yang sangat tinggi dalam menangani trafik masif, sementara PHP-FPM bertindak sebagai pemroses skrip backend yang hemat memori RAM.

Panduan ini dirancang khusus untuk deployment pada VPS (Virtual Private Server) maupun Dedicated Server berbasis Ubuntu (20.04 / 22.04 / 24.04 LTS). Kita akan mengonfigurasi seluruh komponen dari nol secara berurutan, mengisolasi hak akses berkas (*file permissions*) demi keamanan siber, mengoptimalkan berkas konfigurasi PHP, hingga memasang sertifikat enkripsi **SSL HTTPS Let's Encrypt** secara otomatis guna mengamankan enkripsi data pengguna aplikasi Anda.

1. Pembarung Paket Sistem Operasi

Langkah awal yang wajib dilakukan adalah memperbarui seluruh indeks paket bawaan Ubuntu server Anda untuk memastikan dependensi keamanan berada di versi terbaru:

sudo apt update && sudo apt upgrade -y

2. Instalasi PHP dan Ekstensi Eksternal yang Diperlukan

Laravel modern membutuhkan PHP versi terbaru beserta sekumpulan modul ekstensi core untuk pemrosesan string dan enkripsi. Jalankan perintah instalasi PHP paket lengkap berikut:

# Memasang PHP-FPM beserta pustaka penunjang utama Laravel
sudo apt install php php-fpm php-mysql php-xml php-curl php-gd php-mbstring php-intl php-zip php-bcmath php-cli php-tokenizer -y

3. Pemasangan dan Sekuritisasi DBMS MySQL

Pasang engine pangkalan data MySQL server, lalu jalankan modul skrip keamanan bawaan untuk menghapus celah konfigurasi default *development*:

# Install mysql server
sudo apt install mysql-server -y

# Menjalankan wizard pengamanan database
sudo mysql_secure_installation

Saat wizard berjalan, pilih opsi respons berikut: Aktifkan *Validate Password Component* (Pilih tingkat kekuatan **2 / Medium**), buat kata sandi *root* baru, pilih **Y (Yes)** untuk menghapus akun *anonymous users*, menonaktifkan *root login* jarak jauh, menghapus database *test*, dan melakukan *reload privilege tables*.

Database Provisioning

Membuat Skema Database & User Terisolasi

Masuk ke konsol MySQL root, lalu buat database khusus beserta kredensial user sekunder demi mengamankan hak akses data:

sudo mysql

-- Membuat database dengan enkode karakter full unicode emoji
CREATE DATABASE laravel_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Membuat user dengan hak akses lokal terproteksi
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'PasswordKuatAnda123!';

-- Memberikan privilese penuh hanya pada database laravel_app
GRANT ALL PRIVILEGES ON laravel_app.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

4. ]nstalasi Web Server Nginx dan PHP Composer

Pasang biner Nginx core, dilanjutkan dengan mengunduh skrip instalasi manager dependensi PHP Composer secara global:

# Memasang web server Nginx
sudo apt install nginx curl -y

# Mengunduh dan menaruh Composer ke dalam direktori sistem global agar bisa dipanggil langsung
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

5. Deployment Framework Laravel via Composer

Buat direktori kerja baru di dalam folder root web server Linux, sesuaikan kepemilikan grup user awal, lalu unduh core project Laravel:

# 1. Membuat folder aplikasi target
sudo mkdir -p /var/www/laravel-app
sudo chown -R $USER:www-data /var/www/laravel-app

# 2. Masuk ke direktori dan trigger pembuatan proyek laravel baru
cd /var/www/laravel-app
composer create-project laravel/laravel . --prefer-dist
Environment & Security

6. Sinkronisasi Kredensial .env & Proteksi Hak Akses

Salin file contoh berkas lingkungan, generate kunci rahasia enkripsi sistem, lalu sesuaikan parameter pangkalan data database Anda:

cp .env.example .env
php artisan key:generate

Buka file .env menggunakan text editor nano, set parameter berikut ke status rilis produksi:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://domain-surya.net

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_app
DB_USERNAME=laravel_user
DB_PASSWORD=PasswordKuatAnda123!

Selanjutnya, kunci seluruh perizinan folder (*file permissions*) agar aman dari manipulasi injeksi skrip ilegal, namun berikan otorisasi tulis penuh khusus folder penyimpanan cache logs:

# Mengembalikan grup pemilik utama ke user web server nginx (www-data)
sudo chown -R www-data:www-data /var/www/laravel-app

# Set standardisasi hak akses direktori (755) dan berkas file (644)
sudo find /var/www/laravel-app -type d -exec chmod 755 {} \;
sudo find /var/www/laravel-app -type f -exec chmod 644 {} \;

# Memberikan hak tulis untuk folder runtime logs dan kompilasi view blade
sudo chmod -R 775 /var/www/laravel-app/storage
sudo chmod -R 775 /var/www/laravel-app/bootstrap/cache

7. Konfigurasi Virtual Host Nginx untuk Laravel

Buat berkas konfigurasi *Server Block* baru untuk mengarahkan dokumen root server ke folder public Laravel harian:

sudo nano /etc/nginx/sites-available/laravel-app

Tempel struktur parameter konfigurasi RESTful berikut (Ganti parameter domain-surya.net menggunakan nama domain asli Anda):

server {
    listen 80;
    server_name domain-surya.net www.domain-surya.net;
    root /var/www/laravel-app/public; # Kunci Keamanan: Wajib arahkan ke folder public!

    index index.php index.html;
    charset utf-8;

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

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

    error_page 404 /index.php;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # Pastikan string versi php-fpm.sock di bawah ini sesuai dengan versi php server Anda
        fastcgi_pass unix:/var/run/php/php-fpm.sock;
    }

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

Aktifkan konfigurasi baru dengan membuat pintasan tautan (*symbolic link*), lakukan pengujian sintaks, lalu muat ulang server Nginx:

sudo ln -s /etc/nginx/sites-available/laravel-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

8. Pemasangan Sertifikat Keamanan SSL Let's Encrypt

Gunakan pustaka otomasi Certbot untuk mengklaim sertifikat enkripsi SSL HTTPS gratis yang diakui secara global:

# Memasang dependensi certbot nginx client
sudo apt install certbot python3-certbot-nginx -y

# Memicu klaim otomatisasi SSL domain
sudo certbot --nginx -d domain-surya.net -d www.domain-surya.net

Ikuti instruksi interaktif di terminal: Masukkan email Anda, setujui syarat layanan, dan **pilih opsi nomor 2 (Redirect)** untuk memaksa seluruh lalu lintas trafik HTTP biasa dialihkan secara otomatis ke jalur enkripsi aman HTTPS.

9. Migrasi Tabel Database & Aktivasi Cron Task Scheduler

Langkah penutup pengembangan adalah menyinkronkan tabel database bawaan aplikasi serta menyalakan mesin penjadwalan berkala (*cron job system*) bawaan Laravel:

# Menjalankan struktur file migrasi awal pembentuk skema tabel
php artisan migrate --force

# Membuka penjadwalan sistem internal crontab Linux server
crontab -e

# Tempel baris perintah makro task scheduler ini di baris paling bawah berkas crontab:
* * * * * cd /var/www/laravel-app && php artisan schedule:run >> /dev/null 2>&1
Protokol Keamanan & Perbaikan Galat Tambahan VPS Server

Selama siklus operasional di server VPS harian, pastikan Anda mencatat beberapa penanganan penting berikut:

  • Mengatasi Galat "502 Bad Gateway": Jika browser menampilkan error 502, hal ini mengindikasikan layanan PHP-FPM Anda mati atau penulisan nama file socket di baris fastcgi_pass Nginx tidak sinkron. Periksa status PHP-FPM lewat perintah terminal:
    sudo systemctl status php*-fpm
  • Selalu Amankan Dinding Api Firewall (UFW): Batasi akses port luar server VPS Anda hanya untuk port esensial publik. Nyalakan sistem keamanan firewall Ubuntu lewat rangkaian eksekusi berikut:
    sudo ufw allow 'OpenSSH' && sudo ufw allow 'Nginx Full' && sudo ufw enable
  • Optimasi Cache Konfigurasi Produksi: Setiap kali Anda melakukan perubahan string kode pada berkas .env atau rute web, core engine tidak akan langsung memperbaruinya jika cache aktif. Bersihkan dan kunci ulang memori cache lewat perintah terintegrasi:
    php artisan config:cache && php artisan route:cache && php artisan view:cache
v