GNU/Linux >> Linux Esercitazione >  >> Debian

Come installare PHP 7.1.16 come PHP-FPM e FastCGI per ISPConfig 3.1 su Debian 8 (Jessie)

La versione finale di PHP 7.1 è ora disponibile per il download su Github e sui mirror PHP. PHP 7.1 è la prossima generazione del linguaggio di programmazione PHP, è fino a 2 volte più veloce di PHP 5.6 e 14 volte più veloce di PHP 5.0 secondo le note di rilascio. La nuova versione di PHP non è compatibile al 100% con PHP 5.x poiché alcune API deprecate sono state rimosse, quindi è una buona idea iniziare a testare la compatibilità dei tuoi siti Web con questa nuova versione. Questa operazione può essere eseguita facilmente e senza influire su tutti i siti sul server utilizzando la funzione della versione multi PHP in ISPConfig 3. La versione PHP può essere selezionata nelle impostazioni del sito Web ISPConfig 3 per ciascun sito individualmente. Questa funzione funziona con PHP-FPM e FastCGI. Questo tutorial mostra come creare il nuovo PHP 7.1 come PHP-FPM e una versione FastCGI su un server Debian Jessie. Questa build PHP 7.1 include molte estensioni compilate e Zend OPcache e Memcached come moduli caricabili.

1 Nota preliminare

Installerò PHP 7.1 che è stato rilasciato come versione finale pochi giorni fa. Tieni presente che PHP-FPM può essere utilizzato su entrambi i server Apache e Nginx mentre FastCGI è disponibile solo per i server Apache.

Con le versioni precedenti di PHP, PHP-FPM e FastCGI si escludevano a vicenda, quindi un binario FPM e FastCGI doveva essere compilato separatamente. Con PHP 7.1 è possibile creare un singolo binario che supporti la modalità FPM e FCGI.

2 Compila PHP 7.1 con PHP-FPM e Fastcgi

Scarica ed estrai PHP 7.1 da Github:

mkdir -p /opt/php-7.1
mkdir /usr/local/src/php7-build
cd /usr/local/src/php7-build
wget http://de2.php.net/get/php-7.1.16.tar.bz2/from/this/mirror -O php-7.1.16.tar.bz2
tar jxf php-7.1.16.tar.bz2
cd php-7.1.16/

Installa i prerequisiti per la creazione di PHP 7.1 e il nano editor che userò per modificare i file di configurazione:

apt-get install build-essential nano autoconf
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-turbo-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev libxml2-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng12-dev libfreetype6-dev libkrb5-dev libpq-dev libxml2-dev libxslt1-dev
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

(L'ultimo comando è necessario se crei PHP con --with-imap, perché altrimenti ./configure si fermerà con il seguente errore:

checking for crypt in -lcrypt... yes
configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.
[email protected]:/usr/local/src/php5-build/php-7.0.7#

)

Configura e compila PHP 7.1 come segue (puoi adattare il comando ./configure alle tue esigenze, dai un'occhiata a

./configure --help

per vedere tutte le opzioni disponibili; se utilizzi un comando ./configure diverso, è possibile che siano necessarie librerie aggiuntive o il processo di compilazione non riuscirà):

./configure --prefix=/opt/php-7.1 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-opcache --enable-fpm

L'ultima opzione (--enable-fpm) assicura che questa versione di PHP funzioni con PHP-FPM.

make
make install

Copia php.ini e php-fpm.conf nelle posizioni corrette:

cp /usr/local/src/php7-build/php-7.1.16/php.ini-production /opt/php-7.1/lib/php.ini
cp /opt/php-7.1/etc/php-fpm.conf.default /opt/php-7.1/etc/php-fpm.conf
cp /opt/php-7.1/etc/php-fpm.d/www.conf.default /opt/php-7.1/etc/php-fpm.d/www.conf

Apri /opt/php-7.1/etc/php-fpm.conf e regola la seguente impostazione (rimuovi; davanti alla riga pid):

nano /opt/php-7.1/etc/php-fpm.conf
[...]
pid = run/php-fpm.pid
[...]

Quindi apri /opt/php-7.1/etc/php-fpm.d/www.conf e regola la linea di ascolto, devi utilizzare una porta non utilizzata (ad es. 8999; la porta 9000 potrebbe essere già utilizzata dal PHP-FPM predefinito di Debian) :

