Cara Setting LEMP stack

Linux eNginx MySQL PHP (LEMP) merupakan salah satu stack development yang cukup umum digunakan. Saya sendiri suka menggunakan stack ini karena sesuai dengan development environment saya pribadi dan juga tempat kerja saya.

Kenapa OS nya berbasis Linux ? karena gratis :) , open source, dan setau saya kebanyakan server itu berjalan pada OS berbasis Linux. Selain itu, saya sendiri juga pakai OS berbasis Linux untuk sebagian besar urusan saya dengan komputer kecuali gaming & ngetik dokumen yang diprint (entah kenapa hingga kini belum bisa ngeprint normal di Linux. Cocoknya lagi, di tempat saya kerja umumnya menggunakan server dengan OS berbasis Linux.

Saya menggunakan OS Debian 12 dan framework PHP yang saya gunakan adalah Laravel. Setelah instalasi 4 komponen stack ini berikut ini package yang harus diinstal. Untuk dapat menjalankan command

composer update

diperlukan package berikut :

  • php-gd

  • php-mbstring

  • php-zip

  • php-xml

  • php-curl (opsional)

Jika di OS terinstal beberapa versi PHP (biasanya pakai PPA ondrej/php) dan ingin menginstal untuk versi spesifik, cukup tambahkan nomor versi setelah php pada nama package, contohnya untuk PHP 8.3 maka php8.3-gd.

Untuk driver akses MySQL, bisa menggunakan package php-mysql. Jika menggunakan Microsoft SQL Server (MSSQL), bisa menggunakan php-sybase. Saya tidak suka menggunakan driver bawaan MSSQL karena secara default angka angka di-auto-convert jadi string dan php-sybase tidak melakukan hal itu.

Dalam menjalankan Laravel di mode development pun saya lebih suka menjalankannya dengan Nginx karena tidak perlu menjalankan command (php artisan serve) di bash dan lebih mirip dengan kondisi saat production. Untuk itu diperlukan package php-fpm.

Saat menginstal Nginx pada debian biasanya tidak akan langsung jalan karena port defaultnya dipakai oleh Apache (biasanya saya hapus Apache nya karena nyaris gak pernah dipakai). Selanjutnya, diperlukan penambahan konfigurasi Nginx ke directory (folder)

/etc/nginx/sites-available

Cukup tambahkan file konfigurasi, biasanya dinamai domain atau nama aplikasi yang akan dijalankan. Isi nya kurang lebih seperti berikut :

 server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /home/saya/Documents/dev/namaaplikasi/public;

    # Add index.php to the list if you are using PHP
    index index.php;

    server_name agenda2.local;    

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # pass PHP scripts to FastCGI server
    #
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Pada line listen di atas, fungsi default_server adalah untuk menandakan konfigurasi ini yang akan diarahkan oleh port utama default (80 untuk http & 443 untuk https). Pada biasanya hanya boleh ada 1 file konfigurasi yang berisi default_server. Pastikan line yang berisi fastcgi_pass berisi versi PHP yang akan digunakan untuk menjalankan aplikasi.

Setelah file konfigurasi ditulis, selanjutnya perlu dibuat link ke file tersebut di folder sites-enabled. Dari dalam folder sites-enabled, jalankan perintah berikut :

# dari path /etc/nginx/sites-enabled
# jika dijalankan dengan user selain root mungkin perlu diawali sudo
ln -s /etc/nginx/sites-available/filekonfigurasi filekonfigurasi

ganti filekonfigurasi sesuai nama file yang dibuat sebelumnya. Untuk mengimplementasikan perubahan konfigurasi, jalankan perintah berikut :

# jika dijalankan dengan user selain root mungkin perlu diawali sudo
nginx -s reload

Hal yang perlu diperhatikan selanjutnya adalah masalah permission pada folder aplikasi. PHP FPM secara default akan menjalankan aplikasi dengan user www-data, untuk itu, www-data harus memiliki izin read & execute saja pada seluruh folder aplikasi terkecuali pada folder storage dalam folder aplikasi di mana www-data harus juga memiliki izin write. Izin write harus dimiliki oleh user yang digunakan oleh developer. Mudahnya, jalankan perintah berikut :

chown -R saya:www-data folderaplikasi/
chmod -R o-rwx folderaplikasi/
chmod -R g-w folderaplikasi/
chmod -R g+w folderaplikasi/storage/

Konfigurasi selesai, saatnya mencoba dengan mengakses localhost pada browser. Selamat mencoba, semoga bermanfaat.