Hai, Sobat Jagoan! Kalau kamu ingin menjalankan aplikasi PHP dengan lebih cepat, efisien dan aman, sebaiknya pakai PHP-FPM di dalam Docker. Selain aplikasi kamu jadi dapat menangani banyak permintaan PHP sekaligus, ketika menjalankan PHP-FPM dalam container Docker, kamu juga mendapatkan lingkungan yang konsisten, portable, dan tidak tercampur dengan konfigurasi sistem host.
Tanpa berlama-lama, yuk langsung mulai deploy PHP-FPM di Docker!
Prasyarat
- Sudah menginstal Docker di server atau VPS
- Memiliki projek PHP yang sudah siap atau minimal ada file seperti index.php, composer.json (kalau pakai dependensi composer) atau file PHP lainnya
STEP 1: Membuat Docker File untuk PHP-FPM
Docker file ini akan setup PHP-FPM di container sesuai kebutuhan. Contohnya seperti ini:
# Pakai base image PHP dengan PHP-FPM
FROM php:8.2-fpm
# Install dependency tambahan, misalnya nginx dan composer
RUN apt-get update && apt-get install -y \
nginx \
git \
unzip \
rm -rf /var/lib/apt/lists/*
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy file aplikasi ke dalam container
COPY . /var/www/html
# Set permission buat folder aplikasi
RUN chown -R www-data:www-data /var/www/html
# Expose port yang bakal dipakai
EXPOSE 9000
># Jalankan PHP-FPM
CMD ["php-fpm"]
Keterangan file tersebut:
- FROM php:8.2-fpm: Berarti menggunakan image PHP-FPM versi 8.2
- RUN: Install Nginx, composer, dan dependensi lain yang mungkin dibutuhkan
- COPY: Salin semua file aplikasi ke dalam container
- EXPOSE: Buka port 9000 buat PHP-FPM
- CMD: Jalankan PHP-FPM ketika container start
Setelah itu, build image dan jalankan containernya dengan perintah:
docker build -t php-fpm-app .
docker run -d -p 9000:9000 --name php-fpm-container php-fpm-app
STEP 2: Konfigurasi PHP-FPM di Docker
Setelah berhasil membuat docker container PHP-FPM, kamu perlu menambahkan konfigurasi untuk PHP-FPM sesuai kebutuhan. Konfigurasi ini bisa disetup lewat file php.ini atau konfigurasi lain yang ada di folder container. Begini contohnya:
1) Kustomisasi file php.ini
Untuk mengubah pengaturan PHP seperti upload_max_filesize, memory_limit, dan lainnya, kamu bisa membuat file php.ini sendiri dan salin ke container. Contoh isi filenya:
upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 256M
Cara menyalin file php.ini tersebut ke dalam container, gunakan perintah:
COPY php.ini /usr/local/etc/php/
Menjalankan perintah tersebut akan menjadikan php.ini digunakan sebagai pengaturan PHP dalam container.
2) Konfigurasi pool PHP-FPM
PHP-FPM memiliki file konfigurasi pool yang berada di /usr/local/etc/php-fpm.d/. Kamu bisa edit file www.conf untuk setting jumlah worker, timeout, dan lain-lain. Jika ingin custom lewat Docker, kamu bisa copy konfigurasi dari host ke container pakai perintah berikut:
COPY ./php-fpm.d/www.conf /usr/local/etc/php-fpm.d/www.conf
ATAU kalau kamu tidak ingin mengedit file secara manual, bisa langsung set konfigurasi dari command line saat menjalankan container.
3) Mengatur log
Untuk memudahkan kamu menemukan error ketika debugging, aktifkan log PHP-FPM dengan menambahkan konfigurasi berikut di php.ini:
log_errors = On
error_log = /var/log/php_errors.log
Kemudian, buat folder log di container dan pastikan PHP-FPM punya write akses ke folder tersebut.
4) Restart container setelah perubahan
Jika setting konfigurasi selesai, restart container agar perubahan diterapkan.
docker restart php-fpm-container
Cara ini memudahkan kamu apabila ingin menjalankan PHP-FPM yang sourcenya bisa kamu kustomisasi sesuai keinginan. Jika ingin melakukan perubahan, cukup edit file konfigurasi, copy ke container, lalu restart container, selesai.
Kamu jadi lebih mudah melakukan debugging, scaling, maupun deployment ke berbagai environment (dev, staging, atau proda) tanpa perubahan besar. Karena arsitektur berbasis container, bisa memisahkan service PHP-FPM dari web server.
Mengoptimalkan PHP-FPM di Docker
Agar PHP-FPM berjalan lebih lancar dalam container, terutama ketika ada lonjakan traffic, kamu bisa coba cara mengoptimalkan PHP-FPM berikut ini.
1) Menggunakan OpCache
OpCache adalah ekstensi PHP yang berfungsi untuk melakukan caching bytecode hasil kompilasi PHP. Jika OpCache aktif, PHP tidak perlu mengkompilasi ulang script pada setiap request, sehingga meningkatkan performa aplikasi secara signifikan. Kamu hanya perlu menambahkan pengaturan berikut dalam file php.ini
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
2) Menyesuaikan Jumlah PHP-FPM Workers
Periksa di file www.conf, lalu sesuaikan setting variable seprti di bawah ini agar sesuai dengan kebutuhan. Karena jumlah workers di PHP-FPM sangat memengaruhi performa.
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
3) Maksimalkan Timeout dan Limits
Jika aplikasi PHP butuh waktu lebih lama untuk merespon, naikkan pengaturan waktu eksekusi dan memori di file php.ini. Dengan begitu, script tidak akan berhenti mendadak karena kehabisan waktu dan memori. Sebagai contoh:
max_execution_time = 256
max_input_time = 256
memory_limit = 512M
4) Gunakan FPM Pool untuk Setiap Aplikasi
Lebih baik buat FPM pool terpisah untuk setiap aplikasi, jika kamu memiliki beberapa aplikasi PHP dalam satu container. Hal ini untuk menjaga setiap aplikasi punya resource cukup dan tidak saling mengganggu.
5) Gunakan Ekstensi Sesuai Kebutuhan
Hindari menggunakan ekstensi yang tidak diperlukan, cukup aktifkan ekstensi PHP yang benar-benar kamu butuhkan untuk mengurangi beban server dan mempercepat waktu load.
6) Monitor PHP-FPM dengan Status Page
Gunakan fitur status PHP-FPM di Docker untuk memantau performa secara real-time yang bisa diaktifkan di www.conf. Ini memungkinkan akses ke halaman statistik yang menampilkan jumlah request yang diterima, workers aktif, dan banyak lagi.
pm.status_path = /status
Selamat mencoba, Sob! Apabila ada yang masih bingung, jangan ragu hubungi Tim Support Jagoan Hosting melalui Live Chat atau Open Ticket.
Pengantar Halo sobat Jagoan! di tutorial kali ini kita bakalan membahas permasalahan Error Undefined Index/Variable. Pasti sekarang kamu lagi main-main Read more
Kamu ngerasa insecure karena belum install antivirus? Install antivirus emang penting, Sob untuk menjaga performa server kamu. Nah, kamu bisa Read more
Lupa password root MySQL kamu? Gawat!, tapi kamu gak perlu panik, kita akan bahas bareng tutorialnya berikut ini. Eh, tapi Read more
Halo, Sob! Suka bingung kalau mau cek kendala website kamu? Nih, gak usah bingung lagi karena sekarang kita bisa cek Read more