nano /opt/php-7.1/etc/php-fpm.d/www.conf
[...]
listen = 127.0.0.1:8999
[...]

Quando utilizzi più versioni PHP aggiuntive, assicurati di utilizzare una porta libera, ad es. 8998, 8997 e così via per le prossime versioni.

3 Crea lo script init e il file dell'unità systemd

Debian supporta Systemd così come i tradizionali script di inizializzazione. La maggior parte dei sistemi oggi utilizza Systemd, in questo caso procedere con il capitolo 3.2, per i sistemi con sistema init tradizionale, seguire il capitolo 3.1 e poi procedere con il capitolo 4. Non installare entrambi, lo script systemd e init.d, sullo stesso sistema.

3.1 Creare uno script di avvio init.d

Per prima cosa creerò uno script init per il servizio php-fpm e poi creerò un'unità systemd.

Innanzitutto, crea uno script di inizializzazione per PHP-FPM:

nano /etc/init.d/php-7.1-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-7.1-fpm
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-7.1-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-7.1/sbin/php-fpm
php_fpm_CONF=/opt/php-7.1/etc/php-fpm.conf
php_fpm_PID=/opt/php-7.1/var/run/php-fpm.pid
php_opts="--fpm-config $php_fpm_CONF"
wait_for_pid () {
        try=0
        while test $try -lt 35 ; do
                case "$1" in
                        'created')
                        if [ -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                        'removed')
                        if [ ! -f "$2" ] ; then
                                try=''
                                break
                        fi
                        ;;
                esac
                echo -n .
                try=`expr $try + 1`
                sleep 1
        done
}
case "$1" in
        start)
                echo -n "Starting php-fpm "
                $php_fpm_BIN $php_opts
                if [ "$?" != 0 ] ; then
                        echo " failed"
                        exit 1
                fi
                wait_for_pid created $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        stop)
                echo -n "Gracefully shutting down php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -QUIT `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed. Use force-exit"
                        exit 1
                else
                        echo " done"
                       echo " done"
                fi
        ;;
        force-quit)
                echo -n "Terminating php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -TERM `cat $php_fpm_PID`
                wait_for_pid removed $php_fpm_PID
                if [ -n "$try" ] ; then
                        echo " failed"
                        exit 1
                else
                        echo " done"
                fi
        ;;
        restart)
                $0 stop
                $0 start
        ;;
        reload)
                echo -n "Reload service php-fpm "
                if [ ! -r $php_fpm_PID ] ; then
                        echo "warning, no pid file found - php-fpm is not running ?"
                        exit 1
                fi
                kill -USR2 `cat $php_fpm_PID`
                echo " done"
        ;;
        *)
                echo "Usage: $0 {start|stop|force-quit|restart|reload}"
                exit 1
        ;;
esac

Rendi eseguibile lo script init e crea i collegamenti di avvio del sistema:

chmod 755 /etc/init.d/php-7.1-fpm
insserv php-7.1-fpm

Finalmente avvia PHP-FPM:

/etc/init.d/php-7.1-fpm start

Il risultato dovrebbe essere:

/etc/init.d/php-7.1-fpm start
Starting php-fpm done

3.2 Crea  script Systemd per PHP 7.1

Ora crea il file dell'unità di sistema:

nano /lib/systemd/system/php-7.1-fpm.service

con il seguente contenuto:

[Unit]
Description=The PHP 7.1 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/opt/php-7.1/var/run/php-fpm.pid
ExecStart=/opt/php-7.1/sbin/php-fpm --nodaemonize --fpm-config /opt/php-7.1/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Abilita il servizio e ricarica systemd:

systemctl enable php-7.1-fpm.service
systemctl daemon-reload

Finalmente avvia PHP-FPM:

systemctl start php-7.1-fpm.service

4 Abilita Zend OPcache

Per abilitare Zend OPcache, apri /opt/php-7.1/lib/php.ini...

nano /opt/php-7.1/lib/php.ini

... e aggiungi la seguente riga alla fine:

[...]
zend_extension=opcache.so

