PHP

V této části dokumentace najdete informace k imagům s PHP 7.x. PHP 5.6 je postupně na ústupu a nedoporučujeme ho dále používat.

PHP kód se na Roští z principu nasazuje o něco snadněji. Podporujeme širokou škálu verzí PHP od 5.6 po ty nejnovější, vždy se skokem v minoritní verzi, takže:

  • PHP 5.6
  • PHP 7.0
  • PHP 7.1
  • PHP 7.2

Když se objeví nová verze, většinou ji sami přidáme, ale pokud se tak nestalo, neváhejte nám napsat. Aktualizujeme image vždy na nejnovější sub minor verzi. Minoritní verze budou k dispozici vždy, i po skončení jejich oficiální podpory. Na končící podporu se vás budeme snažit upozorňovat a dostanete prostor pro vyřešení ať už přechodem na novější verzi nebo setrváním u již nepodporované verze.

Změna verze

Mezi verzemi PHP lze přepínat. U vytvořené aplikace stačí změnit image na jinou verzi PHP a kliknout na uložit. Na pozadí se znovu vytvoří kontejner, připojí se do něj vaše data a během minuty přejdete na nové PHP. Stejně tak se můžete vrátit zpět.

Po změně v administraci je potřeba upravit konfiguraci supervisoru v souboru /srv/conf/supervisor.d/php.conf.

[program:app]
command=/usr/sbin/php-fpm7.0 -F -O -g /srv/run/php-fpm.pid -y /srv/conf/php-fpm/php-fpm.conf
directory=/srv/app
autostart=true
autorestart=true
stdout_logfile=/srv/logs/app.log
stdout_logfile_maxbytes=2MB
stdout_logfile_backups=5
redirect_stderr=true

Kde se php-fpm7.0 nahradí za php-fpm vyžadované verze.

php.ini

Nastavení PHP, v souboru php.ini, můžete libovolně měnit. Soubor se nachází v /srv/conf/php.ini. Jedná se o symlink do /etc/php5/conf.d/99-custom.ini, takže výchozím stavem je /etc/php/7.x/fpm/php.ini a ve vašem /srv/conf/php.ini stačí uvést hodnoty, které chcete mít proti výchozímu stavu jiné. Díky tomu můžeme měnit verze PHP a konfigurace zůstane ve většině případů kompatibilní.

Po změně php.ini je potřeba restartovat PHP-FPM proces, to se provádí přes supervisor pomocí:

supervisorctl restart app

Supervisor

Pro kompletní informace o supervisoru se prosím podívejte na stránku dokumentace, kterou věnujeme právě jemu.

Kromě PHP-FPM běží ve vašem kontejneru ještě Nginx, jehož konfiguraci můžete libovolně měnit. Konfiguraci najdete v /srv/conf/nginx.d a parametry, se kterými se Nginx spouští, najdete v /srv/conf/supervisor.d. Pro PHP má Nginx menší význam než u jiných technologií, ale můžete ho použít pro snadné nastavení hlaviček, cachování nebo pokročilé servírování statického obsahu. Supervisor je vám, stejně jako PHP-FPM a Nginx, plně k dispozici a můžete do něj dát i další skripty, které pak poběží na pozadí. Tato možnost je určena pro zkušenější uživatele a případné využití je třeba konzultovat s dokumentací supervisoru. Můžete se obrátit i na naši technickou podporu.

Hledání problémů

Všechny informace o běhu vaší aplikace najdete v /srv/logs. Běh aplikace můžete ovlivnit v mnoha směrech a tak by nemělo být složité problém nalézt. Pokud si ale nebudete vědět rady, napište nám na podporu a určitě nějaké řešení vymyslíme.

Max execution time

V případě, že potřebujete hodně času na provedení requestu, můžete zvednout max_execution_time až na 180 sekund. Lze ho zvednout i výš, ale po 180 sekundách ukončí request load balancer.

V závislosti na tom, zda během tohoto času posíláte data nebo jen čekáte, musíte upravit i další parametry v následujících souborech:

/srv/conf/php.ini: max_execution_time = 240
/srv/conf/php-fpm/pool.d/app.conf: request_terminate_timeout = 240
/srv/conf/nginx.d/php.conf: fastcgi_read_timeout 240;

Změna počtu workerů

U některých aplikací, které posílají spoustu requestů na server, se může stát, že se zahltí všechny dostupné workery a pro uživatele se pak server tváří, jako kdyby nereagoval. Počet workerů jde navýšit v konfiguraci PHP-FPM a to v souboru:

/srv/conf/php-fpm/pool.d/app.conf

Konkrétně můžete změnit řádky:

# Maximální počet workerů
pm.max_children = 25
# Kolik workerů bude startovat při spuštění PHP-FPM
pm.start_servers = 5
# Kolik minimálně workerů bude čekat na request
pm.min_spare_servers = 2
# Kolik maximálně workerů bude čekat na request
pm.max_spare_servers = 5

Ve stejném souboru je k jednotlivým hodnotám i dokumentace. Pokud provedete nějakou změnu, nezapomeňte na:

supervisorctl restart app

Výchozí hodnoty jsou nastaveny relativně nízko, což může být pro aplikace jako je Wordpress nebo Woocart málo, v závislosti na nainstalovaných pluginech a počtu uživatelů připojených v jednom čase.