Cara Deploy Laravel ke VPS Ubuntu Menggunakan Nginx dan PHP-FPM
Persiapan Server
Sebelum melakukan deployment, siapkan:
VPS Ubuntu.
Domain atau subdomain.
Source code Laravel.
Database.
Akses SSH.
Composer.
PHP-FPM.
Arsitektur sederhananya:
Internet
↓
Nginx
↓
PHP-FPM
↓
Laravel
↓
Database1. Update Ubuntu
Login ke VPS melalui SSH:
ssh root@IP_SERVERKemudian update:
sudo apt update
sudo apt upgrade -y2. Install Nginx
Install Nginx:
sudo apt install nginx -yPeriksa status:
sudo systemctl status nginxJika aktif, buka alamat IP server melalui browser untuk memastikan Nginx sudah berjalan.
3. Install PHP dan PHP-FPM
Versi PHP harus disesuaikan dengan requirement Laravel yang digunakan.
Contoh:
sudo apt install php8.3-fpm php8.3-cli php8.3-mysql \
php8.3-mbstring php8.3-xml php8.3-curl \
php8.3-zip php8.3-bcmath php8.3-intl -yPeriksa:
php -vKemudian:
sudo systemctl status php8.3-fpm4. Install Composer
Periksa apakah Composer sudah tersedia:
composer --versionJika belum, install Composer sesuai dokumentasi resmi Composer.
Setelah selesai:
composer --versionPastikan Composer dapat dijalankan dari terminal.
5. Install Git
Jika source code Laravel berada di repository Git:
sudo apt install git -yKemudian:
git --version6. Membuat Folder Aplikasi
Contohnya:
sudo mkdir -p /var/www/myappKemudian masuk:
cd /var/www/myappClone repository:
git clone https://github.com/username/repository.git .Sesuaikan URL repository dengan project Anda.
7. Install Dependency Laravel
Masuk ke folder aplikasi:
cd /var/www/myappKemudian:
composer install \
--no-dev \
--optimize-autoloaderUntuk production, dependency development sebaiknya tidak ikut diinstall.
8. Konfigurasi File .env
Buat .env:
cp .env.example .envKemudian edit:
nano .envContoh:
APP_NAME="My Application"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myapp_user
DB_PASSWORD=********Jangan memasukkan file .env ke repository publik.
9. Generate Application Key
Jalankan:
php artisan key:generatePeriksa:
APP_KEY=base64:xxxxxxxxPastikan APP_KEY tersedia sebelum aplikasi digunakan.
10. Konfigurasi Database
Jika menggunakan MySQL:
sudo apt install mysql-server -yMasuk ke MySQL:
sudo mysqlBuat database:
CREATE DATABASE myapp;Buat user:
CREATE USER 'myapp_user'@'localhost'
IDENTIFIED BY 'password-kuat';Berikan permission:
GRANT ALL PRIVILEGES
ON myapp.*
TO 'myapp_user'@'localhost';Kemudian:
FLUSH PRIVILEGES;
EXIT;Sesuaikan nama database, username, dan password dengan kebutuhan aplikasi.
11. Jalankan Migration
Setelah .env siap:
php artisan migrate --force--force diperlukan agar migration dapat dijalankan pada environment production tanpa prompt interaktif.
12. Atur Permission Laravel
Laravel membutuhkan akses tulis pada:
storage/
bootstrap/cache/Jika PHP-FPM menggunakan www-data:
sudo chown -R www-data:www-data \
storage bootstrap/cacheKemudian:
sudo chmod -R 775 \
storage bootstrap/cacheUser PHP-FPM dapat berbeda pada server tertentu, jadi pastikan owner sesuai dengan konfigurasi server.
13. Buat Storage Link
Jika aplikasi menggunakan upload file:
php artisan storage:linkHasilnya:
public/storage
↓
storage/app/public14. Konfigurasi Nginx
Buat konfigurasi:
sudo nano /etc/nginx/sites-available/myappContoh:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/myapp/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Bagian yang paling penting adalah:
root /var/www/myapp/public;Laravel harus diarahkan ke folder public, bukan root project.
15. Aktifkan Konfigurasi Nginx
Buat symbolic link:
sudo ln -s \
/etc/nginx/sites-available/myapp \
/etc/nginx/sites-enabled/myappPeriksa konfigurasi:
sudo nginx -tJika berhasil:
syntax is ok
test is successfulRestart Nginx:
sudo systemctl reload nginx16. Pastikan PHP-FPM Sesuai
Jika menggunakan PHP 8.3:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;Pastikan socket tersedia:
ls /run/php/Contohnya:
php8.3-fpm.sockJika socket berbeda, sesuaikan konfigurasi Nginx.
17. Aktifkan HTTPS
Setelah domain mengarah ke VPS, HTTPS dapat dikonfigurasi menggunakan Let's Encrypt dan Certbot.
Install:
sudo apt install certbot python3-certbot-nginx -yKemudian:
sudo certbot --nginx \
-d example.com \
-d www.example.comCertbot akan membantu mengatur sertifikat dan konfigurasi HTTPS pada Nginx.
18. Optimasi Laravel untuk Production
Setelah deployment:
php artisan optimizeAtau:
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cachePastikan:
APP_ENV=production
APP_DEBUG=falseJangan menjalankan production dengan:
APP_DEBUG=truekarena dapat menampilkan informasi internal aplikasi.
19. Menjalankan Queue Worker
Jika aplikasi menggunakan Laravel Queue, worker perlu dijalankan.
Contohnya:
php artisan queue:workNamun, jangan menjalankannya hanya dari terminal SSH karena proses dapat berhenti ketika session ditutup.
Gunakan process manager seperti Supervisor atau systemd.
Contoh menggunakan Supervisor:
sudo apt install supervisor -yKonfigurasi worker:
/etc/supervisor/conf.d/laravel-worker.confContoh:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/myapp/artisan queue:work
autostart=true
autorestart=true
numprocs=1
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/myapp/storage/logs/worker.logKemudian:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*20. Laravel Scheduler
Jika aplikasi menggunakan Scheduler, tambahkan cron:
* * * * * cd /var/www/myapp && php artisan schedule:run >> /dev/null 2>&1Laravel kemudian menjalankan task yang sudah dijadwalkan.
Contohnya:
Cron
↓
Laravel Scheduler
↓
Backup
↓
Notification
↓
Cleanup21. Firewall VPS
Aktifkan firewall dengan hati-hati.
Contoh menggunakan UFW:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enableKemudian:
sudo ufw statusJangan membuka port database ke internet jika tidak diperlukan.
22. Periksa Log Jika Website Error
Log Laravel:
tail -f storage/logs/laravel.logLog Nginx:
sudo tail -f /var/log/nginx/error.logLog PHP-FPM:
sudo journalctl -u php8.3-fpm -fKetiga log tersebut sangat membantu ketika aplikasi mengalami error setelah deployment.
23. Masalah yang Sering Terjadi
Error 403 Forbidden
Periksa:
root /var/www/myapp/public;dan permission folder.
Semua Route 404
Pastikan Nginx memiliki:
try_files $uri $uri/ /index.php?$query_string;Error 502 Bad Gateway
Biasanya periksa:
PHP-FPM
↓
Socket PHP
↓
NginxPastikan:
sudo systemctl status php8.3-fpmdan socket sesuai.
Error Permission Denied
Periksa:
storage/
bootstrap/cache/Error Database
Periksa:
DB_HOST
DB_PORT
DB_DATABASE
DB_USERNAME
DB_PASSWORDKemudian:
php artisan migrate:status24. Alur Deployment Laravel
Secara keseluruhan:
Source Code
↓
Git Clone / Pull
↓
Composer Install
↓
.env Production
↓
Application Key
↓
Database
↓
Migration
↓
Permission
↓
Storage Link
↓
Nginx
↓
PHP-FPM
↓
HTTPS
↓
Laravel ProductionDeployment Laravel Bersama Ovla Media
Ovla Media dapat membantu proses deployment dan maintenance aplikasi Laravel pada:
VPS Ubuntu.
Nginx.
PHP-FPM.
MySQL.
PostgreSQL.
Docker.
cPanel.
SSL/HTTPS.
Queue Worker.
Laravel Scheduler.
Backup database.
Monitoring server.
Deployment juga dapat disesuaikan dengan kebutuhan aplikasi bisnis, POS, klinik, inventory, SaaS, dan sistem multi-cabang.
Kesimpulan
Deploy Laravel ke VPS Ubuntu membutuhkan beberapa komponen utama:
Ubuntu
+
Nginx
+
PHP-FPM
+
Composer
+
Database
+
LaravelKonfigurasi Nginx harus mengarah ke:
/var/www/myapp/publicsedangkan PHP harus diproses melalui PHP-FPM.
Setelah aplikasi berjalan, jangan lupa mengaktifkan HTTPS, mengatur permission, menonaktifkan APP_DEBUG, menjalankan queue worker jika diperlukan, serta mengatur Laravel Scheduler dan backup database.
Dengan konfigurasi yang tepat, VPS Ubuntu dapat menjadi environment production yang stabil untuk menjalankan aplikasi Laravel.
Artikel Terkait
Cara Membuat QR Code untuk Verifikasi Invoice Laravel
QR Code pada invoice dapat digunakan untuk membantu pelanggan memverifikasi keaslian dan status dokumen secara online. Dengan Laravel, QR Code dapat diarahkan ke halaman verifikasi yang menampilkan nomor invoice, tanggal, nominal, dan status pembayaran tanpa perlu membuka database secara langsung.
Cara Mengatasi Permission Denied pada Folder Storage Laravel
Error “Permission Denied” pada folder storage Laravel biasanya terjadi karena user yang menjalankan PHP tidak memiliki izin untuk membaca atau menulis file. Masalah ini sering muncul setelah deployment, migrasi server, perubahan owner folder, atau penggunaan Laravel pada VPS dan cPanel.
Cara Mengatasi Could Not Find Driver pada Laravel dan PHP
Error “Could Not Find Driver” pada Laravel biasanya terjadi karena extension PHP untuk database yang digunakan belum terpasang atau belum aktif. Masalah ini sering ditemukan saat menggunakan MySQL, PostgreSQL, SQLite, atau aplikasi Laravel pada server production.