---
title: "Cara Deploy Aplikasi Laravel di VPS Ubuntu 24.04"
description: "Panduan langkah deploy Laravel 13 di VPS Ubuntu 24.04 dengan Nginx, PHP-FPM, dan MariaDB, lengkap dengan izin folder, cache, queue, dan scheduler."
url: "https://nivelva.com/insight/cara-deploy-aplikasi-laravel-vps-ubuntu-24-04"
category: "Server \u0026 Infrastruktur"
tags: ["laravel","php","nginx","ubuntu","deploy"]
author: "Theresia Candiawan"
published: "2026-11-07T02:44:00+07:00"
updated: "2026-11-07T02:44:00+07:00"
language: "id"
publisher: "Nivelva (https://nivelva.com)"
---

# Cara Deploy Aplikasi Laravel di VPS Ubuntu 24.04

> **Jawaban singkat:** Deploy Laravel di Ubuntu 24.04 berarti memasang PHP 8.3 beserta ekstensinya, Composer, database, dan Nginx yang diarahkan ke folder public. Setelah itu atur .env produksi, izin folder storage, cache optimize, queue worker, dan cron scheduler.

Aplikasimu sudah jalan mulus di laptop dengan `php artisan serve`, lalu bagaimana memindahkannya ke VPS supaya bisa dibuka orang lain dengan aman? Jawabannya: siapkan PHP-FPM, Composer, database, dan Nginx yang menunjuk ke folder `public`, lalu jalankan beberapa perintah Artisan khusus produksi.

Panduan ini memakai Ubuntu 24.04, yang membawa PHP 8.3 di repositori bawaannya. Versi itu pas dengan syarat Laravel 13, yang per 6 November 2026 meminta minimal PHP 8.3 menurut catatan rilis resmi. Kalau aplikasimu masih Laravel 12, PHP 8.3 juga termasuk versi yang didukung.

## Langkah 1: Siapkan server dan pengguna

