Tutorial Upload Laravel 12 + MYSQL ke VPS
Panduan Setup VPS Ubuntu — Laravel + Nginx + SSL
Dokumentasi lengkap konfigurasi VPS dari awal hingga deployment Laravel dengan domain dan SSL.
1. Update & Persiapan Sistem
bash sudo apt update && sudo apt upgrade -y
Jika muncul dialog "Newer kernel available", tekan Enter/OK saja. Itu notifikasi, bukan error.
2. Install PHP 8.2 & Extension Laravel
bash sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-mbstring \ php8.2-xml php8.2-bcmath php8.2-curl php8.2-zip php8.2-tokenizer unzip git
3. Install Composer
bash curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
Verifikasi:
bash composer --version
4. Install MySQL
bash sudo apt install mysql-server -y sudo systemctl start mysql sudo systemctl enable mysql
Buat database (tanpa password root di Ubuntu):
bash sudo mysql
sql CREATE DATABASE presensi_db; EXIT;
5. Install Node.js
Catatan: Gunakan flag DEBIAN_FRONTEND=noninteractive untuk menghindari dialog popup yang menyebabkan terminal stuck.
bash curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo DEBIAN_FRONTEND=noninteractive apt install -y nodejs
Verifikasi:
bash node --version npm --version
6. Install Nginx
bash sudo apt install nginx -y sudo systemctl start nginx sudo systemctl enable nginx
7. Koneksi GitHub via SSH (Private Repository)
Generate SSH key:
bash ssh-keygen -t ed25519 -C "email@kamu.com"
Tekan Enter untuk semua prompt (skip passphrase).
Tampilkan public key:
bash cat ~/.ssh/id_ed25519.pub
Copy seluruh output → GitHub → Settings → SSH and GPG keys → New SSH key → Paste → Save.
Test koneksi:
bash ssh -T git@github.com # Output: Hi username! You've successfully authenticated...
8. Clone Repository
Penting: Jangan gunakan sudo git clone karena SSH key milik user biasa, bukan root.
bash sudo chown -R $USER:$USER /var/www cd /var/www git clone git@github.com:username/nama-repo.git
9. Setup Laravel
bash cd /var/www/presensi # Install dependencies composer install --no-dev --optimize-autoloader npm install # Buat file .env cp .env.example .env nano .env
Isi bagian database di .env:
text DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=presensi_db DB_USERNAME=root DB_PASSWORD=
bash # Generate APP_KEY php artisan key:generate # Jalankan migration & seeder php artisan migrate --seed
10. Permission Storage
bash sudo chown -R $USER:www-data /var/www/presensi sudo chmod -R 775 /var/www/presensi/storage sudo chmod -R 775 /var/www/presensi/bootstrap/cache
Jika muncul error Permission denied saat php artisan config:cache, jalankan ulang dua perintah di atas terlebih dahulu.
11. Konfigurasi Nginx
bash sudo nano /etc/nginx/sites-available/presensi
Isi dengan:
text
server {
listen 80;
server_name smkn1seyegan.my.id www.smkn1seyegan.my.id;
root /var/www/presensi/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:
bash sudo ln -s /etc/nginx/sites-available/presensi /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx
12. Optimasi Laravel Production
bash php artisan config:cache php artisan route:cache php artisan view:cache
13. Setup SSL (Let's Encrypt)
bash sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d smkn1seyegan.my.id -d www.smkn1seyegan.my.id
Ikuti prompt:
- Masukkan email
- Ketik Y untuk setuju terms
- Ketik N untuk share email dengan EFF
- Pilih 2 (Redirect) untuk auto redirect HTTP → HTTPS
Test auto-renewal:
bash sudo certbot renew --dry-run
14. Flow Update Code (Local → GitHub → VPS)
Di Local (Laptop):
bash git add . git commit -m "deskripsi perubahan" git push origin main
Di Server (VPS):
bash cd /var/www/presensi git pull origin main php artisan config:cache php artisan route:cache php artisan view:cache
Shortcut Deploy (semua dalam satu baris):
bash cd /var/www/presensi && git pull origin main && composer install --no-dev --optimize-autoloader && php artisan migrate --force && php artisan config:cache && php artisan route:cache && php artisan view:cache
Buat alias deploy:
bash echo "alias deploy='cd /var/www/presensi && git pull origin main && php artisan config:cache && php artisan route:cache && php artisan view:cache'" >> ~/.bashrc source ~/.bashrc
Selanjutnya cukup ketik deploy di terminal.
Ringkasan Perintah Penting
PerintahFungsisudo systemctl reload nginx | Reload konfigurasi Nginx
sudo systemctl restart php8.2-fpm | Restart PHP-FPM
sudo systemctl status mysql | Cek status MySQL
php artisan migrate | Jalankan migration baru
php artisan config:cache | Cache konfigurasi Laravel
sudo certbot renew | Renew SSL manual
Checklist Akhir
- Ubuntu VPS updated
- PHP 8.2 + extension terinstall
- Composer terinstall
- MySQL + database presensi_db dibuat
- Node.js + NPM terinstall
- Nginx terinstall & dikonfigurasi
- SSH key terdaftar di GitHub
- Repository berhasil di-clone
- Laravel dependencies terinstall
- File .env dikonfigurasi
- Migration & seeder berhasil
- Permission storage diperbaiki
- SSL Let's Encrypt aktif & auto-renew