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
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
| Masalah | Solusi |
|---|---|
| 500 Server Error | Cek storage/logs/laravel.log, pastikan APP_DEBUG=true sementara untuk debug |
| Permission denied | Jalankan sudo chown -R www-data:www-data storage bootstrap/cache |
| 404 Not Found | Pastikan try_files $uri $uri/ /index.php ada di Nginx config |
| Composer memory limit | Jalankan COMPOSER_MEMORY_LIMIT=-1 composer install |
| Database connection refused | Cek 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:
- ✅ Setup environment dan halaman pertama
- ✅ Controller dan routing
- ✅ Database dan migration
- ✅ Eloquent ORM
- ✅ Form, validasi, dan CRUD lengkap
- ✅ Layout Blade yang konsisten
- ✅ Sistem autentikasi
- ✅ Deploy ke VPS production
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!
Komentar 0