Professional IT Partner
Digital Knowledge Base

Panduan Definitif Deploy Laravel di VPS Ubuntu 24.04 dengan Nginx, PHP-FPM, dan Supervisor: Dari Konfigurasi Server Hingga High Availability

I
IT Musafir
26 Feb 2026, 03:27
54 Views
17 Menit Baca
3,228 Kata
Panduan Definitif Deploy Laravel di VPS Ubuntu 24.04 dengan Nginx, PHP-FPM, dan Supervisor: Dari Konfigurasi Server Hingga High Availability
Tutorial
17 Menit
3,228 Kata

Ringkasan Singkat

Tutorial ini bukan sekadar panduan "cara install Laravel". Ini adalah panduan definitif untuk membawa aplikasi Laravel Anda dari lingkungan lokal (localhost) ke server produksi yang handal, aman, dan siap menerima trafik nyata. Kita akan menggunakan stack LEMP (Linux, Nginx, MySQL/MariaDB, PHP) pada VPS dengan Ubuntu 24.04 LTS, standar industri saat ini karena stabilitas dan dukungan jangka panjangnya.

Target pembaca adalah developer Backend, DevOps pemula, atau Fullstack Engineer yang mengerti cara menulis kode Laravel tapi bingung bagaimana menyajikannya ke dunia luar dengan benar. Output akhirnya adalah sebuah server produksi yang menjalankan Laravel dengan performa tinggi, sertifikat SSL (HTTPS), manajemen antrian (queue worker) yang otomatis restart jika crash, serta optimasi database dasar.

Perkiraan tantangan utama yang akan kita hadapi bukan hanya pada instalasi software, tetapi pada manajemen permission (hak akses file) yang kaku di Linux, konfigurasi Nginx yang sensitif terhadap routing Laravel, dan memastikan proses background (queues) berjalan terus menerus tanpa supervisi manual. Kita akan menaklukkan semua itu satu per satu.

Prasyarat

Sebelum kita menyentuh terminal, pastikan fondasi Anda sudah siap. Deploy tidak boleh dilakukan asal-asalan.

  • Hardware (VPS): Minimal 2GB RAM (disarankan 4GB agar nyaman untuk Laravel + Database + Queue), 2 vCPU, dan SSD storage minimal 40GB. GPU tidak diperlukan untuk web server standar.
  • Sistem Operasi: Ubuntu 24.04 LTS (Noble Numbat) atau 22.04 LTS. Tutorial ini berfokus pada Ubuntu 24.04 karena paket-paketnya yang paling mutakhir.
  • Software Lokal: Git, SSH Client (seperti Putty di Windows atau Terminal bawaan di Linux/Mac), dan Text Editor (VS Code).
  • Pengetahuan Dasar: Pemahaman dasar baris perintah Linux (CLI), konsep DNS (A Record), dan cara kerja HTTP Request. Anda harus tahu apa itu VPS dan memiliki akses root atau user dengan sudo privilege.
  • Aplikasi Laravel: Aplikasi Anda sudah siap, versi Laravel 10 atau 11, dan sudah di-push ke repository Git (GitHub, GitLab, atau Bitbucket).
  • Tools Tambahan: Pengetahuan dasar tentang konfigurasi .env Laravel.

Langkah 1: Persiapan Server dan Hardening Keamanan Dasar

Tujuan Langkah:
Membersihkan server, mengamankan akses SSH, dan memastikan sistem operasi dalam kondisi terbaru sebelum kita menginstal aplikasi.

Alasan Teknis:
VPS "fresh install" seringkali memiliki port yang terbuka lebar dan paket software yang usang. Langkah ini mencegah serangan brute-force awal dan memastikan kompatibilitas dependensi. Keamanan adalah lapisan pertama, bukan yang terakhir.

Cara Melakukannya:
Pertama, login ke server Anda melalui SSH. Gantilah password root Anda jika Anda masih menggunakan default dari provider VPS.

