M
Mr Sugiarto
Developer
22 Sep 2026 3 min read

Aplikasi sudah lengkap dan jalan mulus di laravel13-blog-dasar.test. Episode ini kita bahas cara membawanya ke server sungguhan supaya bisa diakses publik lewat domain asli.

Screenshot: Perintah caching production (config:cache, route:cache, view:cache) berjalan sukses. Perintah caching production (config:cache, route:cache, view:cache) berjalan sukses.

Requirement server

Sebelum mulai, pastikan VPS kamu punya:

  • PHP 8.3+ dengan extension standar (mbstring, xml, curl, mysql, gd, zip)
  • MySQL 8+
  • Nginx
  • Composer
  • Node.js + npm (hanya dipakai saat build, tidak perlu jalan terus di production)

Clone dan install dependency

git clone <your-repo-url> /var/www/blog-dasar
cd /var/www/blog-dasar

composer install --optimize-autoloader --no-dev
npm install && npm run build

Flag --no-dev di composer memastikan package development (testing, debugging) tidak ikut terpasang di production — mengurangi ukuran dan potensi celah keamanan.

Environment production

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

Edit .env dengan kredensial database production yang sesungguhnya, dan pastikan dua baris ini:

APP_ENV=production
APP_DEBUG=false

APP_DEBUG=false itu wajib. Kalau dibiarkan true di production, error apa pun akan menampilkan stack trace lengkap ke publik — termasuk isi file .env dalam beberapa kasus. Ini salah satu kebocoran keamanan paling umum di aplikasi Laravel yang deploy sembarangan.

Migration dan storage link

php artisan migrate --force
php artisan storage:link

Flag --force diperlukan karena secara default Laravel menolak menjalankan migration di environment production tanpa konfirmasi eksplisit — ini pengaman supaya tidak ada yang tidak sengaja menjalankan migration production.

Caching untuk performa

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

Ketiga perintah ini meng-compile config, route, dan view jadi satu file cache, menghindari Laravel membaca ulang puluhan file setiap request — dampaknya signifikan untuk response time di production.

Permission storage dan cache

chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache

Web server (biasanya user www-data) butuh akses tulis ke folder ini untuk log, cache, dan file upload.

Konfigurasi Nginx

server {
    listen 80;
    server_name your-domain.com;
    root /var/www/blog-dasar/public;

    index index.php;

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

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }

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

Perhatikan root mengarah ke folder public, bukan root repository — ini penting supaya file sensitif seperti .env dan app/ tidak bisa diakses langsung lewat URL.

SSL gratis dengan Let's Encrypt

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

Certbot otomatis mengurus konfigurasi HTTPS di Nginx dan memperbarui sertifikat sebelum expired.

Alur update setelah deploy pertama

git pull origin main
composer install --optimize-autoloader --no-dev
npm run build
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache

Selanjutnya

Ini episode terakhir yang berisi kode — episode penutup berikutnya adalah rangkuman seluruh perjalanan seri ini.

M
Mr Sugiarto

Developer

Bagian dari Series: Laravel 13 Dasar — Belajar Fundamental Lewat Blog Sederhana
Lihat Series Lengkap