Gratis update & dukungan instalasi

Panduan 06 Oct 2026

Cara Deploy Laravel ke VPS Ubuntu: Panduan Lengkap Naik Kelas dari Shared Hosting (2026)

R Oleh renz mobellgnd
Cara Deploy Laravel ke VPS Ubuntu: Panduan Lengkap Naik Kelas dari Shared Hosting (2026)

Cara Deploy Laravel ke VPS Ubuntu: Panduan Lengkap Naik Kelas dari Shared Hosting (2026)

Kalau website Laravel-mu sudah berjalan di shared hosting tapi mulai terasa sempit — traffic naik, cron job dibatasi, versi PHP ketinggalan, atau konfigurasi server tidak bisa diatur — saatnya naik kelas ke VPS. Di VPS, kamu punya kontrol penuh: memilih versi PHP, mengaktifkan Redis, mengatur queue worker, sampai memasang reverse proxy sendiri.

Panduan ini memandu kamu deploy aplikasi Laravel ke VPS Ubuntu (24.04/22.04) langkah demi langkah, dengan asumsi kamu sudah akrab dengan shared hosting — bahkan dua panduan sebelumnya sudah membahas cara deploy Laravel ke shared hosting cPanel. Anggap ini sekuelnya: dari "yang penting jalan" menjadi "siap production".

Kapan Waktunya Pindah dari Shared Hosting ke VPS?

  1. Website melambat saat traffic naik (CPU/RAM dipakai bersama ratusan pengguna lain).
  2. Fitur seperti queue worker, scheduler per menit, atau Redis tidak tersedia.
  3. Versi PHP di shared hosting tidak cocok dengan Laravel versi baru.
  4. Kamu butuh akses SSH penuh dan root untuk instalasi kustom.

Pindah ke VPS bukan cuma soal resource, tapi juga soal tanggung jawab: di VPS, kamu yang mengurus keamanan server. Itulah kenapa langkah pertama panduan ini adalah mengamankan server — topik yang juga kami bahas khusus untuk mengamankan website setelah beli source code.

Persiapan: Yang Harus Disiapkan

  1. VPS dengan Ubuntu 22.04 atau 24.04 dan akses root/SSH.
  2. Domain yang sudah diarahkan (record A) ke IP VPS.
  3. Source code Laravel — misalnya project yang kamu beli di Kioskoding, lengkap dengan composer.json dan .env.example.
  4. Catat versi Laravel dan PHP yang dipakai project (cek di composer.json).
Cek kompatibilitas dulu: Laravel 11 membutuhkan PHP 8.2+, Laravel 12 membutuhkan PHP 8.3+. Memaksakan versi PHP yang salah adalah penyebab error paling umum — kalau setelah upload malah blank/error, cek dulu checklist cara mengatasi error 500 setelah upload website.

Langkah 1: Amankan Server Sebelum Apa Pun

Di VPS, kamu admin-nya. Sebelum deploy aplikasi, kunci dulu servernya:

# Buat user non-root untuk pekerjaan harian
adduser deploy
usermod -aG sudo deploy

# Pasang SSH key (ganti password login dengan key)
ssh-copy-id deploy@IP_VPS

# Aktifkan firewall: hanya SSH, HTTP, HTTPS yang boleh masuk
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Opsional tapi disarankan: pasang fail2ban untuk memblokir IP yang mencoba brute-force SSH:

sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban

Langkah 2: Install Stack (Nginx, PHP, MySQL, Composer)

Update dulu, lalu pasang PHP 8.3 (sesuaikan dengan versi Laravel-mu) beserta ekstensi wajib Laravel:

sudo apt update && sudo apt upgrade -y

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

sudo apt install -y nginx mysql-server git unzip \
php8.3-fpm php8.3-cli php8.3-mbstring php8.3-xml php8.3-mysql \
php8.3-curl php8.3-zip php8.3-bcmath php8.3-tokenizer

Pasang Composer secara global:

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

Buat database dan user MySQL khusus aplikasi (jangan pakai root):

CREATE DATABASE aplikasi_db;
CREATE USER 'aplikasi_user'@'localhost' IDENTIFIED BY 'password-kuat-disini';
GRANT ALL PRIVILEGES ON aplikasi_db.* TO 'aplikasi_user'@'localhost';
FLUSH PRIVILEGES;

Untuk tuning database lebih lanjut — indeks, query cache, sampai konfigurasi koneksi — lihat panduan cara optimasi database MySQL.

