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 root mengarah ke folder public.
  • 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:

  • root diarahkan ke public.
  • try_files meneruskan request ke index.php.
  • fastcgi_pass menghubungkan 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.
  • root Nginx mengarah ke folder public.
  • Socket PHP-FPM sesuai dengan versi PHP.
  • Permission storage dan bootstrap/cache sudah benar.
  • File .env sudah dikonfigurasi.
  • APP_DEBUG=false untuk 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.