Více verzí PHP na jednom serveru
1. Cíl a hranice
Server nabízí PHP 8.1 pro jeden starší web, PHP 8.4 jako základ pro CMS a PHP 8.5 pro testování aktuálních aplikací. Každý web si verzi vybírá v ISPConfig a běží ve vlastním poolu PHP-FPM.
update-alternatives u globálního příkazu php. PHP v příkazové řádce a běhové prostředí PHP-FPM u webu jsou dvě oddělené věci.2. Pravidla pro verze
| PHP | Role | Typické požadavky |
|---|---|---|
| 8.1 | Zpětná kompatibilita | Ponechte jen pro aplikace, které zatím nelze upravit pro novější verzi PHP. |
| 8.4 | Stabilní základ pro CMS | Kompletní sada rozšíření pro CMS včetně Imagicku a Redisu. |
| 8.5 | Aktuální vývoj a testování | Používejte až po testech kompatibility aplikace a závislostí. |
Každá aktivní verze potřebuje FPM, CLI pro diagnostiku a rozšíření, která skutečně používají přiřazené aplikace. Neinstalujte rozšíření jen proto, že je používá jiná verze.
bcadd(), bcsub() nebo jiné funkce BCMath (například při výpočtu daní a peněžních částek), nainstalujte bcmath pro každou aktivní verzi PHP. Je to běžné rozšíření, ale základní instalace PHP ho nezapíná.3. Instalace PHP-FPM a rozšíření
Balíčky instalujte ze schváleného repozitáře PHP pro danou verzi Debianu. U verzí PHP, které Debian sám nedodává, se zdroj balíčků může lišit.
Příklad pro základ CMS
apt install php8.4-bcmath php8.4-bz2 php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-gd php8.4-igbinary php8.4-imagick php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-redis php8.4-xml php8.4-zipStejný postup pro další verze
apt install php8.1-bcmath php8.1-cli php8.1-fpm php8.1-curl php8.1-gd php8.1-intl php8.1-mbstring php8.1-mysql php8.1-xml php8.1-zip
apt install php8.5-bcmath php8.5-cli php8.5-fpm php8.5-curl php8.5-gd php8.5-intl php8.5-mbstring php8.5-mysql php8.5-xml php8.5-zip
systemctl enable --now php8.1-fpm php8.4-fpm php8.5-fpm4. Registrace každé verze v ISPConfig
Otevřete System → Additional PHP Versions a vytvořte jeden záznam pro každé běhové prostředí. Jako handler nastavte PHP-FPM a použijte skutečné cesty k binárce a konfiguraci na serveru.
| Položka | Příklad pro PHP 8.4 |
|---|---|
| Init skript PHP-FPM | php8.4-fpm |
| Adresář poolů PHP-FPM | /etc/php/8.4/fpm/pool.d |
| Socket PHP-FPM | /run/php/php8.4-fpm.sock |
| Cesta k php.ini pro PHP-FPM | /etc/php/8.4/fpm/php.ini |
| Binárka CLI | /usr/bin/php8.4 |
Totéž zopakujte s odpovídajícími cestami pro 8.1 a 8.5. Záznam uložte a nechte ISPConfig změnu zpracovat, než ho přiřadíte produkčnímu webu.
5. Výběr PHP pro jednotlivý web
- Otevřete Sites → Website a vyberte web.
- Na záložce Options nastavte PHP na PHP-FPM.
- V poli PHP Version vyberte správnou položku.
- Uložte, počkejte, až ISPConfig zapíše konfiguraci vhostu a poolu, a web otestujte.
Starší web nechte izolovaný na PHP 8.1. Nepovyšujte ho jen proto, že jsou nainstalované novější verze; nejdřív ověřte framework, závislosti z Composeru, vlastní kód i plánované příkazy.
6. Ověření bez vystavení phpinfo()
php8.1 -v
php8.1 -r 'echo bcadd("1.20", "2.30", 2), PHP_EOL;'
php8.4 -r 'echo bcadd("1.20", "2.30", 2), PHP_EOL;'
php8.5 -r 'echo bcadd("1.20", "2.30", 2), PHP_EOL;'
php8.4 -m
php8.5 --ini
systemctl --no-pager status php8.1-fpm php8.4-fpm php8.5-fpm
find /run/php -maxdepth 1 -name 'php*-fpm.sock' -lsNa úrovni webu použijte zabezpečený diagnostický endpoint nebo stavovou stránku samotné aplikace a potom ho odstraňte. Nenechávejte veřejný soubor s phpinfo() v kořenovém adresáři produkčního webu.
7. Údržba a vyřazení
- Aktualizujte všechny nainstalované verze PHP, nejen výchozí.
- U každé hostované aplikace si zaznamenejte, jakou verzi PHP vyžaduje.
- Po změně rozšíření nebo
php.inirestartujte jen příslušnou službu FPM. - Weby na PHP 8.1 pravidelně kontrolujte a úpravu aplikace pro novější verzi PHP plánujte dřív, než skončí podpora dané verze v repozitáři.
- Starou verzi PHP odstraňte, až když na ni neodkazuje žádný web, cron ani nasazovací příkaz v CLI.
Výsledek: weby se mohou vyvíjet nezávisle a zpětná kompatibilita zůstává výslovná a ohraničená.
Nic tu není.
Zatím sem nebyl vložen žádný komentář.