L'estensione Memcache e APCu non può ancora essere installata su PHP 7.1, quindi salterò la loro installazione per ora. Aggiornerò il tutorial in seguito quando le estensioni pecl saranno compatibili con PHP 7.1.

Testare la versione PHP:

cd /opt/php-7.1/bin
./php --version

L'output dovrebbe essere simile a questo screenshot.

Nota: Lo screenshot è di PHP 7.1.16, il tutorial viene aggiornato continuamente per le nuove versioni di PHP 7.1, ma non acquisiamo nuovi screenshot ogni volta, quindi la versione di PHP 7.1 che vedrai sul tuo server potrebbe essere più recente. La versione corrente di questo tutorial è per php-7.1.16.

5 Abilita Memcache (opzionale)

In questo capitolo compilerò e abiliterò l'estensione PHP Memcached.

Il primo passo è installare il pacchetto libmemcached-dev da Debian.

apt-get install libmemcached-dev

Quindi crea una directory, scarica l'estensione memcache PHP da Github, decomprimi l'archivio e inserisci la directory che contiene i file decompressi.

mkdir /usr/local/src/php7-build/php-memcache
cd /usr/local/src/php7-build/php-memcache
wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
unzip php7.zip
cd php-memcached-php7

Prepara i sorgenti eseguendo il comando phpize da PHP 7.1.

/opt/php-7.1/bin/phpize

Configura e crea l'estensione memcache PHP.

./configure --with-php-config=/opt/php-7.1/bin/php-config
make
make install

Per abilitare l'estensione Memcache, apri /opt/php-7.1/lib/php.ini...

nano /opt/php-7.1/lib/php.ini

... e aggiungi la seguente riga alla fine:

[...]
extension=memcached.so

2.1 Installare l'estensione xDebug (opzionale)

Il modulo xDebug è un'estensione di debug per PHP. L'installazione è facoltativa.

Installa xDebug con questi comandi.

cd /opt/php-7.1/etc
pecl -C ./pear.conf update-channels
pecl -C ./pear.conf install xdebug

Quindi modifica il file php.ini con un editor:

nano /opt/php-7.1/lib/php.ini

e aggiungi la seguente riga alla fine del file:

zend_extension=/opt/php-7.1/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so

Infine riavvia il demone php-fpm:

service php-7.1-fpm restart

7 Abilita PHP 7.1 in ISPConfig

In ISPConfig 3, puoi configurare la nuova versione PHP in Sistema> Versioni PHP aggiuntive. Nella scheda Nome, inserisci semplicemente un nome per la versione PHP (ad es. PHP 7.1):questa versione PHP sarà elencata con questo nome nelle impostazioni del sito Web in ISPConfig:

Vai alla scheda Impostazioni FastCGI e compila i campi come segue:

Path to the PHP FastCGI binary: /opt/php-7.1/bin/php-cgi
Path to the php.ini directory: /opt/php-7.1/lib

Quindi vai alla scheda Impostazioni PHP-FPM e compila i campi come segue:

Path to the PHP-FPM init script: /etc/init.d/php-7.1-fpm
Path to the php.ini directory: /opt/php-7.1/lib
Path to the PHP-FPM pool directory: /opt/php-7.1/etc/php-fpm.d

  • PHP:http://www.php.net/
  • Configurazione ISP:http://www.ispconfig.org/
  • Debian:http://www.debian.org/

Debian
  1. Come costruire PHP 5.6 (PHP-FPM e FastCGI) con Zend OPcache e APCu per ISPConfig 3 su Debian 7 (Wheezy)

  2. Come installare PHP 8.0 su Debian 11

  3. Come installare PHP 8.0 su Debian 10 / Debian 9

  4. Come installare PHP 7.4 su Debian 10

  5. Come installare PHP su Debian 11

Come installare PHP 7.1, 7.2 e 5.6 come PHP-FPM e FastCGI per ISPConfig 3 su Debian 9

Come installare PHP 5.6 e 7.0 - 8.1 come PHP-FPM e FastCGI per ISPConfig 3 con apt su Debian da 8 a 11

Come installare LAMP (Apache, MySQL, PHP) su Debian 8 Jessie

Come installare Apache con PHP-FPM su Debian 10

Come installare Nginx con PHP-FPM su Debian 10

Come installare ISPConfig su Debian 11