Update paket sistem:

sudo apt update && sudo apt upgrade -y

Selanjutnya, kita perlu membuat user khusus untuk deploy. Login sebagai root untuk aktivitas sehari-hari itu berbahaya. Kita buat user baru, misalnya deployer:

adduser deployer usermod -aG sudo deployer

Kita akan mengunci akses SSH password dan hanya mengizinkan kunci publik (SSH Key) agar jauh lebih aman. Edit konfigurasi SSH:

sudo nano /etc/ssh/sshd_config

Cari baris PasswordAuthentication dan ubah menjadi no. Pastikan PubkeyAuthentication bernilai yes. Jika Anda belum mengupload SSH key lokal Anda ke server, lakukan ini sebelum logout sebagai root.

Copy public key dari komputer lokal Anda (biasanya di ~/.ssh/id_rsa.pub) ke dalam file ~/.ssh/authorized_keys pada user deployer di server.

Konfigurasi Firewall dasar menggunakan UFW (Uncomplicated Firewall). Kita hanya butuh port SSH (22), HTTP (80), dan HTTPS (443):

sudo ufw allow OpenSSH sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable

Indikator Berhasil:
Anda bisa login sebagai user deployer tanpa password (menggunakan SSH key), perintah sudo berjalan tanpa hambatan, dan sudo ufw status menampilkan status active.

Kesalahan Umum & Troubleshooting:
Locked out of server: Ini mimpi buruk setiap engineer. Jika Anda menonaktifkan PasswordAuth sebelum upload SSH key, Anda tidak bisa masuk. Solusi: Gunakan console VPS (VNC/Web Console) dari provider Anda untuk login sebagai root dan memperbaiki konfigurasi sshd.

Ilustrasi konfigurasi firewall UFW untuk keamanan server Laravel

Langkah 2: Instalasi Repository dan PHP-FPM

Tujuan Langkah:
Menginstal PHP versi terbaru (disarankan 8.2 atau 8.3) beserta ekstensi yang wajib dimiliki Laravel, dan mengkonfigurasi PHP-FPM untuk bekerja dengan Nginx.

Alasan Teknis:
Laravel membutuhkan ekstensi PHP spesifik seperti bcmath, mbstring, xml, dan ctype. Repository default Ubuntu kadang menyediakan versi PHP yang agak tertinggal, jadi kita seringkali perlu menambahkan PPA (Personal Package Archive) dari Ondrej untuk mendapatkan versi PHP yang lebih baru. PHP-FPM (FastCGI Process Manager) jauh lebih efisien menangani high traffic dibandingkan mod_php Apache tradisional.

Cara Melakukannya:
Tambahkan repository PPA ondrej/php:

sudo apt install software-properties-common -y sudo add-apt-repository ppa:ondrej/php -y sudo apt update

Instal PHP dan ekstensi wajib. Saya sarankan PHP 8.3 untuk performa maksimal pada Laravel terbaru:

sudo apt install php8.3-fpm php8.3-common php8.3-mysql php8.3-xml php8.3-curl php8.3-zip php8.3-mbstring php8.3-bcmath php8.3-intl php8.3-gd php8.3-imagick -y

Setelah instalasi, kita perlu mengedit konfigurasi php.ini pada FPM. Lokasinya biasanya di /etc/php/8.3/fpm/php.ini. Kita perlu menyesuaikan pengaturan untuk lingkungan produksi.

sudo nano /etc/php/8.3/fpm/php.ini

Cari dan ubah baris berikut (sesuaikan dengan spesifikasi server Anda):

memory_limit = 256M upload_max_filesize = 20M post_max_size = 20M cgi.fix_pathinfo = 0

Indikator Berhasil:
Ketik php -v di terminal dan versi PHP yang muncul adalah 8.3. Service PHP-FPM harus running dengan perintah sudo systemctl status php8.3-fpm.

