#nginx #server #linux #web development #laravel
Created on January 4, 2025
Lama sekali tidak menulis artikel di blog ini. Kali ini saya akan berbagi tentang cara setup Nginx server untuk deploy aplikasi Laravel. Nginx adalah web server yang populer digunakan untuk menghosting website. Let’s get started!
Nginx atau yang biasa disebut Engine-X adalah sebuah web server yang populer digunakan untuk menghosting website. Nginx memiliki performa yang sangat baik dan stabil, sehingga banyak perusahaan besar yang menggunakan Nginx untuk menghosting website mereka.
Nginx pertama kali dirilis pada tahun 2004 oleh Igor Sysoev. Nginx dikembangkan dengan tujuan untuk mengatasi masalah performa dan skalabilitas yang dimiliki oleh web server Apache. Nginx menggunakan arsitektur event-driven yang memungkinkan Nginx untuk menangani banyak koneksi secara efisien. Bersumber dari https://www.nginx.com/
Pada kesempatan kali ini saya menggunakan Ubuntu versi 24.04.1 LTS kalian dapat menggunakan VPS di cloud tetapi saya menggunakan virtualisasi container dengan LXD (Linux Container) yang berjalan diatas Ubuntu juga, bagi kalian yang menggunakan Ubuntu, untuk tutorial menggunakan LXC atau LXD anda dapat melihat dokumentasinya di Ubuntu LXD. Tetapi bagi kalian yang menggunakan Windows, bisa menggunakan WSL2 atau virtualisasi VirtualBox, untuk tutorial menggunakan VirtualBox bisa dilihat di Ubuntu VirtualBox atau WSL2. Oke langsung saja kita mulai.
Pertama-tama, kita perlu memperbarui daftar package list dan mengupgrade package yang ada di server.
sudo apt update && sudo apt upgrade
command apt update digunakan untuk mengupdate daftar package list yang ada di server dengan repository atau mirror yang terbaru. Sedangkan command apt upgrade digunakan untuk mengupgrade package yang sudah terdafar pada operating system atau server.
Setelah package list dan package sudah diupdate, selanjutnya kita akan menginstall Nginx.
sudo apt install nginx
Setelah proses instalasi selesai, kita bisa mengecek status Nginx dengan menjalankan perintah berikut:
sudo systemctl status nginx
yang nanti akan muncul output status Nginx seperti berikut:
Jika status Nginx sudah active (running), berarti Nginx sudah berhasil diinstall dan berjalan dengan baik.
Langkah pertama kita akan menginstall PHP dan beberapa ekstensi yang dibutuhkan oleh Laravel kita.
sudo apt install php php-fpm php-mysql php-mbstring php-xml php-zip php-curl
Disini kita menginstall :
Disini kita mendapat masalah ketika menginstall PHP, karena library Apache2 yang terinstall di server. Kita perlu menghapus Apache2 terlebih dahulu
sudo apt remove apache2
Langkah selanjutnya kita akan menginstall MySQL atau MariaDB. Disini saya menggunakan MariaDB, karena MariaDB adalah fork dari MySQL yang lebih cepat dan lebih stabil. Kalian dapat menjalankan perintah berikut.
sudo apt install mariadb-server
Setelah proses instalasi PHP dan MariaDB selesai, kita akan cek apakah PHP dan MariaDB sudah terinstall dengan benar.
php -v
Versi dari PHP akan muncul seperti ini
Dan untuk MariaDB atau MySQL kita jalankan perintah ini
mysql -V
Untuk melihat versi dari MariaDB atau MySQL yang terinstall.
Lalu kita install git untuk mengelola source code aplikasi kita.
sudo apt install git
Kita sudah berhasil menginstall Nginx, PHP dan MariaDB atau MySQL di server kita. Sekarang kita akan mencoba untuk mengetest apakah Nginx juga sudah berjalan dengan baik dengan cara mengakses IP address server kita di browser.
Jika kalian bingung untuk mencari IP address server kalian, kalian dapat menjalankan perintah ini
ip a
Tetapi saya merekomendasikan untuk menggunakan net-tools, kalian dapat menginstall net-tools dikarenakan lebih mudah dalam melihat IP address server kalian.
sudo apt install net-tools
Lalu setelah itu jalankan dan akan menampilkan IP address server kalian seperti digambar bawah ini
ifconfig
Setelah itu kalian dapat mengakses IP address server kalian di browser, jika muncul halaman seperti ini berarti Nginx sudah berjalan dengan baik di server kalian.
Setelah kita berhasil menginstall Nginx, PHP dan MariaDB atau MySQL di server kita, selanjutnya kita akan setting Laravel di server kita. Kita akan menggunakan git untuk mengclone source code Laravel kita.
git clone <url-repository-laravel>
disini kita menggunakan repository Laravel yang sudah ada, kalian bisa menggunakan repository Laravel kalian sendiri atau menggunakan repository Laravel yang sudah saya sediakan di Github.
Setelah kita mengclone source code Laravel kita, selanjutnya kita akan menginstall Composer. Composer adalah dependency manager untuk PHP yang digunakan untuk mengelola dependency PHP pada project Laravel.
sudo apt install composer
Jika kalian melihat error Do not run Composer as root/super user!
ketika kita menjalankan perintah composer
, tidak apa karena kita login sebagai root.
Tetapi kalian juga bisa mengatasi error tersebut dengan membuat user baru pada ubuntu server kalian dapat melihat tutorialnya di Ubuntu Add User.
Setelah proses instalasi Composer selesai, kita akan cek apakah Composer sudah terinstall dengan benar.
composer -v
Jika muncul versi dari Composer seperti diatas, berarti Composer sudah terinstall dengan benar.
Setelah kita menginstall Composer, selanjutnya kita akan mengambil source code Laravel kita dengan menggunakan git.
Perlu kita ketahui bahwa kita harus berada di dalam folder /var/www/
untuk mengclone repository Laravel kita. Kita bisa menggunakan perintah berikut untuk berpindah ke folder /var/www/
.
cd /var/www/
Setelah kita berada di dalam folder /var/www/
, kita bisa mengclone repository Laravel kita seperti di step Setting Laravel
Lalu masuk ke directory Laravel kita
cd <nama-folder-laravel>
Disini saya menggunakan directory simple-api-mahasiswa
yang sudah saya sediakan di Github untuk contoh dan belajar kalian.
Setelah kita masuk ke directory Laravel kita, kita akan menginstall dependency PHP yang dibutuhkan oleh Laravel kita.
composer install
Karena contoh ini sebuah API, kita tidak perlu menginstall frontend seperti Vue.js atau React.js. Kita hanya perlu menginstall dependency PHP yang dibutuhkan oleh Laravel kita.
Tetai jika kalian ingin menginstall frontend seperti Vue.js atau React.js, kalian bisa menginstall Node.js terlebih dahulu, atau jika kalian ingin menggunakan nvm (Node Version Manager) kalian dapat melihat tutorialnya di Node Version Manager
Cara ini lebih mudah dan efisien karena kita tidak perlu menginstall Node.js secara global di server kita, langsung saja menggunakan
nvm install <versi-nodejs>
Jika ingin menggunakan Node.js versi LTS (Long Term Support) kalian dapat menggunakan tag --lts
dibelakang command nvm install
.
Lanjut kita membuat file .env
di directory Laravel kita bisa menggunakan nano
atau vim
untuk membuat file .env
. Tetapi di Laravel sudah ada file .env.example
yang bisa kita copy dan rename menjadi .env
.
cp .env.example .env
Setelah kita membuat file .env
, kita akan menggenerate key baru untuk aplikasi Laravel kita.
php artisan key:generate
Setelah kita menginstall Composer dan mengclone repository Laravel kita, selanjutnya kita akan membuat database di MariaDB atau MySQL.
mysql -u root -p
Lalu masuk ke MariaDB atau MySQL, kita akan membuat database baru dengan nama simple_api_mahasiswa
.
CREATE DATABASE simple_api_mahasiswa;
Kita akan membuat user baru dengan nama user_api
dan password password_api
yang memiliki akses ke database simple_api_mahasiswa
.
CREATE USER 'user_api'@'localhost' IDENTIFIED BY 'password_api';
Berikan akses user user_api
ke database simple_api_mahasiswa
.
GRANT ALL PRIVILEGES ON simple_api_mahasiswa.* TO 'user_api'@'localhost';
Setelah kita memberikan akses user user_api
ke database simple_api_mahasiswa
, kita akan mengupdate perubahan yang kita buat.
FLUSH PRIVILEGES;
Lalu
exit;
Discleimer: Jangan lupa untuk mengganti user_api
dan password_api
dengan username dan password yang kalian inginkan. Disini saya menggunakan user_api
dan password_api
hanya sebagai contoh.
Edit file .env
yang sudah kita buat tadi, kita akan mengkonfigurasi database kita di file .env
.
DB_CONNECTION=mariadb
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=simple_api_mahasiswa
DB_USERNAME=user_api
DB_PASSWORD=password_api
Setelah kita mengkonfigurasi database kita di file .env
, kita akan menjalankan migration dan seeder yang sudah kita buat di Laravel kita. Jika kalian tidak ada migration dan seeder, kalian bisa langsung saja menjalankan perintah php artisan migrate
.
php artisan migrate --seed
Setelah kita berhasil menginstall Laravel dan mengkonfigurasi database kita, selanjutnya kita akan mengkonfigurasi Nginx host agar Laravel kita bisa diakses di browser.
Kita akan membuat file konfigurasi baru di /etc/nginx/sites-available/
dengan nama simple-api-mahasiswa
.
nano /etc/nginx/sites-available/www.simpleapi.com
Mengapa saya menggunakan www.simpleapi.com
? Karena saya menggunakan domain www.simpleapi.com
sebagai domain untuk Laravel saya. Kalian bisa menggunakan domain yang kalian inginkan nantinya, disini saya menggunakan domain tersebut hanya sebagai contoh
Lalu selanjutnya isi konfigurasi tersebut dengan konfigurasi Nginx yang ada pada dokumentasi Laravel Nginx Configuration
server {
listen 80;
listen [::]:80;
server_name www.simpleapi.com;
root /var/www/simple-api-mahasiswa/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 ~ ^/index\.php(/|$) {
fastcgi_pass unix:/var/run/php/php8.3-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;
}
}
Perlu diingat bahwa kita harus mengganti server_name dengan domain yang kita inginkan, root dengan directory public Laravel kita, dan fastcgi_pass dengan versi PHP yang kita gunakan.
Untuk melihat versi PHP yang kita gunakan, kita dapat melihat di PHP disini saya menggunakan PHP versi 8.3 dan otomatis versi PHP-FPM yang saya gunakan adalah php8.3-fpm.sock
.
Setelah kita membuat file konfigurasi Nginx baru, kita akan membuat symlink dari file konfigurasi Nginx yang kita buat tadi ke /etc/nginx/sites-enabled/
.
sudo ln -s /etc/nginx/sites-available/www.simpleapi.com /etc/nginx/sites-enabled/
Untuk mengakses apa yang telah kita lakukan kalian dapat mengatur hosts di komputer kalian, kalian dapat mengakses file hosts di Windows di C:\Windows\System32\drivers\etc\hosts
dan di Linux di /etc/hosts
.
sudo nano /etc/hosts
Lalu tambahkan IP address server kalian dan domain yang kalian gunakan.
Setelah itu kita restart Nginx
sudo systemctl restart nginx
Voila! Laravel kita sudah bisa diakses di browser dengan domain yang kita gunakan. Eits, tetapi masih ada yang salah, kita belum memberikan permission pada folder Laravel kita.
Kalian dapat memberikan permission pada folder Laravel kalian dengan perintah berikut dengan tujuan agar Nginx dapat membaca file dan folder Laravel kalian.
sudo chown -R www-data:www-data /var/www/simple-api-mahasiswa
Yes, lalu restart browser kalian dan akses domain yang kalian gunakan, jika muncul halaman seperti ini berarti Laravel kalian sudah berhasil dihosting di server kalian.
Sekian artikel kali ini, semoga bermanfaat dan selamat mencoba!
Pada artikel ini kita telah belajar cara setup Nginx server untuk deploy aplikasi Laravel di server Linux. Kita juga belajar cara menginstall PHP, MariaDB atau MySQL, dan Composer di server kita. Selain itu, kita juga belajar cara mengkonfigurasi Nginx host agar Laravel kita bisa diakses di browser.
Jika menggunakan VPS dan sudah menggunakan domain yang valid, kalian tidak perlu mengatur hosts di komputer kalian. Kalian hanya perlu mengarahkan domain kalian ke IP address server kalian di DNS provider kalian.