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?