Hogyan telepíthetünk újabb PHP verziókat Debian 9 (Stretch) LAMP szerverünkre PHP-FPM módban

botond küldte be 2019. 09. 28., szo – 23:39 időpontban

Tartalom

  1. oldal: A sury.org csomagtár beüzemelése és a különböző PHP verziók telepítése
  2. oldal: Különböző PHP-FPM verziók kombinált használata egy szerveren

 

Az 1. oldal tartalma

 

Bevezető

A Debian 9 (Stretch) rendszer hivatalos csomagtárában a PHP 7.0.x verziója érhető el, ami felett már kicsit eljárt az idő, valamint frissítéseket sem fog már kapni. Ezért szükségünk lehet az újabb változatokra, ha éles weboldalakat futtatunk, de akár tesztkörnyezetünket is bővíthetjük. Korábban már foglalkoztunk a PHP forráskódjából történő lefordításával Debian 8-ra és Debian 9-re is, most pedig a deb.sury.org külső csomagtárának igénybevételével fogunk kényelmesen feltelepíteni több PHP verziót is, amik a PHP-FPM szerver API-val működtetve egymás mellett is használhatók Debian 9 (Stretch), Debian 8 (Jessie) vagy akár a Debian 10 (Buster) rendszereken is.

A deb.sury.org csomagtára nem hivatalos Debian csomagtár, viszont fenntartója (Ondřej Surý) már a PHP 5 óta készít PHP csomagokat a Debian hivatalos csomagtárába is, így teljes biztonsággal használhatjuk Debian vagy Ubuntu alapú szerverünkön az ő általa készített frissebb PHP verziókat és egyéb kiegészítőket tartalmazó csomagokat. A repó  használatának további előnye, hogy időről időre kerülnek fel az újabb csomagok, amiket a rendszerünk APT csomagkezelőjével könnyen frissíthetünk.

 

 

Alapfeltételek

Ennek a receptnek az elkészítéséhez szükség van minimum egy Apache webkiszolgálóra, aminek segítségével lekérhetjük a szerverről a php fájlok kimeneteit (A PHP-t természetesen ebben az útmutatóban fogjuk telepíteni).

Ha egy minimális szerverrel indulunk, mint például az alábbiak valamelyike:

akkor telepítsük az Apache-ot (root-ként) az alábbi parancs segítségével:

apt-get -y install apache2

Vagy pedig kezdhetjük valamelyik LAMP rendszerrel is, amik már tartalmazzák az Apache mellett a MySQL/MariaDB adatbázis szervert és az alap PHP-t is:

Akár a tökéletes szerverekre is feltelepíthetjük a lentebb bemutatott PHP verziókat, azonban ebben az esetben az ISPConfig kezelőpanelben kell beállítani őket, hogy használhassuk weboldalainkhoz. Erről itt tájékozódhatunk: Hogyan állíthatunk be egyedi PHP verziókat ISPConfig rendszerű szerverünkön

Ahogy a leírás címe is utal rá, ezt a feladatot a Debian 9 (Stretch) LAMP szerveren fogom elvégezni, így később még lehetőségünk lesz több mindent építeni erre a szerverre.

 

A deb.sury.org csomagtár használatba vétele

Elsőként telepítsünk néhány szükséges csomagot:

apt-get install -y apt-transport-https ca-certificates

Az apt-transport-https csomag lehetővé teszi, hogy az APT forráslistánkban használhassunk HTTPS elérhetőségű csomagtárakat is. A ca-certificates csomag pedig tartalmazza a megbízható tanúsítványokat kiállító hatóságok listáját, hogy az SSL alapú alkalmazások ellenőrizni tudják az SSL kapcsolatok hitelességét.

Ha ezzel megvagyunk, lépjünk be a csomagtárak GPG kulcsait tároló könyvtárba:

cd /etc/apt/trusted.gpg.d/

Majd töltsük le a sury.org GPG kulcsát ebbe a könyvtárba valamilyen néven elnevezve (-O kapcsolóval), hogy később is tudjuk, hogy kinek a GPG kulcsa ez:

wget https://packages.sury.org/php/apt.gpg -O sury-org-php.gpg 

Ezután nyissuk meg az APT forrásfájlunkat szerkesztésre:

nano /etc/apt/sources.list

Majd adjuk hozzá a Debian főverziónknak megfelelő sort:

deb https://packages.sury.org/php/ <Debian kódnevünk> main

Ahol a Debian kódnevünket helyettesítsük be az alábbiak szerint (kis kezdőbetűkkel):

  • Debian 8 esetén: "jessie"
  • Debian 9 esetén: "stretch"
  • Debian 10 esetén: "buster"
  • Debian 11 esetén: "bullseye"

(Ügyeljünk, hogy a kódnév előtt és után szóközök vannak.)

Mentsük le a fájlt, majd frissítsük a csomagtárainkat:

apt-get update
apt-get -y upgrade

A frissítés elején kiírja, hogy néhány csomag vissza lesz tartva. Nálam például:

Az alábbi csomagok vissza lesznek tartva:
  libapache2-mod-php7.0 libxml2 linux-image-amd64 php-bz2 php-mbstring php-mysql php-xml php7.0-bz2
  php7.0-cli php7.0-common php7.0-curl php7.0-gd php7.0-imap php7.0-intl php7.0-json php7.0-mbstring
  php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-pspell php7.0-readline php7.0-recode php7.0-sqlite3
  php7.0-tidy php7.0-xml php7.0-xmlrpc php7.0-zip
Ez azért van, mert a rendszerünk alapértelmezett PHP verziójának csomagjai telepítve vannak, de a Sury.org csomagtárában is megvannak az ezekkel megegyező nevű csomagok. Ezeket később frissíthetjük is az újabbakra (amennyiben újabbak vannak fent, pl. a 7.0-nál frissebb ágból), de meg is hagyhatjuk a "gyári" csomagokat ebből a PHP ágból. Természetesen a megfelelő Debian verzióhoz tartozó PHP csomagokat sorolja itt fel.
Amennyiben mindenképpen frissíteni szeretnénk ezeket a visszatartott csomagokat, az alábbi linken olvashatunk ennek a kivitelezéséről:
Hogyan frissíthetjük a visszatartott csomagjainkat az APT csomagkezelő segítségével

Mivel a célunk, hogy a PHP7.0-nál újabb verzió ágakat tegyünk fel, így a 7.0-val most nem foglalkozunk, hanem elkezdjük az újabb PHP verziók telepítését.

 

 

PHP verziók telepítése

A sury.org csomagtárból többféle PHP verziót telepíthetünk, jelenleg a következőket: 5.6, 7.0, 7.1, 7.2, 7.3 és 7.4. Ezek közül tegyük fel azokat, amelyekre szükségünk van, de akár mindet feltehetjük.

Alapcsomagok

A különböző PHP változatok telepítése előtt még célszerű feltennünk néhány alapcsomagot, amik mindegyik PHP verzió számára biztosítják a szükséges kiegészítő szolgáltatásokat.

A parancs több csomag telepítését tartalmazza, így külön sorokba tördelve jelenítem meg, amit egyben bemásolva futtathatunk

apt-get -y install \
    mcrypt \
    imagemagick \
    memcached \
    php-apcu \
    php-gettext \
    php-imagick \
    php-memcache \
    php-pear \
    php-yaml

Ezután jöhetnek a különböző PHP verziók telepítése.

PHP 5.6

Bár ez egy régebbi verzió, de ha már rendelkezésünkre áll az új csomagtárban és szükségünk van rá, pl. egy régi weboldal futtatásához, telepítsük az alábbi paranccsal:

apt-get -y install \
    php5.6 \
    php5.6-bcmath \
    php5.6-bz2 \
    php5.6-cgi \
    php5.6-cli \
    php5.6-common \
    php5.6-curl \
    php5.6-fpm \
    php5.6-gd \
    php5.6-imap \
    php5.6-intl \
    php5.6-json \
    php5.6-mbstring \
    php5.6-mcrypt \
    php5.6-mysql \
    php5.6-opcache \
    php5.6-pspell \
    php5.6-recode \
    php5.6-soap \
    php5.6-sqlite3 \
    php5.6-tidy \
    php5.6-xml \
    php5.6-xmlrpc \
    php5.6-xsl \
    php5.6-zip