Kesalahan Umum & Troubleshooting:
Memory limit exhausted: Jika aplikasi Anda berat (misalnya memproses gambar besar), PHP akan crash. Naikkan memory_limit di php.ini dan restart FPM. Pastikan juga Anda mengedit php.ini yang benar (milik FPM, bukan CLI).

Langkah 3: Instalasi dan Konfigurasi Nginx

Tujuan Langkah:
Instal Nginx sebagai web server dan proxy reverse, kemudian konfigurasikan server block untuk aplikasi Laravel kita.

Alasan Teknis:
Nginx terkenal dengan kemampuannya menangani koneksi konkuren yang tinggi dengan penggunaan memori yang rendah. Tidak seperti Apache yang membuka thread baru untuk setiap request, Nginx menggunakan event-driven architecture. Ini membuatnya ideal untuk Laravel yang kerap berinteraksi dengan I/O operasi (database, file system).

Cara Melakukannya:
Instal Nginx:

sudo apt install nginx -y

Hapus konfigurasi default Nginx agar tidak konflik:

sudo rm /etc/nginx/sites-available/default sudo rm /etc/nginx/sites-enabled/default

Buat file konfigurasi baru untuk situs Anda. Mari kita namakan sesuai domain, misal laravel-app:

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

Paste konfigurasi berikut. Ini adalah konfigurasi standar yang sudah dioptimalkan untuk Laravel:

server { listen 80; listen [::]:80; server_name nama-domain-anda.com www.nama-domain-anda.com; root /var/www/laravel-app/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; 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$ { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }

Aktifkan konfigurasi ini dengan membuat symlink ke direktori sites-enabled:

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

Test konfigurasi Nginx untuk memastikan tidak ada syntax error:

sudo nginx -t

Jika outputnya successful, restart Nginx:

sudo systemctl restart nginx

Indikator Berhasil:
Perintah sudo nginx -t mengeluarkan pesan syntax is ok dan test is successful. Jika Anda mengakses IP server di browser, Anda akan melihat error 403 atau 404 (atau halaman default Nginx jika belum dihapus), yang berarti Nginx sudah berjalan tapi belum menemukan file Laravel.

Kesalahan Umum & Troubleshooting: 404 Not Found: Seringkali karena direktori root di konfigurasi Nginx salah. Pastikan path mengarah ke folder public Laravel, bukan root projectnya. 502 Bad Gateway: Ini biasanya karena PHP-FPM belum jalan atau socket path tidak cocok. Cek path fastcgi_pass harus sesuai dengan versi PHP yang terinstall.

Langkah 4: Instalasi Database (MySQL/MariaDB)

Tujuan Langkah:
Menyiapkan database engine untuk menyimpan data aplikasi secara persisten.

Alasan Teknis:
Kita membutuhkan sistem manajemen database yang andal. MariaDB adalah fork dari MySQL yang sering dianggap lebih performa dan open-source friendly, dan menjadi default di Ubuntu 24.04.

Cara Melakukannya:
Instal server MariaDB:

sudo apt install mariadb-server -y

Amankan instalasi database Anda dengan script bawaan. Ini akan menghapus user anonymous, mematikan login root dari jarak jauh, dan menghapus database test:

sudo mysql_secure_installation

Anda akan diminta menyetel kata sandi root. Pilih 'Y' untuk semua pertanyaan keamanan yang diajukan.

Login ke shell MySQL:

sudo mysql -u root -p

Buat database dan user khusus untuk aplikasi Laravel. Jangan pernah menggunakan user root di file .env aplikasi Anda.

CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'password_sangat_kuat_dan_acak'; GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES; EXIT;

Indikator Berhasil:
Anda bisa login ke MySQL menggunakan user baru yang dibuat (mysql -u laravel_user -p) dan melihat database laravel_db ketika menjalankan SHOW DATABASES;.

Kesalahan Umum & Troubleshooting: Access denied for user: Pastikan host adalah 'localhost', bukan IP server, kecuali Anda mengkonfigurasi akses remote. Pastikan juga password di .env Laravel sama persis dengan yang diatur di perintah CREATE USER.

Langkah 5: Instalasi Composer dan Git

Tujuan Langkah:
Menyiapkan dependency manager PHP dan version control system untuk menarik kode aplikasi.

Alasan Teknis:
Composer adalah jantung dari ekosistem PHP modern. Kita membutuhkannya untuk menginstal vendor/ folder. Git akan kita gunakan untuk menarik (clone) kode dari repository kita.

Cara Melakukannya:
Instal Git:

sudo apt install git -y

Instal Composer secara global. Kita gunakan script installer resminya:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"

Pindahkan file composer agar bisa dieksekusi secara global:

sudo mv composer.phar /usr/local/bin/composer

Indikator Berhasil:
Ketik composer --version dan git --version. Keduanya harus menampilkan nomor versi.

Langkah 6: Deploy Kode Aplikasi (Cloning Repository)

Tujuan Langkah:
Menempatkan kode Laravel ke direktori web root yang telah ditentukan Nginx.

Alasan Teknis:
Menggunakan Git memudahkan kita untuk update aplikasi di masa depan dengan perintah git pull, daripada meng-upload file satu per satu melalui FTP (metode kuno yang tidak efisien dan rawan error).

Cara Melakukannya:
Buat direktori root web (jika belum ada):

sudo mkdir -p /var/www/laravel-app

Ubah kepemilikan direktori tersebut ke user deployer (user yang kita buat di Langkah 1) agar kita bisa melakukan operasi git tanpa sudo:

sudo chown -R deployer:deployer /var/www/laravel-app

Pindah ke direktori tersebut:

cd /var/www/laravel-app

Clone repository Anda. Jika repositori privat, Anda harus mengatur SSH keys deployer di GitHub/GitLab terlebih dahulu.

git clone [email protected]:username/nama-repo-anda.git .

Tanda titik di akhir perintah clone berarti kita menarik isi repo langsung ke folder saat ini, tanpa membuat sub-folder baru.

Setelah clone selesai, jalankan composer install untuk mendownload semua library dependensi:

composer install --optimize-autoloader --no-dev

Flag --no-dev sangat penting di produksi karena kita tidak ingin menginstall library testing (seperti PHPUnit) yang memboroskan storage dan memperbesar serangan permukaan.

Tampilan terminal saat menjalankan composer install no dev

Indikator Berhasil:
Folder vendor/ muncul di dalam /var/www/laravel-app dan tidak ada error merah saat proses instalasi.

Kesalahan Umum & Troubleshooting: Permission denied: Jika Anda menjalankan git clone sebagai root tapi folder dimiliki deployer, akan muncul masalah permission saat file dibuat. Selalu gunakan user biasa (deployer) untuk operasi git/composer.

Langkah 7: Konfigurasi Environment dan Key Generation

Tujuan Langkah:
Menyiapkan file konfigurasi lingkungan (.env) yang sesuai dengan server produksi dan mengenkripsi session/cookie.

Alasan Teknis:
File .env di lokal Anda (komputer dev) tidak cocok untuk produksi karena URL database, cache driver, dan kredensial lainnya berbeda. Kita juga tidak boleh meng-commit file .env ke Git demi keamanan.

Cara Melakukannya:
Salin contoh file environment:

cp .env.example .env

Edit file .env dengan nano:

nano .env

Ubah baris-baris krusial berikut:

APP_ENV=production APP_DEBUG=false APP_URL=https://nama-domain-anda.com

Isi konfigurasi database sesuai dengan yang kita buat di Langkah 4:

DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=password_sangat_kuat_dan_acak

Generate Application Key. Ini wajib dilakukan agar enkripsi session dan cookie berfungsi:

php artisan key:generate

Indikator Berhasil:
Jika Anda membuka file .env, nilai APP_KEY sudah terisi string acak yang panjang.

Kesalahan Umum & Troubleshooting: APP_DEBUG=true di produksi: Ini kesalahan fatal. Jika error terjadi, user akan melihat stack trace lengkap yang mengekspos struktur database, password, dan path server Anda. Pastikan false.

Langkah 8: Manajemen Permission (Fixing Ownership)

Tujuan Langkah:
Mengatur hak akses file dan direktori agar Laravel bisa menulis ke folder storage dan cache, namun tetap aman dari eksekusi script berbahaya.

Alasan Teknis:
Laravel perlu menulis log, file session, file yang di-upload user, dan cache yang dikompilasi. Folder storage dan bootstrap/cache harus writable oleh web server (www-data), namun file kode program harus aman. Ini adalah bagian yang paling sering membingungkan bagi pemula Linux.

Cara Melakukannya:
Kita akan menggunakan user www-data (user Nginx) sebagai grup untuk semua file agar Nginx bisa membaca dan menulis ke tempat yang diperbolehkan.

Pertama, berikan kepemilikan direktori ke user www-data:

sudo chown -R www-data:www-data /var/www/laravel-app

Beri permission pada folder storage dan bootstrap/cache:

sudo chmod -R 775 /var/www/laravel-app/storage sudo chmod -R 775 /var/www/laravel-app/bootstrap/cache

Agar tidak repot melakukan chmod setiap kali kita melakukan deploy baru, kita bisa mengatur grup user deployer kita ke www-data, lalu memberikan permission write pada grup. Namun, cara paling aman dan cepat untuk tutorial ini adalah memastikan www-data memilikinya.

Jalankan perintah cache config dan routes untuk memastikan file bisa ditulis:

php artisan config:cache php artisan route:cache

Indikator Berhasil:
Perintah php artisan config:cache berhasil tanpa error "Permission denied". Website Anda sekarang seharusnya sudah bisa diakses via IP address, meskipun mungkin ada error database (jika migrasi belum dijalankan) atau belum ada SSL.

Kesalahan Umum & Troubleshooting: 500 Internal Server Error: Seringkali disebabkan permission storage yang tidak benar. Cek log Laravel di storage/logs/laravel.log. Jika ada tulisan "Permission denied", itulah penyebabnya.

Langkah 9: Migrasi Database

Tujuan Langkah:
Membuat tabel-tabel database yang didefinisikan dalam kode aplikasi (migrations).

Alasan Teknis:
Database kosong tidak berguna. Laravel menggunakan sistem migration untuk memverifikasi struktur database agar konsisten antar developer dan server produksi.

Cara Melakukannya:
Jalankan perintah migrate:

php artisan migrate --force

Flag --force diperlukan karena environment kita diset ke production. Laravel melindungi kita agar tidak sengaja menjalankan migration yang destruktif di produksi tanpa konfirmasi eksplisit.

Indikator Berhasil:
Terminal menampilkan daftar tabel yang sedang di-migrasi (Migrating: xxx) dan berakhir dengan pesan sukses hijau (atau tidak ada error merah). Cek database Anda, sekarang tabel users, migrations, dll, sudah ada.

Kesalahan Umum & Troubleshooting: SQLSTATE[HY000] [2002] Connection refused: Cek kembali konfigurasi DB di file .env. Pastikan service MySQL/MariaDB berjalan (sudo systemctl status mariadb).

Langkah 10: Implementasi SSL dengan Let's Encrypt (Certbot)

Tujuan Langkah:
Mengaktifkan HTTPS gratis menggunakan sertifikat dari Let's Encrypt untuk mengamankan data transmisi.

Alasan Teknis:
HTTP biasa mengirim data dalam teks biasa (plain text), berarti password dan data sensitif bisa di-sniffing oleh perantara jaringan. HTTPS wajib di era modern ini, ditambah browser modern akan menandai website tanpa HTTPS sebagai "Not Secure".

Cara Melakukannya:
Install Certbot dan plugin Nginx:

sudo apt install certbot python3-certbot-nginx -y

Pastikan domain Anda (misal nama-domain-anda.com) sudah diarahkan (A Record) ke IP server VPS Anda. Tanpa ini, Certbot gagal memvalidasi kepemilikan domain.

Jalankan Certbot:

sudo certbot --nginx -d nama-domain-anda.com -d www.nama-domain-anda.com

Ikuti instruksi di layar. Masukkan email untuk notifikasi kedaluwarsa cert. Pilih opsi 2: Redirect jika diminta untuk memaksa semua HTTP ke HTTPS.

Certbot akan otomatis mengedit konfigurasi Nginx yang kita buat di Langkah 3 untuk menambahkan setting SSL.

Indikator Berhasil:
Buka https://nama-domain-anda.com. Browser menampilkan gembok kecil di bilah alamat. Klik gembok tersebut, pastikan Connection is Secure.

Kesalahan Umum & Troubleshooting: Failed to connect to ... for TLS-SNI-01 challenge: Biasanya karena Firewall (UFW) memblokir port 443, atau DNS belum propagasi. Pastikan port 443 sudah di allow di UFW.

Konfigurasi Nginx SSL block otomatis oleh Certbot

Langkah 11: Mengatur Queue Worker dengan Supervisor

Tujuan Langkah:
Memastikan proses background jobs (seperti email pengiriman, pemrosesan gambar) berjalan terus menerus dan otomatis restart jika mati.

Alasan Teknis:
Laravel Queue membutuhkan proses listener yang berjalan terus-menerus. Jika Anda menjalankannya di terminal manual, proses itu mati saat Anda logout. Supervisor adalah process monitor yang menjaga proses tersebut tetap hidup (daemonized).

Cara Melakukannya:
Instal Supervisor:

sudo apt install supervisor -y

Buat file konfigurasi untuk queue worker Laravel:

sudo nano /etc/supervisor/conf.d/laravel-worker.conf

Masukkan konfigurasi berikut:

[program:laravel-worker] process_name=%(program_name)s_%(process_num)02d command=php /var/www/laravel-app/artisan queue:work --sleep=3 --tries=3 --max-time=3600 autostart=true autorestart=true user=www-data numprocs=2 redirect_stderr=true stdout_logfile=/var/www/laravel-app/storage/logs/worker.log stopwaitsecs=3600

Penjelasan singkat: numprocs=2 berarti kita menjalankan 2 worker paralel. stopwaitsecs=3600 memberi waktu 1 jam kepada worker untuk menyelesaikan job sebelum dimatikan paksa saat restart.

Mulai Supervisor dan baca konfigurasi baru:

sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*

Indikator Berhasil:
Ketik sudo supervisorctl status. Anda harus melihat status laravel-worker:laravel-worker_00 RUNNING dan laravel-worker:laravel-worker_01 RUNNING.

Kesalahan Umum & Troubleshooting: FATAL: Exited too quickly: Biasanya permission issue. Pastikan user di konfigurasi supervisor (www-data) punya akses eksekusi ke php dan file artisan.

Langkah 12: Mengatur Cron Job untuk Task Scheduling

Tujuan Langkah:
Menjalankan otomatisasi tugas terjadwal (seperti Hapus User Expired, Kirim Email Reminder) menggunakan Laravel Scheduler.

Alasan Teknis:
Laravel tidak memiliki "cron" internal yang berjalan sendiri. Kita butuh system cron Linux untuk memicu perintah php artisan schedule:run setiap menit. Laravel kemudian akan memutuskan task mana yang harus dijalankan berdasarkan schedule di file app/Console/Kernel.php.

Cara Melakukannya:
Buka crontab editor untuk user root:

sudo crontab -e

Tambahkan baris berikut di bagian paling bawah:

* * * * * cd /var/www/laravel-app && php artisan schedule:run >> /dev/null 2>&1

Perintah ini memerintahkan cron: setiap menit (* * * * *), pindah ke direktori project, lalu jalankan schedule:run.

Indikator Berhasil:
Anda bisa mengecek log aplikasi. Jika Anda punya task terjadwal yang mencatat log, log tersebut akan muncul setiap interval yang ditentukan, bukan setiap menit (karena Laravel yang mengatur frekuensinya).

Tips & Best Practice

Deploy tidak berhenti di situ aplikasi bisa diakses. Berikut adalah prinsip-prinsip profesional untuk menjaga kualitas deploy Anda:

  • Optimasi Composer: Selalu gunakan composer install --optimize-autoloader --no-dev. Ini memuat file class map lebih cepat daripada scan file system.
  • Cache Config & Routes: Di produksi, jangan biarkan Laravel memparsing file config setiap ada request. Gunakan php artisan config:cache, php artisan route:cache, dan php artisan view:cache. Ini akan meningkatkan response time secara signifikan.
  • Environment Variable Security: Pastikan file .env tidak di-commit ke Git. Tambahkan .env ke file .gitignore. Jika kebocoran data terjadi, ganti semua kunci API dan database password segera.
  • Backup Otomatis: Jangan mengandalkan RAID VPS Anda. Gunakan layanan backup atau script shell sederhana yang men-dump database dan mengirimnya ke storage object (seperti AWS S3 atau DigitalOcean Spaces) setiap malam. Kehilangan data di produksi adalah bencana karir.
  • Log Rotation: File log Laravel bisa membengkak ratusan megabyte jika tidak dipotong. Linux memiliki utilitas logrotate. Konfigurasikan di /etc/logrotate.d/ untuk memotong file log storage Laravel secara periodik.
  • Monitoring: Install tool monitoring sederhana seperti Uptime Kuma atau layanan seperti Pingdom. Anda ingin tahu jika server down sebelum klien Anda menelpon Anda.

Penutup

Selamat! Anda telah melakukan Full Stack Deploy dari aplikasi Laravel ke server produksi Ubuntu. Kita telah melewati perjalanan panjang: mulai dari mengunci pintu server (Security), memasang mesin (Nginx/PHP), memasang bahan bakar (Database), menghidupkan mesin (Artisan commands), hingga memasang pelindung dan autopilot (SSL, Supervisor, Cron).

Aplikasi Anda sekarang tidak hanya "jalan", tetapi juga tangguh. Queue worker akan menjalankan job latar belakang bahkan jika server me-restart. SSL akan melindungi data user. Nginx akan menangani ribuan request dengan efisien.

Langkah lanjutan yang logis bagi Anda sekarang adalah mempelajari tentang Load Balancing (jika trafik sudah melebihi kapasitas 1 server) dan CI/CD Pipeline (seperti GitHub Actions) agar proses deploy yang kita lakukan manual tadi bisa diotomatisasi menjadi sekali klik (atau otomatis saat push ke main branch).

Jangan takut untuk bereksperimen dengan konfigurasi, tapi selalu lakukan di staging server terlebih dahulu. Selamat berkarya, semoga aplikasi Anda sukses besar di dunia maya!

Review Pembaca

Beri penilaian dan komentar untuk artikel ini.

4.4 (10 review)
Ahmad Fauzi
26 Feb 2026

Mantap, semoga ada lanjutan topik serupa.

Arif Hidayat
11 Feb 2026

Artikelnya sangat membantu dan mudah dipahami.

Tia Kurnia
08 Feb 2026

Bagian step-by-step nya sangat membantu.

Tia Kurnia
08 Feb 2026

Bahasanya ringan tapi tetap mendalam.

Ilham Maulana
08 Feb 2026

Salah satu artikel terbaik yang saya baca minggu ini.