Semua Panduan VPSTutorial LinuxWindows & RDPWebsite & WordPressOtomasi & BotTips Hemat Server
VPS Indonesiaβ€ΊCara Deploy Laravel di VPS KVM NVMe Jakarta untu
Tutorial Linux

Cara Deploy Laravel di VPS KVM NVMe Jakarta untuk Toko Online

✍️ Marsuki πŸ“… 22 Oktober 2026 ⏱️ 7 mnt baca πŸ‘οΈ 0Γ—
Cara Deploy Laravel di VPS KVM NVMe Jakarta untuk Toko Online

Bagaimana jika toko online Laravel yang sudah Anda bangun berminggu-minggu hanya bisa dibuka di laptop sendiri, sementara pelanggan menunggu? Itulah yang dialami Rina, pemilik toko perlengkapan kopi bernama "Kopi Kita". Aplikasinya sudah jalan sempurna di komputer lokal, tetapi ia bingung bagaimana membawanya ke internet. Artikel ini mengikuti langkah Rina men-deploy Laravel ke VPS KVM NVMe di Jakarta, dari server kosong sampai toko online yang bisa diakses publik dengan HTTPS.

Panduan ini ditulis untuk pemula. Semua perintah diuji pada Ubuntu 24.04 LTS dan bisa Anda ikuti berurutan. Fokusnya sempit dan praktis: satu aplikasi Laravel toko online, satu VPS, satu domain.

Gambaran Studi Kasus: Toko Kopi Kita

Kebutuhan Rina cukup umum untuk toko online skala kecil sampai menengah:

  • Aplikasi Laravel 11 dengan katalog produk, keranjang, dan checkout.
  • Database MySQL untuk produk dan pesanan.
  • Antrean (queue) untuk mengirim email konfirmasi pesanan.
  • Pengunjung mayoritas dari Indonesia, sehingga latensi rendah sangat berpengaruh pada kecepatan halaman.
  • Anggaran terbatas, sehingga VPS entry level sudah cukup di awal.

Rina memilih VPS KVM dengan penyimpanan NVMe di Jakarta. Lokasi Jakarta membuat waktu respons ke pengunjung Indonesia lebih pendek dibanding server di luar negeri, dan NVMe mempercepat operasi baca-tulis database, terutama saat banyak pesanan masuk bersamaan. Spesifikasi awalnya: 2 vCPU, 2 GB RAM, 40 GB NVMe, dengan root access.

Glosarium Istilah untuk Pemula

  • VPS (Virtual Private Server): server virtual dengan sumber daya yang dialokasikan khusus untuk Anda.
  • KVM: teknologi virtualisasi yang memberi Anda kernel dan sumber daya terisolasi, bukan sekadar berbagi dengan pengguna lain.
  • NVMe: jenis SSD modern yang jauh lebih cepat dari SSD SATA biasa.
  • Root access: hak akses administrator penuh ke server.
  • SSH: cara aman mengendalikan server lewat terminal dari komputer Anda.
  • Nginx: web server yang menerima permintaan browser.
  • PHP-FPM: proses yang menjalankan kode PHP Laravel atas permintaan Nginx.
  • Composer: pengelola paket PHP.
  • Queue worker: proses latar belakang yang mengerjakan tugas berat, seperti kirim email.

Analogi sederhana: bayangkan toko fisik. VPS adalah ruko yang Anda sewa, Nginx adalah kasir di depan yang menyambut pembeli, PHP-FPM adalah pegawai yang meracik pesanan, dan MySQL adalah gudang tempat semua stok dicatat. Queue worker adalah kurir yang mengantar pesanan tanpa membuat kasir menunggu.

Langkah 1: Masuk ke Server dan Amankan Dasar

Setelah VPS aktif, Anda menerima alamat IP dan kata sandi root. Masuk lewat terminal:

ssh root@IP_SERVER_ANDA

Perbarui paket lalu buat pengguna non-root agar Anda tidak bekerja sebagai root setiap saat:

apt update && apt upgrade -y
adduser deploy
usermod -aG sudo deploy

Aktifkan firewall dasar, izinkan SSH dan web saja:

ufw allow OpenSSH
ufw allow "Nginx Full"
ufw enable

Jika perintah Nginx belum dikenali, jalankan setelah Nginx terpasang pada langkah berikutnya.

Langkah 2: Pasang Nginx, PHP, dan MySQL

Kopi Kita memakai PHP 8.3 yang kompatibel dengan Laravel 11. Pasang semua kebutuhan sekaligus:

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

Pasang Composer:

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

Langkah 3: Siapkan Database

Jalankan sudo mysql, lalu buat database dan pengguna khusus aplikasi. Jangan memakai akun root MySQL untuk Laravel.

CREATE DATABASE kopikita CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'kopi_user'@'localhost' IDENTIFIED BY 'KataSandiKuat!2026';
GRANT ALL PRIVILEGES ON kopikita.* TO 'kopi_user'@'localhost';
FLUSH PRIVILEGES;

Langkah 4: Unggah Kode dan Pasang Dependensi

Rina menyimpan kode di repositori Git. Letakkan aplikasi di /var/www/kopikita:

sudo mkdir -p /var/www/kopikita
sudo chown deploy:deploy /var/www/kopikita
cd /var/www/kopikita
git clone URL_REPOSITORI .
composer install --no-dev --optimize-autoloader

Flag --no-dev membuang paket pengembangan yang tidak perlu di produksi, sehingga lebih ringan dan aman.

Langkah 5: Konfigurasi File .env

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

Ubah nilai penting berikut:

APP_ENV=production
APP_DEBUG=false
APP_URL=https://kopikita.example