Ha módosítás céljából kimásoljuk a parancsot egy szerkesztőbe, ügyeljünk, hogy a sorok végén lévő \ jelek után ne legyen semmilyen karakter (se szóköz). Behúzás használata nem kötelező, csak a formaiság miatt szoktam betenni, hogy szembetűnő legyen, hogy ez egyetlen parancs. Ha használunk behúzást, akkor csak szóközökkel tehetjük meg, mert a tab-ok hatására a parancs értelmezése közben elindulna a Bash parancssori kiegészítése, ami megakasztja a teljes parancs futását.

A parancs futásának végén kiír pár sornyi megjegyzést:

NOTICE: Not enabling PHP 5.6 FPM by default.
NOTICE: To enable PHP 5.6 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php5.6-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

Ez röviden annyit jelent, hogy alapból nincs engedélyezve a PHP-FPM az Apache-ban, ennek használatához be kell kapcsolni a megfelelő modulokat. Ezeket majd később állítgatjuk be.

Ez az összeállítás tartalmazza egy általános használatú PHP rendszer összetevőit, de ha szükségünk van még további csomagokra, akkor az alábbi apt-cache paranccsal rákereshetünk az összes PHP 5.6-os csomagra:

apt-cache search php5.6

A listából még mazsolázhatunk, amennyiben szükségünk van még egyéb kiegészítőkre is.

Ellenőrizhetjük ezt a változatot a CLI segítségével:

php5.6 --version
PHP 5.6.40-12+0~20190902.20+debian9~1.gbpc72558 (cli) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Ha tehát a PHP 5.6 parancssori módjára van szükségünk, pl. egy cron feladat végrehajtásához, stb, akkor a php5.6 parancsot használhatjuk ehhez a verzióhoz.

A php.ini fájlok pedig az alábbi helyeken vannak:

  • CLI-hez: /etc/php/5.6/cli/php.ini
  • PHP-FPM-hez: /etc/php/5.6/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php5.6-fpm
 php5.6-fpm.service - The PHP 5.6 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php5.6-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 19:55:19 CEST; 2h 1min ago
     Docs: man:php-fpm5.6(8)
 Main PID: 21398 (php-fpm5.6)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php5.6-fpm.service
           ├─21398 php-fpm: master process (/etc/php/5.6/fpm/php-fpm.conf)
           ├─21400 php-fpm: pool www
           └─21401 php-fpm: pool www

szept 26 19:55:19 debian9 systemd[1]: Starting The PHP 5.6 FastCGI Process Manager...
szept 26 19:55:19 debian9 systemd[1]: Started The PHP 5.6 FastCGI Process Manager.

 

 

PHP 7.0

Ha még nincs fent, és kompatibilitási okok miatt szükségünk van a 7.0-ás PHP-re, akkor telepítsük a következő paranccsal:

apt-get -y install \
    php7.0 \
    php7.0-bcmath \
    php7.0-bz2 \
    php7.0-cgi \
    php7.0-cli \
    php7.0-common \
    php7.0-curl \
    php7.0-fpm \
    php7.0-gd \
    php7.0-imap \
    php7.0-intl \
    php7.0-json \
    php7.0-mbstring \
    php7.0-mcrypt \
    php7.0-mysql \
    php7.0-opcache \
    php7.0-pspell \
    php7.0-recode \
    php7.0-soap \
    php7.0-sqlite3 \
    php7.0-tidy \
    php7.0-xml \
    php7.0-xmlrpc \
    php7.0-xsl \
    php7.0-zip

Itt is kiírja a PHP-FPM-el kapcsolatos megjegyzéseket, de innentől már nem nyújtom ezzel a leírás terjedelmét...

Itt is keresgélhetünk még szükséges csomagokat a következő paranccsal:

apt-cache search php7.0

Parancssori használat: php7.0

A php.ini fájlok:

  • CLI-hez: /etc/php/7.0/cli/php.ini
  • PHP-FPM-hez: /etc/php/7.0/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php7.0-fpm
 php7.0-fpm.service - The PHP 7.0 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.0-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 20:28:22 CEST; 1h 31min ago
     Docs: man:php-fpm7.0(8)
 Main PID: 28253 (php-fpm7.0)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php7.0-fpm.service
           ├─28253 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
           ├─28254 php-fpm: pool www
           └─28255 php-fpm: pool www

