Hosting Magento 2 – PHP-FPM

Najwyższy czas omówić jeden z ważniejszych komponentów potrzebnych do uruchomienia Magento 2 – PHP-FPM. Samo PHP oraz sposoby jego konfiguracji opisałem we wcześniejszym artykule. Najważniejsze pytanie jakie musimy sobie na początek postawić to jaką wersję PHP wybrać. Przez wiele lat w języku programowania PHP panowała stagnacja i jedyną słuszną wersją była wersja 5.6. Obecnie mamy wspierane przez zespół PHP wersje 7.1 , 7.2, 7.3. Co ciekawe z powodu stagnacji i trudności przepisania skryptów z wersji PHP 5.6 na 7 wsparcie dla wersji 7.0 skończyło się przed wersją 5.6. Dodatkowo dystrybucje takie jak Debian mają w sobie pakiety z PHP wspierane przez sam zespół dystrybucji. I tak w przypadku Debiana 9 wersją jest PHP7.0, które będzie wspierane aż do końca wsparcia Debiana 9 czyli maksymalnie do 2022 roku. Przy czym najnowsza wersja 7.3 ma oficjalne wsparcie przez zespół go tworzący do 6 grudnia 2021, a stworzona rok temu wersja 7.2 tylko do 30 listopada 2020 roku. Dodatkowo wersja 7.3 nie jest oficjalnie wspierana przez Magento 2.

Jak widać wybór nie jest taki oczywisty, ale na nasze szczęście nie ma za dużego wpływu na samą naszą konfiguracje. Z samym PHP-FPM możemy się połączyć na 2 sposoby:

– unix socket – plik socks. Służy tylko w ramach komunikacji IPC w ramach jednego serwera. Jest wydajniejszy niż druga opcja.

– TCP/IP port – jak typowy deamon w linuksie usługa nasłuchuje na porcie TCP.

Należy tutaj pamiętać, aby ten sam sposób był podany w konfiguracji NGINX jak i PHP-FPM. Na początku pliku /etc/nginx/sites-enabled/default definiujemy nasz backend – czyli tam gdzie NGINX ma wysyłać zapytania PHP

upstream fastcgi_backend {

server   unix:/run/php/php7.0-fpm.sock;

}

W moim przypadku jest to PHP7.0 brane bezpośrednio z dystrybucji Debiana. Tą samą ścieżkę musimy zdefiniować potem w definicji pooli. Ale na sam początek zainstalujmy PHP-FPM z potrzebnymi modułami poprzez polecenie

apt-get install php-apcu php-apcu-bc php-cli-prompt php-common php-composer-ca-bundle php-composer-semver php-composer-spdx-licenses php-fpm php-igbinary php-intl php-json-schema php-pear php-psr-log php-redis php-soap php-symfony-console php-symfony-filesystem php-symfony-finder php-symfony-polyfill-mbstring php-symfony-process php-xml php7.0 php7.0-cli

php7.0-common php7.0-curl php7.0-dev php7.0-fpm php7.0-gd php7.0-intl php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-phpdbg php7.0-readline php7.0-soap php7.0-xml php7.0-xsl php7.0-zip pkg-php-tools

Lista modułów może się różnić zależnie od zainstalowanych modułów Magento 2. Po zainstalowaniu pakietów należy stworzyć pool dla naszej strony. Tutaj też niestety nie ma uniwersalnej konfiguracji ponieważ ilość pracujących workerów zależeć będzie od ilości osób odwiedzających. Na pewno trzeba monitorować logi i zwiększać ilość zasobów w razie potrzeby.

Aby stworzyć pool (zasób workerów PHP-FPM) dla naszej strony należy edytować lub skopiować plik /etc/php/7.0/fpm/pool.d/www.conf. Następnie edytujemy poszczególne wartości

user = {{naszużytkowik}}
group = {{naszużytkowik}}

Przy czym {{naszużytkowik}} to nazwa użytkownika na jakim będzie działała strona.

listen = /run/php/php7.0-fpm.sock

Tutaj musimy podać dokładnie tą samą ścieżkę jaką podaliśmy w konfiguracji NGINX. Dzięki tej informacji NGINX będzie wiedział jak się skomunikować z PHP-FPM.

Warto dodać linijkę

catch_workers_output = yes

Sprawia ona, że będziemy widzieć w logach PHP-FPM nie tylko błędy samego agenta zarządzającego, ale też błędy generowane przez stronę.

Następnie musimy dostosować parametry ilości procesów PHP-FPM jakie będą obsługiwały nasz sklep. Podanie za małej ilości spowoduje wolne działanie strony,a w skrajnych przypadkach strona się nie wczyta. Podanie za dużej ilości spowoduje, że RAM zostanie zajęty przez procesy PHP-FPM i może go zabraknąć dla pozostałych usług (takich jak Varnish).

pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6

Między tymi parametrami są korelacje i nie możemy dowolnie wpisywać liczb. Po uzupełnieniu parametrów warto sprawdzić poprawność konfiguracji za pomocą polecenia

 php-fpm7.0 -t 

Lub adekwatnego dla naszej wersji.

Należy też pamiętać o modyfikacji plików php.ini (jeden do CLI, drugi dla PHP-FPM). W moim przypadku jest to adekwatnie

/etc/php/7.0/cli/php.ini

oraz

/etc/php/7.0/fpm/php.ini

Najważniejsze parametry dla nas to post_max_size, max_file_uploads, max_execution_time, memory_limit. Nie podaję tutaj konkretnych wartości bo te zależą od naszych potrzeb.

Jeżeli wszystko się uda możemy zrestartować PHP-FPM polecenie

service php7.0-fpm restart 

lub adekwatnym do naszej wersji PHP.

Scroll to top