Semua Panduan VPSHosting & cPanelTutorial LinuxDocker & DeployWordPressDomain & DNSKeamanan ServerVPS Windows & Forex
VPSHosting.ID›Cara Deploy Laravel ke VPS dengan Nginx, PHP-FPM
Docker & Deploy

Cara Deploy Laravel ke VPS dengan Nginx, PHP-FPM, dan SSL 2026

✍️ Dewi Lestari 📅 29 Oktober 2026 ⏱️ 7 mnt baca 👁️ 0×
Cara Deploy Laravel ke VPS dengan Nginx, PHP-FPM, dan SSL 2026

Bayangkan Anda baru selesai membuat aplikasi Laravel untuk toko kecil milik kakak. Di laptop semuanya lancar. Lalu muncul pertanyaan klasik: ditaruh di mana supaya bisa diakses pelanggan? Hosting bersama sering terasa sempit untuk Laravel, sementara menyewa server mahal untuk aplikasi yang baru berjalan terasa boros. Jalan tengah yang masuk akal adalah satu VPS kecil yang Anda kelola sendiri.

Dari sisi biaya, satu VPS bisa menampung beberapa aplikasi sekaligus: toko online, dashboard internal, dan situs portofolio. Anda membayar satu server, bukan tiga paket terpisah. Syaratnya hanya satu: Anda tahu cara menatanya dengan benar. Itulah isi panduan ini.

Kita akan menyiapkan Ubuntu, memasang Nginx dan PHP-FPM, menaruh kode Laravel, lalu mengaktifkan HTTPS gratis dari Let's Encrypt. Pelan-pelan saja, setiap langkah dijelaskan alasannya.

Glosarium Singkat Sebelum Mulai

  • VPS: server virtual milik Anda sendiri dengan akses penuh (root), terpisah dari pengguna lain.
  • Nginx: web server yang menerima permintaan dari browser dan menentukan file mana yang dilayani.
  • PHP-FPM: proses PHP yang berjalan terpisah dan dipanggil Nginx setiap kali ada file PHP perlu dieksekusi.
  • Composer: pengelola dependensi PHP, tempat Laravel mengambil paket-paketnya.
  • SSL/TLS: enkripsi yang mengubah http menjadi https dan menampilkan ikon gembok di browser.
  • Let's Encrypt: otoritas sertifikat gratis yang bisa diperbarui otomatis.
  • .env: berkas pengaturan rahasia Laravel, seperti kredensial database dan kunci aplikasi.

Analogi Sederhana: Restoran

Anggap server Anda sebuah restoran. Nginx adalah pelayan di depan yang menerima pesanan. PHP-FPM adalah juru masak di dapur yang benar-benar meracik hidangan (menjalankan kode Laravel). Database adalah gudang bahan. Sertifikat SSL ibarat pintu tertutup antara pelanggan dan pelayan, sehingga orang lain tidak bisa menguping pesanan.

Kalau pelayan tidak tahu letak dapur, pesanan tidak sampai. Sebagian besar error 502 dan 404 saat deploy Laravel pada dasarnya adalah masalah komunikasi antara pelayan dan dapur.

Yang Perlu Disiapkan

  1. Satu VPS Ubuntu 22.04 atau 24.04 dengan akses SSH. Untuk membandingkan opsi vps murah indonesia dengan server di Jakarta, cek halaman harga di vpshosting.id/harga.
  2. Satu domain yang sudah diarahkan ke IP VPS lewat record A.
  3. Kode Laravel di repositori Git.
  4. Sedikit keberanian mengetik di terminal.

Poin Penting: Arahkan record A domain ke IP VPS sebelum meminta sertifikat SSL. Let's Encrypt memverifikasi kepemilikan domain lewat DNS, jadi propagasi yang belum selesai adalah penyebab gagal terbanyak.

Langkah 1: Masuk ke Server dan Amankan Dasar

Masuk lewat SSH, lalu perbarui paket dan buat pengguna non-root. Bekerja terus sebagai root itu seperti membawa semua kunci rumah ke mana-mana.

ssh root@IP_VPS_ANDA
apt update && apt upgrade -y
adduser deploy
usermod -aG sudo deploy

# Firewall: izinkan SSH dan web saja
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable

Perintah ufw allow 'Nginx Full' baru dikenali setelah Nginx terpasang, jadi jalankan baris firewall setelah langkah 2 bila muncul pesan error profil tidak ditemukan.

Langkah 2: Pasang Nginx, PHP-FPM, dan Ekstensi

Laravel membutuhkan beberapa ekstensi PHP. Pasang sekaligus agar tidak bolak-balik.

apt install -y nginx git unzip curl \
  php-fpm php-cli php-mysql php-mbstring php-xml \
  php-curl php-zip php-bcmath php-intl

# Cek versi PHP yang terpasang (misal 8.3)
php -v
systemctl status php8.3-fpm

Catat versi PHP Anda, karena nama socket PHP-FPM mengikuti versi tersebut. Lalu pasang Composer:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
composer --version

Langkah 3: Siapkan Database

Untuk contoh ini kita pakai MariaDB. Buat database dan pengguna khusus, jangan memakai root untuk aplikasi.

apt install -y mariadb-server
mysql_secure_installation

mysql -u root -p
CREATE DATABASE tokokakak CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'tokouser'@'localhost' IDENTIFIED BY 'GantiDenganPasswordKuat';
GRANT ALL PRIVILEGES ON tokokakak.* TO 'tokouser'@'localhost';
FLUSH PRIVILEGES;

Langkah 4: Tarik Kode dan Pasang Dependensi

Letakkan aplikasi di /var/www. Jalankan sebagai pengguna deploy, bukan root.

sudo mkdir -p /var/www/tokokakak
sudo chown deploy:deploy /var/www/tokokakak
cd /var/www/tokokakak

git clone https://github.com/akun-anda/tokokakak.git .
composer install --no-dev --optimize-autoloader

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

Edit .env dengan nilai produksi. Dua baris ini wajib diperhatikan:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://contoh.com

DB_DATABASE=tokokakak
DB_USERNAME=tokouser
DB_PASSWORD=GantiDenganPasswordKuat

Setelah itu jalankan migrasi dan cache konfigurasi:

php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

Langkah 5: Atur Izin Folder

Nginx dan PHP-FPM berjalan sebagai pengguna www-data. Folder storage dan bootstrap/cache harus bisa ditulis oleh pengguna itu.

sudo chown -R deploy:www-data /var/www/tokokakak
sudo find /var/www/tokokakak -type f -exec chmod 664 {} \;
sudo find /var/www/tokokakak -type d -exec chmod 775 {} \;
sudo chmod -R 775 storage bootstrap/cache

Hindari chmod 777. Memang membuat error hilang, tetapi membuka pintu untuk siapa saja.

Langkah 6: Konfigurasi Nginx

Buat berkas virtual host. Perhatikan bahwa root menunjuk ke folder public, bukan ke akar proyek. Ini penting agar .env tidak bisa diunduh lewat browser.

server {
    listen 80;
    server_name contoh.com www.contoh.com;
    root /var/www/tokokakak/public;

    index index.php;
    charset utf-8;

    # Header keamanan dasar
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    location / {
        # Semua rute diarahkan ke front controller Laravel
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # Sesuaikan dengan versi PHP Anda
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    # Blokir file tersembunyi (.env, .git), kecuali .well-known untuk SSL
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Aktifkan situs, uji konfigurasi, lalu muat ulang:

sudo nano /etc/nginx/sites-available/tokokakak
sudo ln -s /etc/nginx/sites-available/tokokakak /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Buka domain Anda di browser. Jika halaman Laravel tampil, dapur dan pelayan sudah saling kenal. Sekarang tinggal memasang pintunya.

Langkah 7: Aktifkan SSL Let's Encrypt

Gunakan Certbot. Ia akan meminta sertifikat dan mengubah konfigurasi Nginx secara otomatis.

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d contoh.com -d www.contoh.com

# Pastikan pembaruan otomatis berjalan
sudo systemctl list-timers | grep certbot
sudo certbot renew --dry-run

Pilih opsi pengalihan otomatis dari HTTP ke HTTPS saat ditanya. Sertifikat berlaku sekitar 90 hari, dan timer bawaan akan memperbaruinya tanpa Anda berbuat apa-apa. Sekali pasang, selesai.

Langkah 8: Antrean dan Penjadwal

Banyak aplikasi Laravel memakai queue dan scheduler. Untuk scheduler, cukup satu baris cron:

sudo crontab -u www-data -e

# Tambahkan baris ini
* * * * * cd /var/www/tokokakak && php artisan schedule:run >> /dev/null 2>&1

Untuk queue worker, gunakan Supervisor agar proses otomatis hidup lagi bila mati:

[program:tokokakak-worker]
command=php /var/www/tokokakak/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/tokokakak-worker.log

Alur Update Aplikasi

Setelah live, Anda pasti akan memperbarui kode. Simpan urutan ini sebagai kebiasaan:

cd /var/www/tokokakak
php artisan down
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache
php artisan queue:restart
php artisan up

Kesalahan Umum Pemula

502 Bad Gateway

Biasanya path socket PHP-FPM di konfigurasi Nginx tidak cocok dengan versi PHP yang terpasang. Cek dengan ls /run/php/ dan samakan namanya.

403 atau 404 di semua halaman selain beranda

Hampir pasti try_files belum benar atau root tidak menunjuk ke folder public.

Error 500 tanpa penjelasan

Lihat log, jangan menebak: tail -n 50 storage/logs/laravel.log dan /var/log/nginx/error.log. Penyebab paling sering adalah izin folder storage atau APP_KEY kosong.

Perubahan .env tidak berpengaruh

Karena Anda sudah menjalankan config:cache. Jalankan ulang perintah itu setelah mengubah .env.

APP_DEBUG masih true

Ini bocor ke publik: pesan error lengkap, path server, bahkan sebagian konfigurasi. Pastikan false di produksi.

Sertifikat gagal terbit

Periksa apakah DNS sudah mengarah ke IP yang benar dan port 80 terbuka di firewall. Verifikasi memerlukan keduanya.

Ringkasan Perbandingan Pilihan Hosting

AspekHosting bersamaVPS
Kontrol serverTerbatasPenuh (root)
Queue worker dan SupervisorSering tidak tersediaBisa dipasang bebas
Beberapa aplikasi dalam satu serverTergantung paketBisa, dibatasi sumber daya
Tanggung jawab perawatanDikelola penyediaAnda sendiri

Kalau Anda baru belajar dan ingin bereksperimen tanpa takut merusak sesuatu, VPS adalah ruang latihan yang ideal. Anda bisa mengulang instalasi dari nol sesering yang diperlukan. Untuk memilih paket yang cocok dengan kebutuhan aplikasi Anda, lihat opsi terkini di vpshosting.id/harga atau langsung kelola layanan lewat my.vpshosting.id.

Tips Efisiensi Biaya Setelah Live

  • Mulai dari yang kecil. Laravel dengan trafik awal biasanya cukup di server sederhana. Tingkatkan sumber daya saat metrik benar-benar menuntut, bukan karena khawatir.
  • Gabungkan aplikasi. Satu VPS bisa memakai beberapa virtual host Nginx. Cukup buat berkas konfigurasi baru dan database baru per proyek.
  • Aktifkan OPcache. Pengaturan bawaan PHP ini mempercepat eksekusi tanpa menambah sumber daya.
  • Pantau penggunaan. Perintah htop dan df -h memberi gambaran RAM dan disk sebelum Anda memutuskan upgrade.
  • Cadangkan rutin. Dump database dan salin folder storage ke tempat lain. Biaya kehilangan data jauh lebih besar daripada biaya backup.

Daftar Periksa Akhir

  1. Domain mengarah ke IP VPS dan HTTPS aktif.
  2. APP_ENV=production dan APP_DEBUG=false.
  3. Root Nginx menunjuk ke folder public.
  4. Izin storage dan bootstrap/cache benar, tanpa 777.
  5. Cache konfigurasi, rute, dan view sudah dibuat.
  6. Cron scheduler dan Supervisor berjalan bila dipakai.
  7. Firewall hanya membuka port yang perlu.
  8. Ada rencana backup yang benar-benar dijalankan.

Deploy pertama memang terasa panjang, tetapi sebagian besar langkah di atas hanya dilakukan sekali. Deploy berikutnya cukup beberapa perintah. Dan begitu Anda paham alurnya, server berikutnya bisa disiapkan dalam waktu singkat.

Lihat paket VPS
Terapkan yang Anda baca langsung di VPSHosting.ID.
Kunjungi VPSHosting.ID ↗