Mulai dari VPS yang sudah diamankan: login dengan SSH key, firewall aktif, dan pembaruan sudah dijalankan. Kalau belum, ikuti dulu [langkah awal mengamankan VPS baru](https://nivelva.com/insight/cara-mengamankan-vps-baru).

```bash
sudo apt update && sudo apt upgrade -y
sudo adduser deploy
sudo usermod -aG www-data deploy
```

Pengguna `deploy` dipakai untuk menarik kode dan menjalankan Composer. Hindari menjalankan aplikasi sebagai root.

## Langkah 2: Pasang PHP 8.3 dan ekstensi yang dibutuhkan Laravel

Dokumentasi deployment Laravel menyebut ekstensi seperti Ctype, cURL, DOM, Fileinfo, Mbstring, OpenSSL, PDO, Tokenizer, dan XML. Sebagian sudah termasuk dalam paket inti PHP, sisanya dipasang begini:

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

Cek dengan `php -v` dan `php -m`. Kalau aplikasi memakai PostgreSQL, ganti `php8.3-mysql` dengan `php8.3-pgsql`.

## Langkah 3: Pasang Composer

Ikuti petunjuk instalasi resmi di getcomposer.org (unduh installer, cocokkan hash, jalankan), lalu pindahkan file `composer.phar` ke `/usr/local/bin/composer`. Paket `composer` dari apt juga bisa dipakai, tapi versinya bisa tertinggal dari rilis terbaru.

## Langkah 4: Siapkan database

```bash
sudo apt install -y mariadb-server
sudo mariadb-secure-installation
sudo mariadb
```

Di konsol MariaDB, buat database dan pengguna khusus:

```sql
CREATE DATABASE appku CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appku'@'localhost' IDENTIFIED BY 'ganti-password-kuat';
GRANT ALL PRIVILEGES ON appku.* TO 'appku'@'localhost';
FLUSH PRIVILEGES;
```

Biarkan MariaDB hanya mendengarkan `127.0.0.1`. Database tidak perlu dibuka ke internet.

## Langkah 5: Ambil kode dan pasang dependensi

```bash
sudo mkdir -p /var/www/appku && sudo chown deploy:www-data /var/www/appku
sudo -u deploy git clone https://github.com/akunmu/appku.git /var/www/appku
cd /var/www/appku
sudo -u deploy composer install --no-dev --optimize-autoloader
```

Kalau aplikasi memakai Vite, jalankan `npm ci && npm run build` di server (butuh Node.js) atau bangun aset di mesin CI lalu kirim hasil folder `public/build`.

## Langkah 6: Atur file .env produksi

```bash
sudo -u deploy cp .env.example .env
sudo -u deploy php artisan key:generate
```

Isi minimal yang perlu diubah:

```ini
APP_ENV=production
APP_DEBUG=false
APP_URL=https://appku.example
DB_CONNECTION=mysql
DB_DATABASE=appku
DB_USERNAME=appku
DB_PASSWORD=ganti-password-kuat
```

> **APP_DEBUG wajib false:**
>
> Dokumentasi Laravel menegaskan nilai `APP_DEBUG` di produksi harus `false`. Bila `true`, halaman error bisa membocorkan isi konfigurasi, termasuk kredensial database, ke pengunjung.

Lalu jalankan migrasi: `sudo -u deploy php artisan migrate --force`. Opsi `--force` diperlukan karena Laravel meminta konfirmasi saat migrasi di lingkungan produksi.

## Langkah 7: Atur izin folder

Laravel perlu menulis ke `storage` dan `bootstrap/cache`. Berikan akses tulis ke grup `www-data` (pengguna PHP-FPM di Ubuntu), bukan `chmod 777`:

```bash
sudo chown -R deploy:www-data storage bootstrap/cache
sudo chmod -R ug+rwX storage bootstrap/cache
```

## Langkah 8: Konfigurasi Nginx

Buat `/etc/nginx/sites-available/appku`. Konfigurasi ini diadaptasi dari contoh di dokumentasi deployment Laravel, dengan socket PHP 8.3:

```nginx
server {
    listen 80;
    listen [::]:80;
    server_name appku.example;
    root /var/www/appku/public;

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

    index index.php;
    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

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

Perhatikan `root` yang menunjuk ke folder `public`. Jangan pernah mengarahkan domain ke akar proyek, karena file `.env` dan kode sumber bisa ikut terbuka. Aktifkan situs:

```bash
sudo ln -s /etc/nginx/sites-available/appku /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```

Setelah domain mengarah ke IP server, pasang HTTPS dengan [Let's Encrypt dan Certbot](https://nivelva.com/insight/cara-pasang-ssl-let-s-encrypt-gratis-certbot).

## Langkah 9: Bagaimana mengoptimalkan untuk produksi?

```bash
sudo -u deploy php artisan optimize
```

Perintah ini menyimpan cache konfigurasi, event, route, dan view sekaligus. Akibatnya, setiap kali `.env` atau konfigurasi diubah, jalankan lagi `php artisan optimize`, karena setelah konfigurasi di-cache file `.env` tidak dibaca ulang.

## Langkah 10: Queue worker dan scheduler

Kalau aplikasi memakai antrean, jalankan worker sebagai layanan systemd agar hidup lagi saat server reboot. Buat `/etc/systemd/system/appku-queue.service`:

```ini
[Unit]
Description=Laravel queue worker appku
After=network.target

[Service]
User=deploy
Group=www-data
WorkingDirectory=/var/www/appku
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=3 --max-time=3600
Restart=always

[Install]
WantedBy=multi-user.target
```

Aktifkan dengan `sudo systemctl enable --now appku-queue`. Untuk scheduler, tambahkan cron milik pengguna `deploy` lewat `sudo -u deploy crontab -e`:

```text
* * * * * cd /var/www/appku && php artisan schedule:run >> /dev/null 2>&1
```

Setiap kali deploy versi baru, jalankan `php artisan queue:restart` agar worker memuat kode terbaru.

## Komponen apa saja yang sudah terpasang?

| Komponen | Pilihan di panduan ini | Catatan |
|:--|:--|:--|
| PHP | 8.3 (bawaan Ubuntu 24.04) | Minimal untuk Laravel 13 |
| Web server | Nginx + PHP-FPM | Root ke folder `public` |
| Database | MariaDB | Hanya di `127.0.0.1` |
| Queue | systemd | Restart otomatis |
| Scheduler | cron tiap menit | `schedule:run` |

## Pertanyaan yang sering diajukan

### Apakah harus memakai Nginx, tidak bisa Apache?

Bisa memakai Apache. Yang penting document root mengarah ke folder `public` dan semua request diteruskan ke `public/index.php`.

### Apa yang perlu dilakukan setiap kali deploy ulang?

Urutan umumnya: `git pull`, `composer install --no-dev --optimize-autoloader`, `php artisan migrate --force`, `php artisan optimize`, lalu `php artisan queue:restart`.

### Kenapa muncul error "Permission denied" di storage/logs?

Biasanya karena file dibuat oleh pengguna lain (misalnya root saat menjalankan Artisan). Jalankan ulang perintah `chown` dan `chmod` di langkah 7, dan biasakan menjalankan Artisan sebagai pengguna `deploy`.

### Berapa spesifikasi VPS minimal untuk Laravel?

Untuk aplikasi kecil dengan database di server yang sama, 1 sampai 2 GB RAM biasanya cukup untuk mulai. Pantau pemakaian dan naikkan bila antrean atau trafik bertambah.

Checklist sebelum aplikasi diumumkan:

- `APP_ENV=production` dan `APP_DEBUG=false`.
- Nginx menunjuk ke folder `public`, bukan akar proyek.
- Izin `storage` dan `bootstrap/cache` benar, tanpa `777`.
- HTTPS aktif dan perpanjangan otomatis sudah diuji.
- Queue worker berjalan sebagai layanan, cron scheduler terpasang.
- Backup database terjadwal.

## Sumber

- <https://laravel.com/docs/13.x/deployment>
- <https://laravel.com/docs/releases>
- <https://getcomposer.org/download/>

---

Diterbitkan oleh Nivelva Insight (https://nivelva.com/insight/). Artikel ini: https://nivelva.com/insight/cara-deploy-aplikasi-laravel-vps-ubuntu-24-04
Kontak Nivelva: WhatsApp https://wa.me/6285111245007, email hello@nivelva.com
