So installieren Sie PHP 7.1.16 als PHP-FPM & FastCGI für ISPConfig 3.1 unter Debian 8 (Jessie)

Die finale Version von PHP 7.1 steht ab sofort auf Github und den PHP-Spiegeln zum Download bereit. PHP 7.1 ist die nächste Generation der PHP-Programmiersprache, sie ist bis zu 2 mal schneller als PHP 5.6 und 14 mal schneller als PHP 5.0 gemäß den Versionshinweisen. Die neue PHP-Version ist nicht 100% kompatibel mit PHP 5.x, da einige veraltete APIs entfernt wurden, daher ist es eine gute Idee, Ihre Websites auf Kompatibilität mit dieser neuen Version zu testen. Dies kann einfach und ohne Beeinträchtigung aller Standorte auf Ihrem Server mit Hilfe der Multi-PHP-Version in ISPConfig 3 erfolgen. Die PHP-Version kann in den ISPConfig 3 Website-Einstellungen für jede Seite einzeln ausgewählt werden. Diese Funktion funktioniert mit PHP-FPM und FastCGI. Dieses Tutorial zeigt, wie man das neue PHP 7.1 als PHP-FPM und FastCGI-Version auf einem Debian Jessie-Server erstellt. Dieser PHP 7.1 Build enthält viele kompilierte Erweiterungen und Zend OPcache und Memcached als ladbare Module.

1 Vorbemerkung

Ich werde PHP 7.1 installieren, das vor einigen Tagen als finale Version freigegeben wurde. Bitte beachten Sie, dass PHP-FPM sowohl auf Apache als auch auf Nginx-Servern verwendet werden kann, während FastCGI nur für Apache-Server verfügbar ist.

Bei älteren PHP-Versionen schlossen sich PHP-FPM und FastCGI gegenseitig aus, so dass ein FPM- und FastCGI-Binary separat erstellt werden mussten. Mit PHP 7.1 kann eine einzige Binärdatei erstellt werden, die den FPM- und FCGI-Modus unterstützt.

2 Kompilieren Sie PHP 7.1 mit PHP-FPM und Fastcgi.

Laden Sie PHP 7.1 von Github herunter und entpacken Sie es:

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/

Installiere die Voraussetzungen für die Erstellung von PHP 7.1 und den Nano-Editor, mit dem ich die Konfigurationsdateien bearbeiten werde:

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

(Der letzte Befehl wird benötigt, wenn Sie PHP mit –with-imap erstellen, da sonst./configure mit dem folgenden Fehler stoppt:

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

)

Konfigurieren und erstellen Sie PHP 7.1 wie folgt (Sie können den Befehl ./configure an Ihre Bedürfnisse anpassen, werfen Sie einen Blick auf

./configure --help

um alle verfügbaren Optionen anzuzeigen; wenn Sie einen anderen ./configure-Befehl verwenden, ist es möglich, dass zusätzliche Bibliotheken erforderlich sind, oder der Build-Prozess schlägt fehl):

./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

Der letzte Schalter (–enable-fpm) stellt sicher, dass diese PHP-Version mit PHP-FPM funktioniert.

make
make install

Kopiere php.ini und php-fpm.conf an die richtigen Stellen:

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

Öffnen Sie /opt/php-7.1/etc/php-fpm.conf und passen Sie die folgende Einstellung an (entfernen Sie die ; vor der Pid-Linie):

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

Öffnen Sie dann /opt/php-7.1/etc/php/php-fpm.d/wwww.conf.und passen Sie die zuhören Leitung muss ein unbenutzter Port verwendet werden (z.B. 8999Hafen 9000 könnte bereits von Debians Standard-PHP-FPM verwendet werden):

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

Wenn Sie mehrere zusätzliche PHP-Versionen verwenden, stellen Sie sicher, dass Sie für die nächsten Versionen einen freien Port verwenden, z.B. 8998, 8997 usw.

3 Erstellen Sie das Initskript und die Systemdatei für die Einheiten.

Debian unterstützt sowohl Systemd als auch die traditionellen Initskripte. Die meisten Systeme verwenden heute Systemd, in diesem Fall fahren Sie mit Kapitel 3.2 fort, für Systeme mit traditionellem init-System folgen Sie Kapitel 3.1 und fahren Sie dann mit Kapitel 4 fort. Installieren Sie nicht beide, das systemd und das init.d-Skript, auf demselben System.