DB_DATABASE=kopikita
DB_USERNAME=kopi_user
DB_PASSWORD=KataSandiKuat!2026

QUEUE_CONNECTION=database

Pastikan APP_DEBUG=false. Jika true, halaman error bisa membocorkan kredensial dan struktur aplikasi kepada pengunjung.

Lanjutkan dengan migrasi dan optimasi cache:

php artisan migrate --force
php artisan storage:link
php artisan config:cache
php artisan route:cache
php artisan view:cache

Atur izin folder agar Laravel bisa menulis log dan cache:

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

Langkah 6: Konfigurasi Nginx

Buat file /etc/nginx/sites-available/kopikita:

server {
    listen 80;
    server_name kopikita.example www.kopikita.example;
    root /var/www/kopikita/public;
    index index.php;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    # Blokir akses file tersembunyi seperti .env
    location ~ /\.(?!well-known) {
        deny all;
    }
}

Poin terpenting: root mengarah ke folder public, bukan folder utama proyek. Dengan begitu file .env tidak pernah terjangkau dari web. Aktifkan situs:

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

Langkah 7: Arahkan Domain dan Pasang SSL

Di pengelola DNS domain Anda, buat record A yang mengarah ke IP VPS, untuk domain utama dan www. Tunggu propagasi, biasanya beberapa menit hingga satu jam. Lalu pasang sertifikat gratis Let's Encrypt:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d kopikita.example -d www.kopikita.example

Certbot otomatis mengubah konfigurasi Nginx untuk HTTPS dan menjadwalkan pembaruan sertifikat. HTTPS wajib untuk toko online karena halaman checkout memproses data pelanggan.

Langkah 8: Jalankan Queue Worker dengan Supervisor

Tanpa worker, email konfirmasi pesanan Kopi Kita tidak akan pernah terkirim. Pasang Supervisor agar worker hidup terus dan menyala ulang otomatis:

sudo apt install -y supervisor

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

[program:kopikita-worker]
command=php /var/www/kopikita/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=deploy
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/kopikita/storage/logs/worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start kopikita-worker:*

Tambahkan juga scheduler Laravel lewat crontab -e milik pengguna deploy:

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

Langkah 9: Uji Hasilnya

Buka domain di browser. Lalu lakukan pengujian fungsional seperti Rina:

  1. Buka beranda dan halaman produk, pastikan gambar tampil.
  2. Tambahkan produk ke keranjang dan selesaikan checkout percobaan.
  3. Periksa apakah email konfirmasi masuk, bukti worker bekerja.
  4. Cek ikon gembok HTTPS di browser.
  5. Lihat storage/logs/laravel.log untuk memastikan tidak ada error.

Setelah semua beres, Rina mencatat halaman produk termuat jauh lebih cepat dibanding hosting bersama sebelumnya. Hasil ini wajar karena ia mendapat sumber daya khusus, disk NVMe, dan server yang dekat dengan pembelinya. Angka pastinya akan berbeda pada tiap aplikasi, jadi ukur sendiri dengan membandingkan waktu muat sebelum dan sesudah pindah.

Kesalahan Umum Pemula

  • Error 403 atau 500 setelah deploy: hampir selalu karena izin folder storage dan bootstrap/cache. Ulangi perintah chmod dan chown di Langkah 5.
  • Root Nginx salah: mengarahkan ke folder proyek, bukan public. Akibatnya halaman tidak tampil atau .env terekspos.
  • Lupa menjalankan config:cache setelah mengubah .env: perubahan tidak terbaca. Jalankan php artisan config:clear lalu cache ulang.
  • APP_DEBUG masih true: membocorkan informasi sensitif di produksi.
  • Ekstensi PHP kurang: pesan seperti "could not find driver" berarti php8.3-mysql belum terpasang.
  • Worker tidak berjalan: pesanan masuk tetapi email tidak terkirim. Cek status dengan sudo supervisorctl status.
  • Tidak ada backup: database toko adalah aset utama. Jadwalkan mysqldump harian dan simpan salinannya di luar server.
  • Login SSH hanya dengan kata sandi: beralihlah ke SSH key dan nonaktifkan login root agar lebih aman.

Alur Update Aplikasi Berikutnya

Setiap kali ada fitur baru, Rina cukup menjalankan urutan ini di server:

cd /var/www/kopikita
git pull
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan config:cache && php artisan route:cache && php artisan view:cache
sudo supervisorctl restart kopikita-worker:*

Restart worker penting karena proses lama masih memegang kode versi sebelumnya di memori.

Kapan Perlu Upgrade Resource?

Mulailah dari paket kecil, lalu pantau. Tanda perlu upgrade: penggunaan RAM terus di atas 80 persen, CPU tinggi saat promo, atau waktu respons naik ketika pengunjung ramai. Karena memakai KVM, Anda bisa menambah RAM dan vCPU tanpa memigrasi ulang seluruh aplikasi. Pantau dengan htop dan free -h sebelum memutuskan.

Kesimpulan

Men-deploy Laravel ke VPS tidak serumit kelihatannya jika dikerjakan berurutan: amankan server, pasang Nginx, PHP-FPM, dan MySQL, konfigurasi .env, arahkan domain dengan SSL, lalu jalankan queue worker. Kopi Kita kini berjalan stabil di server Jakarta dengan biaya bulanan yang terkendali. Jika Anda ingin mencoba langkah yang sama, VPS Indonesia menyediakan VPS KVM NVMe di Jakarta dengan root access, mulai dari 20 ribu rupiah per bulan, cukup untuk memulai toko online pertama Anda tahun ini.

Pesan VPS Indonesia
Terapkan yang Anda baca langsung di VPS Indonesia.
Kunjungi VPS Indonesia β†—