Tutorial Deploy Laravel di VPS Lokal dengan Nginx & SSL
Baik, saya akan bantu Anda setup deployment Laravel di VPS lokal dan konfigurasi reverse proxy dengan SSL. Berikut langkah-langkahnya:
VPS Lokal (10.122.25.172) - Setup Laravel
1. Install Dependencies
# Update sistem sudo apt update && sudo apt upgrade -y # Install PHP 8.2 dan extensions yang dibutuhkan Laravel sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring \ php8.2-xml php8.2-curl php8.2-zip php8.2-gd php8.2-bcmath php8.2-intl # Install Composer curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer # Install MySQL/MariaDB (opsional, jika butuh database lokal) sudo apt install -y mariadb-server # Install Nginx sudo apt install -y nginx
2. Konfigurasi PHP-FPM
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Pastikan setting:
listen = /run/php/php8.2-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660
3. Setup Direktori Laravel
# Buat direktori untuk aplikasi sudo mkdir -p /var/www/laravel sudo chown -R $USER:www-data /var/www/laravel # Clone atau upload project Laravel Anda cd /var/www/laravel # git clone <repository> . # atau upload via scp/sftp # Install dependencies composer install --optimize-autoloader --no-dev # Set permissions sudo chown -R www-data:www-data /var/www/laravel/storage sudo chown -R www-data:www-data /var/www/laravel/bootstrap/cache sudo chmod -R 775 /var/www/laravel/storage sudo chmod -R 775 /var/www/laravel/bootstrap/cache # Setup .env cp .env.example .env php artisan key:generate # Edit .env sesuai konfigurasi Anda
4. Konfigurasi Nginx di VPS Lokal
sudo nano /etc/nginx/sites-available/laravel
Isi dengan:
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/laravel/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 ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-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;
}
}
Aktifkan konfigurasi:
sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx sudo systemctl restart php8.2-fpm
VPS Proxy (10.122.25.227 + IP Public) - Reverse Proxy dengan SSL
1. Install Certbot untuk SSL
sudo apt update sudo apt install -y certbot python3-certbot-nginx
2. Konfigurasi Reverse Proxy
sudo nano /etc/nginx/sites-available/laravel-proxy
Isi dengan (ganti yourdomain.com dengan domain Anda):
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
# Redirect ke HTTPS (akan otomatis ditambahkan certbot)
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL certificates (akan diisi otomatis oleh certbot)
# ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
# Logs
access_log /var/log/nginx/laravel-access.log;
error_log /var/log/nginx/laravel-error.log;
# Proxy settings
location / {
proxy_pass http://10.122.25.172:80;
proxy_http_version 1.1;
# Headers
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
# Timeouts
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Buffering
proxy_buffering on;
proxy_buffer_size 4k;
proxy_buffers 8 4k;
proxy_busy_buffers_size 8k;
}
# Client settings
client_max_body_size 100M;
}
Aktifkan konfigurasi:
sudo ln -s /etc/nginx/sites-available/laravel-proxy /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
3. Generate SSL Certificate
# Pastikan domain sudah pointing ke IP public VPS proxy sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Certbot akan otomatis:
- Generate SSL certificate
- Update konfigurasi Nginx dengan path certificate
- Setup auto-renewal
4. Setup Auto-Renewal (sudah otomatis, tapi bisa dicek)
# Test renewal sudo certbot renew --dry-run # Cek timer systemd sudo systemctl status certbot.timer
Konfigurasi Tambahan Laravel
Di VPS Lokal, update .env:
APP_URL=https://yourdomain.com # Trusted proxies TRUSTED_PROXIES=10.122.25.227
Update app/Http/Middleware/TrustProxies.php:
protected $proxies = '10.122.25.227';
Testing
- Test VPS Lokal:
curl http://10.122.25.172
- Test dari VPS Proxy:
curl http://10.122.25.172
- Test dari browser: Akses
https://yourdomain.com
Troubleshooting
Jika ada masalah:
# Cek log Nginx di VPS Proxy sudo tail -f /var/log/nginx/laravel-error.log # Cek log Nginx di VPS Lokal sudo tail -f /var/log/nginx/error.log # Cek log Laravel tail -f /var/www/laravel/storage/logs/laravel.log # Test koneksi antar VPS ping 10.122.25.172 # dari VPS proxy ping 10.122.25.227 # dari VPS lokal
Apakah ada yang perlu saya jelaskan lebih detail atau ada kendala spesifik yang Anda hadapi?