3.1 Erstellen Sie ein init.d-Startskript.

Zuerst werde ich ein Initskript für den php-fpm-Dienst erstellen und dann eine Systemeinheit.

Erstellen Sie zunächst ein Initskript für 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

Machen Sie das Initskript ausführbar und erstellen Sie die Systemstartup-Links:

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

Starten Sie schließlich PHP-FPM:

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

Das Ergebnis sollte sein:

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

3.2 Erstellen Systemd-Skript für PHP 7.1

Erstellen Sie nun die Datei systemd unit:

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

mit folgendem Inhalt:

[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

Aktivieren Sie den Dienst und laden Sie das System neu:

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

Starten Sie schließlich PHP-FPM:

systemctl start php-7.1-fpm.service

4 Zend OP-Cache aktivieren

Um den Zend OPcache zu aktivieren, öffnen Sie /opt/php-7.1/lib/php.ini…..

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

…. und fügen Sie die folgende Zeile am Ende hinzu:

[...]
zend_extension=opcache.so

Der Memcache und die APCu-Erweiterung können unter PHP 7.1 noch nicht installiert werden, daher werde ich ihre Installation vorerst überspringen. Ich werde das Tutorial später aktualisieren, wenn die Pecl-Erweiterungen mit PHP 7.1 kompatibel sind.

Testen Sie die PHP-Version:

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

Die Ausgabe sollte ähnlich wie bei diesem Screenshot sein.

PHP 7.1.16

Bitte beachten Sie: Der Screenshot stammt von PHP 7.1.16, das Tutorial wird ständig für neue PHP 7.1 Versionen aktualisiert, aber wir machen nicht jedes Mal neue Screenshots, so dass die PHP 7.1 Version, die Sie auf Ihrem Server sehen werden, neuer sein könnte. Die aktuelle Version dieses Tutorials ist für php-7.1.16.

5 Memorycache aktivieren (optional)

In diesem Kapitel werde ich die PHP Memcached Erweiterung kompilieren und aktivieren.

Der erste Schritt ist die Installation des Pakets libmemcached-dev von Debian.

apt-get install libmemcached-dev

Erstellen Sie dann ein Verzeichnis, laden Sie die PHP memcache Erweiterung von Github herunter, entpacken Sie das Archiv und geben Sie das Verzeichnis ein, das die entpackten Dateien enthält.

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

Bereiten Sie die Quellen vor, indem Sie den phpize-Befehl von PHP 7.1 ausführen.

/opt/php-7.1/bin/phpize

Konfigurieren und erstellen Sie die PHP memcache Erweiterung.

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

Um die Memcacherweiterung zu aktivieren, öffnen Sie /opt/php-7.1/lib/php.ini…..

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

…. und fügen Sie die folgende Zeile am Ende hinzu:

[...]
extension=memcached.so

2.1 xDebug-Erweiterung installieren (optional)

Das xDebug-Modul ist eine Debugging-Erweiterung für PHP. Die Installation ist optional.

Installieren Sie xDebug mit diesen Befehlen.

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

Bearbeiten Sie dann die Datei php.ini mit einem Editor:

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

und fügen Sie die folgende Zeile am Ende der Datei hinzu:

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

Starten Sie schließlich den php-fpm-Daemon neu:

service php-7.1-fpm restart

7 PHP 7.1 in ISPConfig aktivieren

In ISPConfig 3 können Sie die neue PHP-Version unter System > Zusätzliche PHP-Versionen konfigurieren. Auf der Registerkarte Name geben Sie einfach einen Namen für die PHP-Version (z.B. PHP 7.1) ein – diese PHP-Version wird unter diesem Namen in den Webseiteneinstellungen in ISPConfig aufgeführt:

Geben Sie den Namen der benutzerdefinierten PHP-Version ein.

Gehen Sie zum FastCGI-Einstellungen Registerkarte und füllen Sie die Felder wie folgt aus:

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

PHP 7.1 FastCGI

Dann gehen Sie auf die Registerkarte PHP-FPM-Einstellungen und füllen Sie die Felder wie folgt aus:

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 7.1 FPM-Einstellungen

7 Links

Das könnte dich auch interessieren …