Skip to main content
๐Ÿš€ nusa.id cloud server linux indonesialihat paket

Cara Install PHP dan PHP-FPM di Ubuntu 24.04

ยท 7 min read

Kinerja aplikasi web yang menggunakan PHP sangat bergantung pada bagaimana backend memproses setiap permintaan dari pengguna. PHP-FPM (FastCGI Process Manager) mengatasi masalah kebuntuan antrean request dengan menggunakan sistem pengelolaan pool yang dinamis.

Panduan ini mendemonstrasikan instalasi dan konfigurasi optimasi PHP 8.3 beserta integrasinya dengan Nginx, menggunakan Nusa Cloud VPS sebagai lingkungan pengujian. Seluruh proses dapat direplikasi pada berbagai infrastruktur server ber-OS Ubuntu 24.04 LTS.

Prasyarat Instalasi PHP-FPM di Ubuntu 24.04โ€‹

Pastikan Anda memenuhi kebutuhan berikut sebelum melakukan instalasi:

  • Server dengan sistem operasi Ubuntu 24.04 LTS.
  • Pengguna yang memiliki hak akses sudo atau root.
  • Koneksi internet stabil untuk mengunduh paket dari repositori.
  • Nginx Web Server telah terinstal di server yang sama (khusus jika Anda ingin langsung mempraktikkan bagian integrasi).

Lingkungan Pengujianโ€‹

  • Sistem Operasi: Ubuntu 24.04 LTS
  • PHP/PHP-FPM: Versi 8.3 (diinstal secara langsung melalui repositori resmi bawaan Ubuntu)

Cara Menginstal PHP dan PHP-FPMโ€‹

Sistem operasi Ubuntu 24.04 telah menyediakan versi mutakhir PHP 8.3 di repositori default mereka, sehingga langkah-langkah instalasi cukup mudah dijalankan:

  1. Perbarui indeks paket repositori Ubuntu terlebih dahulu:
sudo apt update
  1. Instal paket utama untuk PHP-FPM beserta beberapa paket ekstensi tambahan yang secara umum sering digunakan oleh aplikasi:
sudo apt install -y php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-xml
  1. Pastikan layanan berjalan dan akan selalu dimulai secara otomatis setelah mesin di-boot ulang:
sudo systemctl enable --now php8.3-fpm

Output yang diharapkan saat Anda mengecek rilis versinya di CLI:

php -v
PHP 8.3.x (cli) (built: ...) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.3.x, Copyright (c) Zend Technologies

Konfigurasi Keamanan (Security Hardening) PHPโ€‹

Konfigurasi bawaan sistem lebih berfokus kepada kemudahan development, bukan untuk melindungi lingkungan produksi secara aman. Buka file konfigurasi utama dari PHP-FPM:

sudo nano /etc/php/8.3/fpm/php.ini

Cari lalu sesuaikan parameter pengaturan di bawah ini guna meningkatkan keamanan (Anda bisa menggunakan fitur pencarian Ctrl+W di editor Nano):

; Menonaktifkan penyesuaian otomatis jalur skrip (mencegah teknik eksploitasi pada Nginx/FastCGI)
cgi.fix_pathinfo=0

; Menyembunyikan informasi versi rilis PHP pada HTTP header balasan
expose_php = Off

; Menonaktifkan eksekusi perintah shell tingkat sistem operasi yang dianggap berbahaya
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Simpan file dengan menekan Ctrl+O kemudian Enter, dan keluar menggunakan Ctrl+X.

Tuning Konfigurasi PHP-FPM Poolโ€‹

Setiap proses PHP-FPM dikelola dan diatur oleh sebuah pool. Biasanya pool bawaan akan memakai nama www. Buka file tersebut untuk menyesuaikan jumlah worker:

sudo nano /etc/php/8.3/fpm/pool.d/www.conf

Jika server Anda memiliki lalu lintas situs yang tinggi, parameter manajemen process (pm) ini menjadi amat krusial. Temukan blok pm terkait dan sesuaikan ukurannya (contoh ini cocok untuk server berspesifikasi dasar dengan RAM kisaran 2GB-4GB):

; Memilih skema manajemen proses dinamis
pm = dynamic

; Batas maksimal sub-proses yang bisa dibuat (1 proses biasanya memakan ~15-30MB RAM secara bersamaan)
pm.max_children = 50

; Jumlah proses awal yang dihidupkan seketika saat layanan baru dijalankan
pm.start_servers = 5

; Batas minimum proses diam (idle/standby) saat tidak melayani request
pm.min_spare_servers = 5

; Batas atas kapasitas proses diam
pm.max_spare_servers = 35

; Jumlah maksimum permintaan per proses sebelum anak layanan itu didaur ulang (meredam risiko memory leak)
pm.max_requests = 500

Jangan lupa untuk me-restart layanan FPM guna menerapkan modifikasi yang sudah diubah di pool:

sudo systemctl restart php8.3-fpm

Integrasi PHP-FPM dengan Nginxโ€‹

Agar web server Nginx dapat memfasilitasi dan mengoper skrip PHP ke PHP-FPM dengan mulus, Anda harus menyematkan instruksi pass di dalam file server block (dikenal juga Virtual Host). Akses dan modifikasi konfigurasi situs Anda:

sudo nano /etc/nginx/sites-available/default

Di dalam direktif server, terapkanlah sisipan khusus guna mengeksekusi semua tautan skrip PHP:

server {
listen 80;
server_name _;
root /var/www/html;

# Menjadikan file index.php sebagai prioritas utama
index index.php index.html index.htm;

location / {
try_files $uri $uri/ =404;
}

# Mengarahkan koneksi untuk setiap file .php melewati fastcgi-php & soket PHP-FPM 8.3
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

# Memblokir sepenuhnya akses unduhan eksternal ke file .htaccess
location ~ /\.ht {
deny all;
}
}

Uji kelaikan Nginx untuk menelaah ada tidaknya sintaksis yang menyalahi format:

sudo nginx -t

Bila Nginx menunjukkan tulisan syntax is ok, berikan reload instruksi agar memuat file tersebut:

sudo systemctl reload nginx

Troubleshooting PHP-FPM di Ubuntu 24.04โ€‹

Gejala Umumโ€‹

  • Pengunjung mendapati Error 502 Bad Gateway secara konsisten, atau bahkan 504 Gateway Time-out saat mengakses tautan berat.
  • Halaman situs tidak memberikan respon balikan apa pun dan hanya menampilkan bidang latar putih polos saja (White Screen of Death).
  • Aplikasi backend berhenti secara tiba-tiba akibat layanan FPM kehabisan resource yang menyebabkan peringatan sistem Out of Memory (OOM).

Kemungkinan Penyebabโ€‹

  • Pemicu klasik dari Error 502 ialah Nginx belum menerima izin permission akses ke lokasi file socket unix, atau rute letak soket antara Nginx dan PHP-FPM tidak sinkron satu sama lain.
  • Timbulnya pesan Error 504 artinya lama waktu proses pemrosesan eksekusi PHP pada backend (termasuk komunikasi ke server Database MySQL/PostgreSQL) menembus dan melewati durasi rasional max_execution_time.
  • Halaman latar putih mendeskripsikan program PHP menjumpai Fatal Error kode namun opsi standar produksi display_errors di php.ini otomatis menyembunyikan tampilannya.
  • Peringatan sistem OOM sangat dimungkinkan sebab alokasi pool variabel pm.max_children tersetel di kisaran nilai yang melonjak lampau melampaui kemampuan kapasitas memori RAM server fisik saat melayani puncak antrian lalu lintas yang padat.

Diagnostikโ€‹

Pantau rentetan rekam riwayat error dari daemon internal layanan PHP-FPM:

sudo tail -f /var/log/php8.3-fpm.log

Selidik letak file socket yang dipakai saat FPM aktif mendengar port masuk:

sudo grep "^listen =" /etc/php/8.3/fpm/pool.d/www.conf

Cocokkan balasan jalur lokasinya, misalnya listen = /run/php/php8.3-fpm.sock, dan setarakan pada variabel fastcgi_pass milik Nginx.

Bongkar isi file error log Nginx:

sudo tail -n 20 /var/log/nginx/error.log

Perbaikanโ€‹

  • Hak Akses Socket (Permission): Koreksi izin pakai pada grup FPM dan pastikan wewenangnya dialihkan ke akun spesifik www-data:
    sudo chown www-data:www-data /run/php/php8.3-fpm.sock
  • Gateway Time-Out: Tarik durasi ambang waktu batas kelonggaran pemutusan koneksi script melalui suntingan /etc/php/8.3/fpm/php.ini ke batas atas, semisalnya ubah konfigurasi parameter max_execution_time = 60.
  • Tuning Memori Penuh: Kurangi porsi nilai besaran muatan batas maksimal pm.max_children menjorok lebih jauh ke level moderat 20 atau 30, bilamana layanan menabrak titik kapasitas mentok alokasi RAM yang memicu sistem me-restart paksa OOM Killer.

Verifikasiโ€‹

Kirim reload signal dan yakinkan bahwasanya status PHP-FPM dalam mode aktif bebas pesakitan peringatan gagal beroperasi:

sudo systemctl reload php8.3-fpm
sudo systemctl status php8.3-fpm

Pengujian Fungsionalโ€‹

Mengetes apakah program server bisa menanggapi instruction code skrip backend, susun satu file test yang sengaja menyelipkan fungsi pemanggilan phpinfo menuju basis induk sistem situs:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Akses tautan URL dokumen baru tersebut dengan modul paket CLI utilitas peramban terminal curl:

curl -I http://localhost/info.php

Output ringkasan yang diharapkan di terminal akan memverifikasi kesuksesan respons:

HTTP/1.1 200 OK
Server: nginx/...
Content-Type: text/html; charset=UTF-8

โš ๏ธ Peringatan: Mengekspos laman bawaan info identitas layanan versi di hadapan internet umum sama halnya mengarahkan ancaman bagi peretas keamanan cyber pada masa mendatang. Lakukan tindakan remove pembasmian secara permanen pasca-usainya pembuktian eksperimen ini.

sudo rm /var/www/html/info.php

Verifikasi Akhirโ€‹

Untuk penegasan akhir, validasi kembali keandalan dan daya tahan lingkungan server pasca penyesuaian:

  1. Yakinkan FPM bisa membangkitkan utilitasnya setiap saat sesudah server restart ulang (Reboot):
    sudo systemctl is-enabled php8.3-fpm
    Output: enabled
  2. Tes kembali antarmuka situs (website) melalui pratinjau alamat publik domain (atau rute IP) dalam mesin perangkat utama lokal guna mengevaluasi konektivitas aliran lintas transfer komunikasi data dari tumpukan Nginx melewati FPM yang ditutup konfirmasi response status HTTP 200.