Deploy aplikasi ke production bukan hanya soal kode yang bagus — ada banyak sisi infrastructure yang perlu diperhatikan. Tapi jangan khawatir, langkah demi langkah itu sebenarnya cukup straightforward kalau kamu tahu urutan yang benar.
Di artikel ini kita akan setup dari nol: mulai dari menyewa VPS, install LEMP stack (Linux, Nginx, MySQL, PHP), deploy aplikasi Laravel 11, setup SSL gratis dengan Certbot, sampai setup GitHub Actions untuk auto-deploy setiap kali push. Semua bisa dilakukan dalam waktu kurang dari 1-2 jam.
1. Persiapan: Pilih VPS dan SSH Access
Langkah pertama adalah menyewa VPS. Kamu bisa pakai DigitalOcean, Vultr, Niagahoster, atau provider lain yang mendukung Ubuntu 22.04 atau 24.04. Minimal spec: 2GB RAM, 2 vCPU, 50GB SSD — cukup untuk aplikasi Laravel skala kecil-menengah.
Setelah VPS aktif, kamu akan dapat IP address dan password root. Login via SSH:
ssh root@your_vps_ipUpdate sistem terlebih dahulu:
apt update && apt upgrade -yBuat user baru (jangan pakai root untuk production):
adduser laravel_user
usermod -aG sudo laravel_userLogout, lalu login dengan user baru:
ssh laravel_user@your_vps_ip2. Install LEMP Stack
LEMP adalah singkatan Linux, Nginx, MySQL, PHP. Kita install semuanya dalam satu blok command:
sudo apt install -y nginx mysql-server php8.3 php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip composer gitVerifikasi instalasi:
php --version
composer --version
nginx -v
mysql --versionMulai service Nginx dan set auto-start:
sudo systemctl start nginx
sudo systemctl enable nginxBegitu juga MySQL:
sudo systemctl start mysql
sudo systemctl enable mysqlUntuk production, kamu harus atur MySQL dengan perintah secure installation (set root password, remove anonymous users, etc):
sudo mysql_secure_installation3. Clone Repository dan Setup Aplikasi Laravel
Tentukan folder project. Biasanya di /var/www atau /home/laravel_user/public_html. Kita pakai /var/www:
cd /var/www
sudo git clone https://github.com/username/your-laravel-repo.git laravel-app
cd laravel-appInstall dependencies Laravel:
composer install --no-dev --optimize-autoloaderCopy file .env dan generate app key:
cp .env.example .env
php artisan key:generateEdit .env dengan konfigurasi production (database, app name, debug mode, dll):
nano .envPastikan ini diatur:
APP_ENV=production
APP_DEBUG=false
DB_HOST=127.0.0.1
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=strong_password_hereSetup database:
php artisan migrate --forceSet permission folder (PENTING!):
sudo chown -R www-data:www-data /var/www/laravel-app
sudo chmod -R 755 /var/www/laravel-app
sudo chmod -R 775 /var/www/laravel-app/storage
sudo chmod -R 775 /var/www/laravel-app/bootstrap/cacheCache config (optional tapi direkomendasikan untuk production):
php artisan config:cache
php artisan route:cache
php artisan view:cache4. Konfigurasi Nginx Server Block
Buat file konfigurasi Nginx baru untuk aplikasi kamu:
sudo nano /etc/nginx/sites-available/laravel-appPaste konfigurasi berikut (ganti your-domain.com dengan domain kamu):
server {
listen 80;
server_name your-domain.com www.your-domain.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$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}Simpan (Ctrl+X, Y, Enter). Enable site ini:
sudo ln -s /etc/nginx/sites-available/laravel-app /etc/nginx/sites-enabled/
sudo nginx -tKalau test OK, reload Nginx:
sudo systemctl reload nginx5. Setup SSL dengan Certbot (Let's Encrypt Gratis)
Install Certbot:
sudo apt install -y certbot python3-certbot-nginxGenerate SSL certificate (ganti domain):
sudo certbot certonly --nginx -d your-domain.com -d www.your-domain.comCertbot akan tanya email dan agreement — jawab sesuai instruksi. Jika berhasil, certificate disimpan di /etc/letsencrypt/live/your-domain.com/.
Update Nginx config untuk pakai HTTPS:
sudo nano /etc/nginx/sites-available/laravel-appGanti isi dengan:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
root /var/www/laravel-app/public;
index index.php index.html index.htm;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}Test dan reload:
sudo nginx -t
sudo systemctl reload nginxSetup auto-renewal certificate (Certbot akan handle ini otomatis, tapi cek):
sudo systemctl status certbot.timer6. Setup GitHub Actions untuk Auto-Deploy (Bonus)
Buat file workflow GitHub Actions di project kamu:
mkdir -p .github/workflows
nano .github/workflows/deploy.ymlPaste konfigurasi:
name: Deploy to VPS
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to VPS
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
script: |
cd /var/www/laravel-app
git pull origin main
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache
php artisan route:cache
sudo systemctl reload php8.3-fpmDi GitHub, pergi ke Settings → Secrets and variables → Actions. Tambah 3 secret:
- VPS_HOST: IP address VPS kamu
- VPS_USER: username (laravel_user)
- VPS_SSH_KEY: private SSH key (generate dengan ssh-keygen -t rsa jika belum ada)
Sekarang setiap kali kamu push ke branch main, GitHub Actions akan otomatis deploy ke VPS!
7. Common Error dan Solusi
Beberapa error yang sering terjadi:
- Permission denied pada storage/logs: Run
sudo chmod -R 775 storage bootstrap/cache - 502 Bad Gateway: Check apakah PHP-FPM running:
sudo systemctl status php8.3-fpm - Database connection error: Verifikasi DB_PASSWORD di .env dan pastikan user database sudah dibuat
- Artisan command not found: Pastikan kamu di folder project dan Composer sudah install dependencies
- SSL certificate error: Tunggu beberapa saat setelah generate cert, atau cek pembaruan DNS
Kesimpulan
Deploy Laravel 11 ke VPS Ubuntu dengan Nginx dan SSL sebenarnya bukan hal yang rumit — cukup ikuti langkah demi langkah dengan teliti. Kunci suksesnya adalah permission folder yang benar, konfigurasi Nginx yang tepat, dan database yang tersetup dengan baik. Kalau sudah live, jangan lupa monitoring log aplikasi dan setup auto-renewal SSL agar certificate tidak expired.
Bonus GitHub Actions membuat workflow kamu jauh lebih efisien: tidak perlu manual SSH dan command setiap kali ada update kode. Push, deployment otomatis — as simple as that. Semoga artikel ini membantu kamu meluncurkan aplikasi Laravel pertama ke production!