Langkah 3: Clone Project dan Install Dependency

cd /var/www
sudo git clone https://github.com/username/nama-project.git laravel-app
cd laravel-app

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

Flag --no-dev melewati package development, dan --optimize-autoloader membuat autoload class lebih cepat di production. Jangan pernah menjalankan composer update di server production — selalu composer install agar versi dependency mengikuti composer.lock dan hasil deploy konsisten.

Kalau project memakai Vite/Tailwind, build aset frontend-nya:

npm ci && npm run build

Langkah 4: Konfigurasi .env untuk Production

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

Edit .env dan pastikan nilai production-nya benar:

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

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=aplikasi_db
DB_USERNAME=aplikasi_user
DB_PASSWORD=password-kuat-disini

APP_DEBUG=false wajib di production. Debug mode yang aktif bisa mengekspos kredensial database dan struktur aplikasi ke pengunjung — salah satu kesalahan paling berbahaya yang dibahas di artikel keamanan kami.

Langkah 5: Atur Permission Folder

PHP-FPM (user www-data) harus bisa menulis ke storage dan bootstrap/cache:

sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

Jangan gunakan 777 — itu menghilangkan error dengan membuka pintu ke semua orang. Kalau aplikasi memakai fitur upload, jalankan juga:

php artisan storage:link

Langkah 6: Konfigurasi Nginx (Arahkan ke Folder public)

Ini langkah yang paling sering salah: document root harus ke folder public, bukan root project. Buat file /etc/nginx/sites-available/laravel-app:

server {
listen 80;
server_name domainkamu.com www.domainkamu.com;
root /var/www/laravel-app/public;
index index.php;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";

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

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

location ~ /\.(?!well-known).* {
deny all;
}
}

Aktifkan dan uji:

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

Sesuaikan socket php8.3-fpm.sock dengan versi PHP yang kamu pasang.

Langkah 7: Migrasi Database dan Optimasi

php artisan migrate --force
php artisan optimize

Flag --force memungkinkan migrasi berjalan di production tanpa prompt. php artisan optimize meng-cache config, route, view, dan event — salah satu langkah percepatan yang juga masuk dalam daftar 10 cara mempercepat website Laravel.

Langkah 8: Aktifkan HTTPS dengan Let's Encrypt

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

Certbot otomatis menyesuaikan konfigurasi Nginx dan memasang auto-renewal. Setelah aktif, pastikan APP_URL di .env memakai https://.

Langkah 9: Jalankan Queue Worker dan Scheduler (Kelebihan Utama VPS)

Di shared hosting, queue worker dan scheduler per menit biasanya tidak bisa dijalankan. Di VPS, kamu bisa — dan inilah salah satu alasan utama pindah.

Queue worker dengan Supervisor (agar tetap jalan dan restart otomatis):

sudo apt install supervisor -y

Buat /etc/supervisor/conf.d/laravel-worker.conf:

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

Scheduler Laravel — satu cron entry menjalankan semua jadwal:

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

Troubleshooting: Error Umum Setelah Deploy

Gejala Kemungkinan penyebab
Blank page / 500Permission storage, .env salah, atau ekstensi PHP kurang — jalankan checklist error 500 kami
502 Bad GatewayPHP-FPM tidak jalan / socket salah di konfigurasi Nginx
404 di semua routetry_files belum benar, atau mod rewrite Apache (jika pakai Apache)
Aset CSS/JS tidak termuatnpm run build belum dijalankan, atau APP_URL salah
Session/logout terusPermission folder session, atau APP_KEY berubah

Selalu baca storage/logs/laravel.log dan log Nginx (/var/log/nginx/error.log) sebelum menebak-nebak. Perbaiki satu masalah dalam satu waktu.

Penutup

Deploy Laravel ke VPS Ubuntu intinya: amankan server dulu (UFW + user non-root + fail2ban), pasang stack yang cocok dengan versi Laravel, arahkan Nginx ke folder public, matikan debug di production, aktifkan HTTPS, lalu manfaatkan keunggulan VPS — queue worker dan scheduler — yang tidak bisa kamu dapatkan di shared hosting.

Kalau kamu baru mulai dan belum punya source code-nya, jelajahi koleksi source code Laravel siap pakai di Kioskoding — lalu praktikkan panduan ini untuk menaikkannya ke production di VPS-mu sendiri.