Cara Install dan Konfigurasi Nginx untuk Laravel di Ubuntu
Laravel merupakan salah satu framework PHP populer untuk membangun aplikasi web. Agar aplikasi Laravel dapat diakses melalui browser pada server Ubuntu, diperlukan web server seperti Nginx serta PHP-FPM untuk menjalankan kode PHP.
Konfigurasi Nginx untuk Laravel sedikit berbeda dibandingkan website PHP sederhana. Salah satu bagian terpenting adalah memastikan document root mengarah ke folder public Laravel, bukan ke folder utama project.
Pada panduan ini, kita akan membahas cara install dan konfigurasi Nginx untuk Laravel di Ubuntu secara bertahap.
Panduan ini menggunakan struktur deployment yang umum dan dapat disesuaikan dengan versi Ubuntu, PHP, serta Laravel yang digunakan.
Prasyarat
Sebelum mulai, pastikan Anda sudah memiliki:
- Server Ubuntu yang dapat diakses melalui SSH.
- User dengan akses
sudo. - Project Laravel yang sudah tersedia di server.
- PHP dan Composer.
- Domain atau IP server jika aplikasi akan diakses melalui internet.
Contoh lokasi project Laravel pada panduan ini:
/var/www/myapp
Silakan ganti myapp dengan nama project Anda.
1. Update Package Ubuntu
Langkah pertama adalah memperbarui daftar package Ubuntu.
sudo apt update
sudo apt upgrade -y
Perintah pertama memperbarui informasi repository, sedangkan perintah kedua memasang pembaruan package yang tersedia.
Setelah proses selesai, server siap digunakan untuk instalasi Nginx.
2. Install Nginx
Install Nginx menggunakan package manager Ubuntu:
sudo apt install nginx -y
Setelah instalasi selesai, periksa status Nginx:
sudo systemctl status nginx
Jika Nginx berjalan dengan baik, biasanya akan terlihat status:
active (running)
Anda juga dapat memastikan Nginx aktif setelah server melakukan restart:
sudo systemctl enable nginx
3. Cek Nginx melalui Browser
Jika server memiliki IP publik, buka alamat berikut melalui browser:
http://IP-SERVER
Jika konfigurasi masih menggunakan default Nginx dan service berjalan dengan benar, halaman default Nginx akan ditampilkan.
Jika halaman tersebut muncul, berarti web server sudah berhasil dijalankan.
4. Install PHP-FPM
Nginx tidak menjalankan kode PHP secara langsung. Untuk Laravel, Nginx perlu meneruskan request PHP kepada PHP-FPM.
Install PHP-FPM dan beberapa extension yang umum diperlukan Laravel:
sudo apt install php-fpm php-cli php-mbstring php-xml php-curl php-zip php-bcmath php-mysql php-tokenizer -y
Setelah selesai, cek versi PHP:
php -v
Kemudian cek service PHP-FPM:
sudo systemctl status php8.3-fpm
Nama service dapat berbeda tergantung versi PHP yang terpasang.
Misalnya pada server dengan PHP 8.4, service-nya dapat berupa:
php8.4-fpm
Untuk mengetahui versi PHP-FPM yang tersedia, Anda dapat melihat directory socket:
ls /run/php/
Contoh hasil:
php8.3-fpm.sock
Informasi socket ini nantinya diperlukan dalam konfigurasi Nginx.
5. Pastikan Project Laravel Sudah Tersedia
Misalnya project Laravel berada di:
/var/www/myapp
Periksa isinya:
cd /var/www/myapp
ls
Project Laravel normalnya memiliki struktur seperti:
app/
bootstrap/
config/
database/
public/
resources/
routes/
storage/
vendor/
artisan
composer.json
.env
Folder yang sangat penting untuk konfigurasi Nginx adalah:
public/
Nginx harus diarahkan ke folder tersebut.
6. Install Dependency Laravel
Jika folder vendor belum tersedia, jalankan Composer dari root project:
cd /var/www/myapp
composer install --no-dev --optimize-autoloader
Untuk production, opsi --no-dev dapat digunakan agar dependency development tidak ikut dipasang.
Pastikan Composer sudah tersedia:
composer --version
Jika Composer belum terinstall, pasang Composer terlebih dahulu menggunakan metode instalasi yang sesuai dengan dokumentasi resmi Composer.
7. Konfigurasi File .env
Laravel membutuhkan file .env untuk konfigurasi environment aplikasi.
Jika belum ada:
cp .env.example .env
Kemudian edit:
nano .env
Contoh konfigurasi dasar:
APP_NAME="My Laravel App"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com
Jika aplikasi menggunakan database, sesuaikan bagian database:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=myapp
DB_PASSWORD=password
Jangan menggunakan password database contoh tersebut pada server production.
8. Generate Application Key
Laravel membutuhkan application key.
Jalankan:
php artisan key:generate
Kemudian pastikan APP_KEY sudah muncul di file .env.
Untuk production, jangan membagikan APP_KEY kepada publik.
9. Atur Permission Laravel
Laravel membutuhkan akses tulis pada beberapa directory, terutama:
storage/
bootstrap/cache/
Salah satu konfigurasi yang umum adalah memberikan ownership project kepada user yang digunakan untuk deployment dan memastikan PHP-FPM dapat menulis ke directory yang diperlukan.
Contoh sederhana:
sudo chown -R $USER:www-data /var/www/myapp
Kemudian:
sudo chmod -R 775 /var/www/myapp/storage
sudo chmod -R 775 /var/www/myapp/bootstrap/cache
Konfigurasi permission sebaiknya disesuaikan dengan model deployment dan kebutuhan keamanan server. Hindari menggunakan:
chmod -R 777
karena memberikan permission yang terlalu terbuka.
10. Buat Konfigurasi Server Block Nginx
Selanjutnya buat file konfigurasi Nginx untuk Laravel.
Misalnya:
sudo nano /etc/nginx/sites-available/myapp
Masukkan konfigurasi berikut:
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;
}
}
Ganti:
example.com
dengan domain Anda.
Ganti juga:
/var/www/myapp
dengan lokasi project Laravel.
Perhatikan bagian:
root /var/www/myapp/public;
Folder public merupakan document root Laravel.
11. Sesuaikan PHP-FPM Socket
Bagian berikut:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
harus sesuai dengan versi PHP-FPM yang terpasang.
Periksa socket dengan:
ls /run/php/
Misalnya hasilnya:
php8.4-fpm.sock
Maka konfigurasi menjadi:
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
Jika socket salah, request PHP biasanya akan menghasilkan error seperti 502 Bad Gateway.
12. Aktifkan Server Block
Setelah konfigurasi dibuat, buat symbolic link ke sites-enabled:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
Jika tidak membutuhkan konfigurasi default Nginx, Anda dapat menonaktifkannya:
sudo rm /etc/nginx/sites-enabled/default
Hati-hati saat menjalankan perintah tersebut pada server yang sudah digunakan untuk website lain.
13. Test Konfigurasi Nginx
Sebelum melakukan restart atau reload, selalu periksa konfigurasi:
sudo nginx -t
Jika konfigurasi benar, hasilnya akan menunjukkan bahwa syntax berhasil dan test konfigurasi sukses.
Jika terdapat error, jangan melakukan reload terlebih dahulu. Periksa pesan error dan perbaiki file konfigurasi.
14. Reload Nginx
Jika konfigurasi sudah benar:
sudo systemctl reload nginx
Anda juga dapat memeriksa status:
sudo systemctl status nginx
15. Jalankan Migration Laravel
Jika aplikasi menggunakan database dan migration sudah siap:
php artisan migrate --force
Opsi --force digunakan agar migration dapat dijalankan dalam environment production tanpa prompt interaktif.
Pastikan database dan konfigurasi .env sudah benar sebelum menjalankan migration.
16. Optimalkan Laravel untuk Production
Setelah aplikasi berhasil berjalan, beberapa cache Laravel dapat dibuat untuk meningkatkan efisiensi aplikasi.
Salah satu pendekatan yang umum:
php artisan optimize
Anda juga dapat menjalankan command cache tertentu sesuai kebutuhan versi Laravel dan strategi deployment aplikasi.
Jangan melakukan cache configuration secara sembarangan jika file .env masih berubah-ubah. Pastikan konfigurasi production sudah benar sebelum melakukan optimasi.
17. Hubungkan Domain ke Server
Jika ingin mengakses Laravel menggunakan domain, buat DNS record yang mengarah ke IP server.
Contohnya:
example.com → IP-SERVER
Setelah DNS berhasil mengarah ke server, pastikan server_name pada Nginx sesuai:
server_name example.com www.example.com;
Waktu propagasi DNS dapat berbeda-beda tergantung penyedia DNS dan konfigurasi TTL.
18. Pasang HTTPS dengan SSL
Setelah domain berhasil mengarah ke server, sebaiknya aplikasi production menggunakan HTTPS.
Salah satu pilihan populer adalah Let’s Encrypt dengan Certbot.
Install Certbot dan plugin Nginx:
sudo apt install certbot python3-certbot-nginx -y
Kemudian jalankan:
sudo certbot --nginx -d example.com -d www.example.com
Ikuti instruksi yang ditampilkan.
Certbot dapat membantu mendapatkan sertifikat TLS dan menyesuaikan konfigurasi Nginx.
Setelah HTTPS aktif, pastikan .env menggunakan URL HTTPS:
APP_URL=https://example.com
19. Buat Symbolic Link Storage Laravel
Jika aplikasi menggunakan file yang dapat diakses melalui web, Laravel biasanya membutuhkan symbolic link dari public/storage ke storage/app/public.
Jalankan:
php artisan storage:link
Setelah berhasil, file yang sesuai dapat diakses melalui:
/public/storage
sesuai konfigurasi aplikasi.
20. Troubleshooting Nginx dan Laravel
Jika Laravel tidak dapat dibuka setelah konfigurasi, jangan langsung mengubah banyak konfigurasi sekaligus. Periksa masalah dari lapisan paling dasar.
Error 502 Bad Gateway
Salah satu penyebab umum adalah Nginx tidak dapat berkomunikasi dengan PHP-FPM.
Periksa:
sudo systemctl status php8.3-fpm
Kemudian pastikan socket pada konfigurasi Nginx benar:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
Sesuaikan nomor versi PHP dengan server Anda.
Error 403 Forbidden
Periksa:
- Permission directory.
- Ownership project.
- Apakah
rootmengarah ke folderpublic. - Apakah Nginx memiliki akses membaca file aplikasi.
Periksa juga konfigurasi:
root /var/www/myapp/public;
Error 404
Jika semua URL Laravel menghasilkan 404, periksa bagian:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Konfigurasi try_files penting agar request yang tidak merujuk langsung ke file diteruskan ke Laravel.
Error 500
Periksa log Laravel:
tail -f storage/logs/laravel.log
Periksa juga log Nginx:
sudo tail -f /var/log/nginx/error.log
Dari log tersebut biasanya dapat diketahui apakah masalah berasal dari aplikasi Laravel, PHP, permission, atau konfigurasi Nginx.
21. Periksa Status Semua Service
Untuk memastikan server berjalan normal, periksa beberapa service utama:
sudo systemctl status nginx
Kemudian:
sudo systemctl status php8.3-fpm
Jika menggunakan MySQL:
sudo systemctl status mysql
Sesuaikan versi PHP dan database dengan server Anda.
Konfigurasi Nginx Laravel yang Minimal
Jika Anda hanya membutuhkan contoh konfigurasi inti, bentuk sederhananya adalah:
server {
listen 80;
server_name example.com;
root /var/www/myapp/public;
index index.php;
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;
}
}
Tiga bagian yang paling penting adalah:
rootdiarahkan kepublic.try_filesmeneruskan request keindex.php.fastcgi_passmenghubungkan Nginx dengan PHP-FPM.
Struktur Deployment Laravel dengan Nginx
Secara sederhana, alur request Laravel melalui Nginx adalah:
Browser → Nginx → PHP-FPM → Laravel → Database
Sedangkan struktur directory-nya:
/var/www/myapp/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
│ ├── index.php
│ ├── css/
│ └── js/
├── resources/
├── routes/
├── storage/
├── vendor/
├── artisan
├── composer.json
└── .env
Nginx hanya perlu menjadikan:
/var/www/myapp/public
sebagai document root.
Jangan menjadikan:
/var/www/myapp
sebagai document root karena file internal project seperti .env dan source code tidak seharusnya menjadi bagian dari direktori yang dapat diakses langsung oleh web.
Checklist Sebelum Laravel Dibuka ke Publik
Sebelum deployment dianggap selesai, periksa beberapa hal berikut:
- Nginx berstatus
active (running). - PHP-FPM berjalan.
rootNginx mengarah ke folderpublic.- Socket PHP-FPM sesuai dengan versi PHP.
- Permission
storagedanbootstrap/cachesudah benar. - File
.envsudah dikonfigurasi. APP_DEBUG=falseuntuk production.- Database dapat terhubung.
- DNS sudah mengarah ke server.
- HTTPS sudah aktif.
- Firewall hanya membuka port yang diperlukan.
- Log Nginx dan Laravel dapat dipantau.
Kesimpulan
Menggunakan Nginx untuk Laravel di Ubuntu sebenarnya tidak terlalu rumit jika memahami alur antara Nginx, PHP-FPM, dan Laravel.
Langkah utamanya adalah menginstall Nginx dan PHP-FPM, menyiapkan project Laravel, membuat server block, kemudian mengarahkan document root ke folder public.
Konfigurasi paling penting yang perlu diperhatikan adalah:
root /var/www/myapp/public;
serta:
try_files $uri $uri/ /index.php?$query_string;
dan koneksi Nginx ke PHP-FPM melalui:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
Setelah aplikasi berhasil berjalan, lanjutkan dengan konfigurasi HTTPS, permission yang tepat, optimasi Laravel, firewall, serta monitoring log agar deployment lebih aman dan stabil.
FAQ Nginx untuk Laravel di Ubuntu
Apakah Laravel bisa berjalan menggunakan Nginx?
Ya. Laravel dapat berjalan menggunakan Nginx sebagai web server dan PHP-FPM sebagai proses yang menjalankan kode PHP.
Kenapa document root Laravel harus diarahkan ke folder public?
Folder public merupakan entry point aplikasi Laravel. Mengarahkannya ke public juga membantu mencegah file internal project seperti .env dan source code diakses langsung melalui web.
Apa fungsi PHP-FPM pada Laravel?
PHP-FPM menjalankan kode PHP dan menerima request PHP yang diteruskan oleh Nginx. Nginx sendiri tidak mengeksekusi kode PHP secara langsung.
Apa penyebab error 502 Bad Gateway pada Laravel?
Salah satu penyebab yang paling umum adalah Nginx tidak dapat terhubung ke PHP-FPM. Periksa status PHP-FPM dan pastikan fastcgi_pass menggunakan socket yang benar.
Mengapa Laravel menghasilkan error 403 Forbidden?
Error 403 dapat disebabkan oleh permission atau ownership file yang tidak tepat, konfigurasi Nginx, maupun document root yang salah. Pastikan Nginx dapat membaca directory public dan file aplikasi yang diperlukan.
Apakah Nginx harus di-restart setelah mengubah konfigurasi?
Tidak selalu. Setelah mengubah konfigurasi, sebaiknya jalankan:
sudo nginx -t
Jika tidak ada error, konfigurasi dapat diterapkan menggunakan:
sudo systemctl reload nginx
Reload biasanya cukup untuk perubahan konfigurasi tanpa menghentikan service secara penuh.
Apakah Laravel di Ubuntu harus menggunakan HTTPS?
Untuk aplikasi production yang diakses melalui internet, HTTPS sangat direkomendasikan karena mengenkripsi komunikasi antara browser dan server serta membantu melindungi data yang dikirimkan pengguna.
Apakah Nginx lebih baik daripada Apache untuk Laravel?
Keduanya dapat digunakan untuk Laravel. Nginx populer untuk deployment aplikasi web karena arsitektur dan performanya cocok untuk banyak skenario, tetapi pilihan web server sebaiknya disesuaikan dengan kebutuhan dan infrastruktur aplikasi.
Versi PHP berapa yang harus digunakan untuk Laravel?
Versi PHP yang dibutuhkan bergantung pada versi Laravel yang digunakan. Selalu periksa requirement versi Laravel yang sedang digunakan dan pilih versi PHP yang kompatibel.
Apakah konfigurasi Nginx Laravel sama untuk semua versi Ubuntu?
Konsep dasarnya sama, tetapi nama package, versi PHP, lokasi socket PHP-FPM, dan detail konfigurasi dapat berbeda. Karena itu, periksa versi Ubuntu dan PHP pada server sebelum menerapkan konfigurasi.
