2025-10-19
admin
Diperbarui 2025-10-21

Tutorial Deploy Laravel di VPS Lokal dengan Nginx & SSL

Pelajari langkah demi langkah cara setup deployment Laravel di VPS lokal, lengkap dengan konfigurasi reverse proxy menggunakan Nginx dan pemasangan SSL gratis. Tingkatkan keamanan dan performa website Laravel Anda!
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

  1. Test VPS Lokal:
curl http://10.122.25.172
  1. Test dari VPS Proxy:
curl http://10.122.25.172
  1. 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?

blog admin

Artikel Terkait