Seri Belajar Laravel: ← Part 7 — Authentication  |  Part 8 — Deploy (Final)

Ini adalah bagian terakhir dari seri Belajar Laravel! Aplikasi catatan kita sudah lengkap: CRUD, layout profesional, dan sistem login. Sekarang saatnya deploy ke VPS agar bisa diakses siapa saja dari internet.

Di part ini kita pakai Ubuntu 22.04 VPS (bisa dari DigitalOcean, Vultr, Hostinger, Niagahoster Cloud, atau penyedia lain) dengan stack Nginx + PHP 8.2 + MySQL.

📋 Progress Belajarmu

① Setup VPS

Login ke VPS melalui SSH, lalu install semua yang dibutuhkan:

# Update sistem
sudo apt update && sudo apt upgrade -y

# Install Nginx
sudo apt install nginx -y

# Install PHP 8.2 dan extension yang dibutuhkan Laravel
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring \
  php8.2-xml php8.2-curl php8.2-zip php8.2-bcmath php8.2-gd -y

# Install MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation

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

# Install Git
sudo apt install git -y

② Upload Project via Git

Cara termudah dan paling profesional: push ke GitHub dari lokal, lalu pull di VPS.

Di komputer lokal — pastikan project sudah di-push ke GitHub.

Di VPS:

# Pindah ke folder web
cd /var/www

# Clone project dari GitHub
sudo git clone https://github.com/username/nama-project.git catatan-app

# Masuk ke folder project
cd catatan-app

# Install dependencies (tanpa package development)
sudo composer install --no-dev --optimize-autoloader

# Install npm dependencies dan build assets
sudo npm install
sudo npm run build

③ Konfigurasi .env Production

# Copy file .env dari template
sudo cp .env.example .env

# Generate app key baru
sudo php artisan key:generate

# Edit .env
sudo nano .env

Isi .env untuk production:

APP_NAME="Aplikasi Catatan"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://namadomain.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=catatan_db
DB_USERNAME=catatan_user
DB_PASSWORD=password_aman_kamu
⚠️ PENTING: Set APP_DEBUG=false di production! Kalau true, pesan error akan menampilkan kode PHP dan konfigurasi server ke pengguna — ini berbahaya.

Setup database MySQL:

sudo mysql -u root -p

CREATE DATABASE catatan_db;
CREATE USER 'catatan_user'@'localhost' IDENTIFIED BY 'password_aman_kamu';
GRANT ALL PRIVILEGES ON catatan_db.* TO 'catatan_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Jalankan migration:

sudo php artisan migrate --force

④ Konfigurasi Nginx

Buat file konfigurasi Nginx untuk project:

sudo nano /etc/nginx/sites-available/catatan-app
server {
    listen 80;
    server_name namadomain.com www.namadomain.com;
    root /var/www/catatan-app/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 ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
# Aktifkan konfigurasi
sudo ln -s /etc/nginx/sites-available/catatan-app /etc/nginx/sites-enabled/

# Test konfigurasi
sudo nginx -t

# Restart Nginx
sudo systemctl restart nginx

Set permission yang benar agar Laravel bisa menulis ke storage:

sudo chown -R www-data:www-data /var/www/catatan-app
sudo chmod -R 755 /var/www/catatan-app/storage
sudo chmod -R 755 /var/www/catatan-app/bootstrap/cache

⑤ Install SSL Gratis dengan Certbot

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d namadomain.com -d www.namadomain.com

Ikuti panduan interaktif — masukkan email, setujui terms, pilih redirect HTTP ke HTTPS. SSL otomatis terpasang dan akan auto-renewal setiap 90 hari!

⑥ Optimasi Laravel untuk Production

# Cache semua konfigurasi (wajib untuk performance)
php artisan optimize

# Cache route
php artisan route:cache

# Cache view Blade
php artisan view:cache

# Cache konfigurasi
php artisan config:cache

Workflow Deploy Update Berikutnya

Kalau ada perubahan kode dan mau update production:

cd /var/www/catatan-app

# Pull kode terbaru
git pull origin main

# Update dependencies kalau ada package baru
composer install --no-dev --optimize-autoloader

# Jalankan migration baru kalau ada
php artisan migrate --force

# Build ulang assets kalau ada perubahan CSS/JS
npm run build

# Clear dan rebuild cache
php artisan optimize:clear
php artisan optimize

Troubleshooting Umum

MasalahSolusi
500 Server ErrorCek storage/logs/laravel.log, pastikan APP_DEBUG=true sementara untuk debug
Permission deniedJalankan sudo chown -R www-data:www-data storage bootstrap/cache
404 Not FoundPastikan try_files $uri $uri/ /index.php ada di Nginx config
Composer memory limitJalankan COMPOSER_MEMORY_LIMIT=-1 composer install
Database connection refusedCek kredensial di .env, pastikan MySQL running: sudo systemctl status mysql

Selamat! Seri Laravel Selesai 🎉

Kamu telah menyelesaikan seluruh seri Belajar Laravel dari nol hingga deploy:

Langkah selanjutnya? Coba tambah fitur ke aplikasi catatanmu: kategori, pencarian, upload gambar, atau API untuk mobile app. Setiap fitur baru akan memperdalam pemahamanmu tentang Laravel. Selamat coding!