Cara Deploy PHP-FPM di Docker dengan Mudah dan Cepat

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

  1. Sudah menginstal Docker di server atau VPS
  2. 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.

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.

Related Posts
Tips Mengatasi Error Undefined Index / Variable

Pengantar Halo sobat Jagoan! di tutorial kali ini kita bakalan membahas permasalahan Error Undefined Index/Variable. Pasti sekarang kamu lagi main-main Read more

Tutorial Install Virus Scanner Clam AV pada cPanel

Kamu ngerasa insecure karena belum install antivirus? Install antivirus emang penting, Sob untuk menjaga performa server kamu. Nah, kamu bisa Read more

Tutorial mereset Password MySQL melalui akses Root

Lupa password root MySQL kamu? Gawat!, tapi kamu gak perlu panik, kita akan bahas bareng tutorialnya berikut ini. Eh, tapi Read more

Tutorial Mengecek Kendala pada Website dengan Tools Online

Halo, Sob! Suka bingung kalau mau cek kendala website kamu? Nih, gak usah bingung lagi karena sekarang kita bisa cek Read more