Selamat datang di episode final series "Belajar Laravel 13 dari Nol sampai Deploy". Jika kamu sudah mengikuti seluruh perjalanan dari awal perjalanan belajar Laravel 13, kini saatnya untuk membuat aplikasi kamu visible ke dunia. Berbeda dengan menjalankan php artisan serve di laptop, kali ini kita akan menggunakan infrastruktur production-grade yang aman, scalable, dan profesional.
Deploy ke VPS bukan sekadar copy-paste file. Ada banyak hal yang perlu dipersiapkan — dari konfigurasi environment, database setup, SSL certificate, hingga memastikan aplikasi kamu tidak berjalan dalam debug mode. Mari kita mulai perjalanan final ini step by step.
Mengapa VPS dengan Nginx Lebih Baik dari Shared Hosting
Banyak yang menanya: "Apa bedanya VPS dengan shared hosting?" Singkat cerita, shared hosting adalah seperti kos-kosan — kamu berbagi resource dengan puluhan atau ratusan website lain. VPS adalah seperti punya apartemen sendiri — resource CPU, RAM, dan disk dedicated untuk aplikasi kamu saja. Untuk aplikasi Laravel production-ready, VPS memberikan keuntungan:
- Kontrol penuh terhadap konfigurasi server dan environment variables
- Performance yang konsisten tanpa dipengaruhi website tetangga
- Kemampuan menggunakan tools modern seperti Nginx, Laravel Horizon, cron jobs, dan SSH deployment
- Cost-effective — VPS entry-level biasanya lebih murah dari shared hosting berkualitas
Untuk tutorial ini, kita target VPS Ubuntu 22.04 dengan Nginx dan PHP 8.3 sebagai setup dasar production.
Persiapan: VPS, Domain, dan SSH Access
Sebelum mulai, pastikan kamu sudah punya:
- VPS aktif dengan akses root. Rekomendasi provider: DigitalOcean, Linode, Vultr, atau AWS Lightsail — semua mendukung Ubuntu 22.04
- Domain registered dan sudah diarahkan (pointing) ke IP VPS kamu via DNS
- SSH access ke VPS via terminal (Mac/Linux) atau PuTTY (Windows)
- Git repository** (GitHub, GitLab, atau Gitea) untuk source code kamu
Cek akses SSH dengan membuka terminal dan jalankan (ganti dengan IP atau domain VPS kamu):
ssh root@your_vps_ip_or_domainJika berhasil login, kamu siap lanjut ke step berikutnya. Pertama kali login, update system packages:
apt update && apt upgrade -yInstall PHP 8.3, Nginx, dan Dependencies
Sekarang kita install tech stack yang dibutuhkan. Jalankan perintah berikut secara berurutan:
apt install -y curl gnupg2 ca-certificates apt-transport-https software-properties-common
add-apt-repository ppa:ondrej/php
apt update
apt install -y php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-zip php8.3-gd php8.3-xml
apt install -y nginx
apt install -y git composer
apt install -y mysql-serverVerifikasi instalasi dengan memeriksa versi PHP:
php -vOutput harus menunjukkan PHP 8.3.x. Sekarang aktifkan PHP-FPM dan Nginx:
systemctl start php8.3-fpm
systemctl start nginx
systemctl enable php8.3-fpm
systemctl enable nginxUpload Project Laravel Kamu via Git
Kita akan menggunakan Git untuk upload source code karena lebih clean dan mudah update di kemudian hari. Login ke VPS dan navigasi ke folder publikasi web (biasanya /var/www):
cd /var/www
git clone https://github.com/your-username/your-laravel-project.git laravel-app
cd laravel-appGanti URL repository dengan repository kamu sendiri. Setelah clone, install dependencies dengan Composer (mode production, tanpa dev tools):
composer install --no-dev --optimize-autoloaderIni akan memakan waktu beberapa menit tergantung jumlah package. Setelah selesai, copy file .env dari template:
cp .env.example .envKonfigurasi Environment Production
File .env adalah jantung konfigurasi Laravel production. Edit dengan nano atau vim:
nano .envPastikan nilai-nilai ini sesuai environment production kamu:
APP_NAME=YourAppName
APP_ENV=production
APP_DEBUG=false
APP_KEY=
APP_URL=https://yourdomain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_prod
DB_USERNAME=laravel_user
DB_PASSWORD=your_secure_password
LOG_CHANNEL=daily
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=warning
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=syncPerhatian: APP_DEBUG HARUS false di production. Jangan pernah true, karena bisa expose informasi sensitif ke error page. Generate APP_KEY dengan artisan jika belum ada:
php artisan key:generateSetup Database Production dan Migration
Masuk ke MySQL console dan buat database serta user production:
mysql -u root -pMasukkan password root MySQL, lalu jalankan:
CREATE DATABASE laravel_prod;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_secure_password';
GRANT ALL PRIVILEGES ON laravel_prod.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;Sekarang jalankan migration untuk membuat tabel di database production. Penting: gunakan flag --force untuk production environment:
php artisan migrate --forceJika ada seeding yang diperlukan, jalankan:
php artisan db:seed --forcePastikan storage symlink sudah ada agar uploads dan asset berfungsi:
php artisan storage:linkKonfigurasi Nginx Virtual Host
Buat file konfigurasi Nginx untuk domain kamu. Ciptakan file baru:
nano /etc/nginx/sites-available/yourdomain.comCopy konfigurasi berikut (sesuaikan domain, root path, dan PHP socket):
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/laravel-app/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).*$ {
deny all;
}
}
Simpan file (Ctrl+O, Enter, Ctrl+X di nano). Enable site ini dan test konfigurasi:
ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
nginx -tJika output "OK", reload Nginx:
systemctl reload nginxAktifkan SSL dengan Let's Encrypt Certbot
Aplikasi production HARUS menggunakan HTTPS. Untungnya, Let's Encrypt memberikan SSL certificate gratis. Install Certbot:
apt install -y certbot python3-certbot-nginxBuat certificate untuk domain kamu (Certbot akan otomatis update Nginx config):
certbot --nginx -d yourdomain.com -d www.yourdomain.comFollow prompt — pilih auto redirect dari HTTP ke HTTPS. Cek apakah Certbot renewal sudah scheduled:
systemctl enable certbot.timer
systemctl start certbot.timerUntuk info lebih lanjut tentang Let's Encrypt dan Certbot, kunjungi Certbot official site.
Permission dan Ownership Folder
Laravel memerlukan permission tertentu untuk folder storage dan bootstrap/cache. Set dengan benar:
chown -R www-data:www-data /var/www/laravel-app
chmod -R 755 /var/www/laravel-app
chmod -R 775 /var/www/laravel-app/storage
chmod -R 775 /var/www/laravel-app/bootstrap/cacheChecklist Final Sebelum Go Live
Sebelum membuka akses publik, pastikan semua poin ini sudah terpenuhi:
- APP_DEBUG = false di .env production
- APP_KEY sudah generate dengan artisan key:generate
- Database migration sudah run dengan --force flag
- Storage symlink sudah dibuat dengan php artisan storage:link
- Asset sudah di-publish jika pakai packages (php artisan vendor:publish)
- SSL certificate aktif dan auto-redirect HTTP ke HTTPS
- Email konfigurasi sudah setup jika app kamu mengirim email (MAIL_DRIVER, MAIL_FROM_ADDRESS, dll)
- Log file permission ok sehingga app bisa write ke storage/logs
- Backup database sudah schedule menggunakan cron job
- Monitoring setup seperti uptime monitor atau error tracking (optional tapi recommended)
Test aplikasi di browser. Cek apakah homepage load, form submit berfungsi, database query OK, dan uploaded file bisa diakses. Jika semua berjalan lancar, selamat! Aplikasi Laravel kamu sudah officially live di production.
Tips Post-Deployment dan Troubleshooting
Setelah go live, jangan lupa:
- Monitor log secara berkala di
storage/logs/laravel.loguntuk menangkap error early - Setup cron job untuk scheduled task jika app kamu pakai (php artisan schedule:run)
- Update dependencies regularly dengan
composer updatedan test di staging environment dulu - Backup script untuk database — minimal daily automated backup ke cloud storage
Untuk referensi lengkap, baca Laravel Deployment Documentation dan episode #11 series ini tentang production optimization.
Kesimpulan
Selamat! Kamu sudah menyelesaikan perjalanan "Belajar Laravel 13 dari Nol sampai Deploy". Dari pembelajaran dasar blade template, routing, database relationship, hingga deployment production — semua sudah kamu kuasai. Aplikasi kamu sekarang bukan hanya berjalan di komputer lokal, tapi truly accessible di internet untuk digunakan oleh user nyata.
Ini adalah milestone penting dalam karir developer kamu. Jangan berhenti di sini — terus explore fitur advanced Laravel seperti Laravel Horizon untuk queue processing, Dusk untuk testing, atau GraphQL API. Kelanjutan pembelajaran dan praktik adalah kunci untuk terus berkembang. Selamat coding, dan terima kasih sudah mengikuti seluruh series ini!