Web Development May 22, 2026 · 6 min read · 0 dilihat

Deploy Laravel 11 ke VPS Ubuntu: Nginx, SSL, dan GitHub Actions

Deploy aplikasi Laravel ke production sendiri adalah milestone penting bagi setiap developer, tapi sering kali terasa ribet dan membingungkan kalau belum pernah coba. Ada banyak langkah — setup VPS, install dependencies, konfigurasi Nginx, SSL, dan kalau mau canggih: automation dengan GitHub Actions. Artikel ini adalah panduan end-to-end yang bisa kamu ikuti dari awal sampai aplikasi Laravel 11 kamu live di production, dengan SSL gratis, dan auto-deploy setiap kali push ke GitHub. Semua command sudah siap copy-paste, plus penjelasan apa yang terjadi dan common error yang mungkin kamu hadapi.

IKHSAN MAULANA

IKHSAN MAULANA

Web, Android, and RPA Development

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_ip

Update sistem terlebih dahulu:

apt update && apt upgrade -y

Buat user baru (jangan pakai root untuk production):

adduser laravel_user
usermod -aG sudo laravel_user

Logout, lalu login dengan user baru:

ssh laravel_user@your_vps_ip

2. 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 git

Verifikasi instalasi:

php --version
composer --version
nginx -v
mysql --version

Mulai service Nginx dan set auto-start:

sudo systemctl start nginx
sudo systemctl enable nginx

Begitu juga MySQL:

sudo systemctl start mysql
sudo systemctl enable mysql

Untuk production, kamu harus atur MySQL dengan perintah secure installation (set root password, remove anonymous users, etc):

sudo mysql_secure_installation

3. 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-app

Install dependencies Laravel:

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

Copy file .env dan generate app key:

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

Edit .env dengan konfigurasi production (database, app name, debug mode, dll):

nano .env

Pastikan 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_here

Setup database:

php artisan migrate --force

Set 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/cache

Cache config (optional tapi direkomendasikan untuk production):

php artisan config:cache
php artisan route:cache
php artisan view:cache

4. Konfigurasi Nginx Server Block

Buat file konfigurasi Nginx baru untuk aplikasi kamu:

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

Paste 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 -t

Kalau test OK, reload Nginx:

sudo systemctl reload nginx

5. Setup SSL dengan Certbot (Let's Encrypt Gratis)

Install Certbot:

sudo apt install -y certbot python3-certbot-nginx

Generate SSL certificate (ganti domain):

sudo certbot certonly --nginx -d your-domain.com -d www.your-domain.com

Certbot 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-app

Ganti 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 nginx

Setup auto-renewal certificate (Certbot akan handle ini otomatis, tapi cek):

sudo systemctl status certbot.timer

6. Setup GitHub Actions untuk Auto-Deploy (Bonus)

Buat file workflow GitHub Actions di project kamu:

mkdir -p .github/workflows
nano .github/workflows/deploy.yml

Paste 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-fpm

Di 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!

Tags:

#Laravel #Deployment #Nginx #VPS #GitHub Actions #SSL #DevOps

Share this article:

IKHSAN MAULANA

Tentang Penulis

IKHSAN MAULANA

Web, Android, and RPA Development

I am an experienced IT programmer specializing in Web Development (Laravel/PHP), Android (Dart/Flutter), and RPA (UiPath). I love building clean, efficient solutions that solve real-world problems. With 4+ years of hands...

Download CV

Sebelum download, boleh kenalan dulu? Form ini opsional — kosongin juga gak apa-apa, langsung klik Download.