szept 26 20:28:22 debian9 systemd[1]: Starting The PHP 7.0 FastCGI Process Manager...
szept 26 20:28:22 debian9 systemd[1]: Started The PHP 7.0 FastCGI Process Manager.

PHP 7.1

A 7.1-es ágat is hasonlóképpen telepíthetjük:

apt-get -y install \
    php7.1 \
    php7.1-bcmath \
    php7.1-bz2 \
    php7.1-cgi \
    php7.1-cli \
    php7.1-common \
    php7.1-curl \
    php7.1-fpm \
    php7.1-gd \
    php7.1-imap \
    php7.1-intl \
    php7.1-json \
    php7.1-mbstring \
    php7.1-mcrypt \
    php7.1-mysql \
    php7.1-opcache \
    php7.1-pspell \
    php7.1-recode \
    php7.1-soap \
    php7.1-sqlite3 \
    php7.1-tidy \
    php7.1-xml \
    php7.1-xmlrpc \
    php7.1-xsl \
    php7.1-zip

Itt is kereshetünk további kiegészítőket a fenti keresőparancshoz hasonlóan...

Parancssori használat: php7.1

A php.ini fájlok:

  • CLI-hez: /etc/php/7.1/cli/php.ini
  • PHP-FPM-hez: /etc/php/7.1/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php7.1-fpm
 php7.1-fpm.service - The PHP 7.1 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.1-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 20:54:00 CEST; 1h 10min ago
     Docs: man:php-fpm7.1(8)
 Main PID: 11156 (php-fpm7.1)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php7.1-fpm.service
           ├─11156 php-fpm: master process (/etc/php/7.1/fpm/php-fpm.conf)
           ├─11158 php-fpm: pool www
           └─11159 php-fpm: pool www

szept 26 20:54:00 debian9 systemd[1]: Starting The PHP 7.1 FastCGI Process Manager...
szept 26 20:54:00 debian9 systemd[1]: Started The PHP 7.1 FastCGI Process Manager.

 

 

PHP 7.2

A 7.2-es PHP telepítéséhez futtassuk a következőt:

apt-get -y install \
    php7.2 \
    php7.2-bcmath \
    php7.2-bz2 \
    php7.2-cgi \
    php7.2-cli \
    php7.2-common \
    php7.2-curl \
    php7.2-fpm \
    php7.2-gd \
    php7.2-imap \
    php7.2-intl \
    php7.2-json \
    php7.2-mbstring \
    php7.2-mysql \
    php7.2-opcache \
    php7.2-pspell \
    php7.2-recode \
    php7.2-soap \
    php7.2-sqlite3 \
    php7.2-tidy \
    php7.2-xml \
    php7.2-xmlrpc \
    php7.2-xsl \
    php7.2-zip
Ettől a verziótól felfelé már nincsen php7.x-mcrypt csomag, így ne keressük. Erről részletesebben az Ubuntu LAMP szerver elkészítésénél írtam. Mindezt csak azért említem meg, mert előfordulhatnak olyan weboldalak, CMS rendszerek, amiknek még szükségük van erre a PHP bővítményre, így ezek a rendszerek jelenleg nem támogatják a 7.2-es, vagy ennél újabb PHP-t.

Parancssori használat: php7.2. Pl. verzió lekérdezése:

php7.2 --version

A php.ini fájlok:

  • CLI-hez: /etc/php/7.2/cli/php.ini
  • PHP-FPM-hez: /etc/php/7.2/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php7.2-fpm
 php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 21:17:17 CEST; 49min ago
     Docs: man:php-fpm7.2(8)
 Main PID: 29395 (php-fpm7.2)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php7.2-fpm.service
           ├─29395 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
           ├─29396 php-fpm: pool www
           └─29397 php-fpm: pool www

szept 26 21:17:17 debian9 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
szept 26 21:17:17 debian9 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

PHP 7.3

A 7.3-as PHP-t is hasonlóan telepíthetjük:

apt-get -y install \
    php7.3 \
    php7.3-bcmath \
    php7.3-bz2 \
    php7.3-cgi \
    php7.3-cli \
    php7.3-common \
    php7.3-curl \
    php7.3-fpm \
    php7.3-gd \
    php7.3-imap \
    php7.3-intl \
    php7.3-json \
    php7.3-mbstring \
    php7.3-mysql \
    php7.3-opcache \
    php7.3-pspell \
    php7.3-recode \
    php7.3-soap \
    php7.3-sqlite3 \
    php7.3-tidy \
    php7.3-xml \
    php7.3-xmlrpc \
    php7.3-xsl \
    php7.3-zip

Parancssori használat: php7.3. Pl. verzió lekérdezése:

php7.3 --version

A php.ini fájlok:

  • CLI-hez: /etc/php/7.3/cli/php.ini
  • PHP-FPM-hez: /etc/php/7.3/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php7.3-fpm
 php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 21:50:42 CEST; 18min ago
     Docs: man:php-fpm7.3(8)
 Main PID: 13594 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/php7.3-fpm.service
           ├─13594 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─13595 php-fpm: pool www
           └─13596 php-fpm: pool www

szept 26 21:50:42 debian9 systemd[1]: Starting The PHP 7.3 FastCGI Process Manager...
szept 26 21:50:42 debian9 systemd[1]: Started The PHP 7.3 FastCGI Process Manager.

 

 

PHP 7.4

És végül a jelenlegi legfrissebb PHP verzió telepítése:

apt-get -y install \
    php7.4 \
    php7.4-bcmath \
    php7.4-bz2 \
    php7.4-cgi \
    php7.4-cli \
    php7.4-common \
    php7.4-curl \
    php7.4-fpm \
    php7.4-gd \
    php7.4-imap \
    php7.4-intl \
    php7.4-json \
    php7.4-mbstring \
    php7.4-mysql \
    php7.4-opcache \
    php7.4-pspell \
    php7.4-soap \
    php7.4-sqlite3 \
    php7.4-tidy \
    php7.4-xml \
    php7.4-xmlrpc \
    php7.4-xsl \
    php7.4-zip

Parancssori használat: php7.4. Pl. verzió lekérdezése:

php7.4 --version
PHP 7.4.0beta4 (cli) (built: Aug 27 2019 13:24:38) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.0beta4, Copyright (c), by Zend Technologies

Mint láthatjuk, a PHP 7.4 – a leírás készítése idején (2019-09-27) – még béta állapotban van, tehát éles környezetben még ne használjuk. Ennek változásáról a PHP hivatalos oldalán tájékozódhatunk.

Frissítés (2020-01-27):
A leírás készítése óta eltelt kerek 4 hónap, az imént említett PHP 7.4 verziója jelenleg a következő:
PHP 7.4.2 (cli) (built: Jan 23 2020 14:09:40) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.2, Copyright (c), by Zend Technologies

Ez alapján már látható, hogy a PHP 7.4 nagy fejlődésen ment át, tehát ma már nyugodtan használható éles használatra is.

A php.ini fájlok:

  • CLI-hez: /etc/php/7.4/cli/php.ini
  • PHP-FPM-hez: /etc/php/7.4/fpm/php.ini

PHP-FPM állapot lekérdezése:

systemctl status php7.4-fpm
 php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2019-09-26 22:20:01 CEST; 6min ago
     Docs: man:php-fpm7.4(8)
 Main PID: 30857 (php-fpm7.4)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
   CGroup: /system.slice/php7.4-fpm.service
           ├─30857 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
           ├─30858 php-fpm: pool www
           └─30859 php-fpm: pool www

szept 26 22:20:01 debian9 systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
szept 26 22:20:01 debian9 systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

Egy független PHP teszt alapján a 7.4-es ág teljesítménye ígéretesnek tűnik, így várjuk mielőbb a stabil változat kiadását.

 

Amint láthatjuk, a különböző PHP verziók FPM pool-jai elindultak, fejenként az 1+2 alapértelmezett processzel, amik várják a beérkező kapcsolatokat. A feladatunk azonban itt még nem ért véget, a következő oldalon folytatjuk a PHP-k egy szerveren történő párhuzamos használatával.

 

PHP 8.0

Frissítés 2021-02-06:
Elkészült a PHP 8 telepítő leírás: 

 

Kapcsolódó tartalom, hasznos linkek:

 

Lapozó

Ez a leírás több oldalból áll: