Blog / Baza Wiedzy

Jak zarządzać i aktualizować wersje PHP na Linux (Ubuntu i Debian)

4 min czytania
VoxiHost Team
Jak zarządzać i aktualizować wersje PHP na Linux (Ubuntu i Debian)

Gdy instalujesz PHP bezpośrednio z domyślnych repozytoriów Ubuntu lub Debian przez apt install php, jesteś zablokowany w pojedynczej wersji PHP która została dostarczona z systemem operacyjnym w dniu jego wydania.

Jeśli aktualizujesz aplikację jak WordPress, Laravel, czy Magento, może nagle wymagać PHP 8.2 lub 8.3. Z drugiej strony, jeśli migrujesz starą aplikację, może agresywnie awariować na czymkolwiek nowszym niż PHP 7.4.

Aby to rozwiązać, potrzebujesz możliwości instalacji wielu wersji PHP jednocześnie, uruchamiania ich obok siebie używając PHP-FPM, i mówienia swojemu serwerowi WWW dokładnie której wersji użyć dla której strony internetowej.

Krok 1: Dodaj zaufane repozytorium PHP

Ponieważ domyślne repozytoria OS zawierają tylko jedną statyczną wersję PHP, musimy dodać zaufane repozytorium stron trzecich.

Przez prawie dekadę, globalny standard dla tego był utrzymywany przez Ondřeja Surýego, wysoko szanowanego dewelopera Debiana który zarządza oficjalnymi pakietami PHP.

Najpierw zainstaluj pakiet właściwości oprogramowania (jeśli nie jest już tam):

Uruchamianie sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https aby przygotować Ubuntu do dodania repozytorium PHP

sudo apt update
sudo apt install software-properties-common ca-certificates lsb-release apt-transport-https -y

Teraz dodaj repozytorium:

Dla Ubuntu:

Uruchamianie sudo add-apt-repository ppa:ondrej/php na Ubuntu aby dodać repozytorium PHP Ondřeja Surýego z wieloma wersjami PHP

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Dla Debian:

sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

Krok 2: Zainstaluj wiele wersji PHP

Z repozytorium dodanym, masz teraz dostęp do dosłownie każdej wersji PHP (od ultra-prastarej 5.6 do najnowocześniejszej 8.3 i dalej).

Możesz bezpiecznie zainstalować wiele wersji. Nie nadpiszą się ani nie będą ze sobą konfliktować.

Zainstalujmy PHP 8.3 (dla nowoczesnej aplikacji) i PHP 8.1 (dla starszej aplikacji):

Instalowanie PHP 8.3 i PHP 8.1 z php-fpm obok siebie na Ubuntu używając apt do zarządzania wieloma wersjami PHP

# Zainstaluj PHP 8.3 i jego procesor FPM
sudo apt install php8.3 php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl -y

# Zainstaluj PHP 8.1 i jego procesor FPM 
sudo apt install php8.1 php8.1-fpm php8.1-mysql php8.1-xml php8.1-curl -y

Po zainstalowaniu, obie usługi PHP-FPM automatycznie zaczną działać w tle niezależnie. Możesz to zweryfikować sprawdzając ich status:

Uruchamianie sudo systemctl status php8.3-fpm aby zweryfikować że PHP-FPM działa po instalacji na Ubuntu

sudo systemctl status php8.3-fpm
sudo systemctl status php8.1-fpm

Krok 3: Przełącz domyślną wersję wiersza poleceń (CLI)

Jeśli wpiszesz php -v w terminalu teraz, wyświetli wersję która była zainstalowana ostatnia.

Uruchamianie php -v w terminalu aby sprawdzić obecną domyślną wersję PHP na Ubuntu Linux

Jeśli używasz narzędzi terminalowych jak composer czy WP-CLI, musisz zapewnić że domyślna wersja wiersza poleceń PHP pasuje do twojego projektu.

Aby łatwo przełączać domyślną wersję CLI, Linux używa narzędzia o nazwie update-alternatives:

Uruchamianie sudo update-alternatives --config php aby interaktywnie wybrać domyślną wersję CLI PHP na Ubuntu

sudo update-alternatives --config php

Zobaczysz wynik podobny do tego:

There are 2 choices for alternative php (providing /usr/bin/php).

  Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.3   83        auto mode
  1            /usr/bin/php8.1   81        manual mode
  2            /usr/bin/php8.3   83        manual mode

Press <enter> to keep the current choice[*], or type selection number:

Po prostu wpisz numer Selection który chcesz (np., 1 dla PHP 8.1) i naciśnij Enter. Zweryfikuj zmianę wpisując php -v ponownie.

Krok 4: Powiedz swojemu serwerowi WWW której wersji użyć

Wersja CLI nie ma wpływu na twój serwer WWW. Nginx i Apache nie obchodzi jaka jest twoja domyślna terminalowa PHP; obchodzi im tylko które gniazdo FPM które jawnie wskażesz im w swoich plikach konfiguracyjnych.

Jeśli używasz Nginx (LEMP Stack):

Otwórz swój Blok Serwera Nginx (np., /etc/nginx/sites-available/default) aby znaleźć blok lokalizacji PHP. Zmień linię fastcgi_pass aby wskazywała na dokładną wersję gniazda której chcesz użyć dla tej konkretnej strony internetowej.

Aby użyć PHP 8.3:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}

Aby użyć PHP 8.1 na innym Bloku Serwera, po prostu powiąż je z gniazdem 8.1:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}

Zapisz plik i przeładuj Nginx:

sudo systemctl reload nginx

Jeśli używasz Apache (LAMP Stack):

Apache obsługuje FPM nieco inaczej przez a2enconf.

Najpierw wyłącz ogólny moduł PHP:

sudo a2dismod php*

Teraz włącz konkretną konfigurację PHP-FPM której chcesz użyć globalnie:

# Włącz wymagane moduły jeśli jeszcze nie masz
sudo a2enmod proxy_fcgi setenvif

# Włącz PHP 8.3 FPM
sudo a2enconf php8.3-fpm

# LUB całkowicie przełącz na PHP 8.1 FPM
# sudo a2disconf php8.3-fpm
# sudo a2enconf php8.1-fpm

Zrestartuj Apache aby zmiany weszły w życie:

sudo systemctl restart apache2

Krok 5: Edytowanie właściwego php.ini

Gdy musisz zwiększyć swoje upload_max_filesize czy memory_limit, musisz edytować plik php.ini który koreluje dokładnie do wersji i środowiska którego używasz.

Dla Nginx/Apache obsługującego ruch WWW przez PHP 8.3:

sudo nano /etc/php/8.3/fpm/php.ini

Dla Wiersza Poleceń (CLI) obsługującego PHP 8.3:

sudo nano /etc/php/8.3/cli/php.ini

Za każdym razem gdy edytujesz plik fpm/php.ini, musisz zrestartować tę konkretną usługę FPM aby nowe limity pamięci weszły w życie:

sudo systemctl restart php8.3-fpm

Hostowanie wielu aplikacji z drastycznie różnymi wymaganiami dziedzictwa i nowoczesności PHP wymaga serwera z RAM i CPU aby płynnie obsługiwać odmienne pule demonów FPM. Chwyć masowo niezawodny Premium VPS, zainstaluj tyle wersji PHP ilu wymagają twoi klienci i uruchamiaj je jednocześnie bez wycierania potu.

Języki