GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So installieren Sie PHP 7 als PHP-FPM &FastCGI für ISPConfig 3 auf Debian 8 (Jessie)

Die endgültige Version von PHP 7 steht jetzt auf Github und den PHP-Spiegeln zum Download bereit. PHP7 ist die nächste Generation der PHP-Programmiersprache, sie ist gemäß den Versionshinweisen bis zu 2-mal schneller als PHP 5.6 und 14-mal schneller als PHP 5.0. 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 Auswirkungen auf alle Sites auf Ihrem Server erfolgen, indem Sie die Multi-PHP-Versionsfunktion in ISPConfig 3 verwenden. Die PHP-Version kann in den Website-Einstellungen von ISPConfig 3 für jede Site einzeln ausgewählt werden. Diese Funktion funktioniert mit PHP-FPM und FastCGI. Dieses Tutorial zeigt, wie Sie das neue PHP 7 als PHP-FPM- und FastCGI-Version auf einem Debian-Jessie-Server erstellen. Diese PHP 7-Builds beinhalten Zend OPcache.

1 Vorbemerkung

Ich werde PHP 7 installieren, das sich zum Zeitpunkt des Schreibens dieses Artikels derzeit in der Beta-Phase befindet. 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, sodass eine FPM- und FastCGI-Binärdatei separat erstellt werden musste. Mit PHP 7 kann eine einzelne Binärdatei erstellt werden, die den FPM- und FCGI-Modus unterstützt.

2 Kompilieren Sie PHP 7 mit PHP-FPM und Fastcgi

Laden Sie PHP 7 von Github herunter und extrahieren Sie es:

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

Installieren Sie die Voraussetzungen zum Erstellen von PHP 7 und den Nano-Editor, den ich zum Bearbeiten der Konfigurationsdateien verwenden werde:

apt-get install build-essential nano
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 folgendem Fehler stoppt:

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.32#

)

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

./configure --help

um alle verfügbaren Optionen zu sehen; Wenn Sie einen anderen ./configure-Befehl verwenden, werden möglicherweise zusätzliche Bibliotheken benötigt oder der Erstellungsprozess schlägt fehl):

./configure --prefix=/opt/php-7.0.32 --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

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

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

Öffnen Sie /opt/php-7.0.32/etc/php-fpm.conf und passen Sie die folgende Einstellung an (entfernen Sie das; vor der PID-Zeile):

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

Öffnen Sie dann /opt/php-7.0.32/etc/php-fpm.d/www.conf und passen Sie die Listen-Zeile an, Sie müssen einen unbenutzten Port verwenden (z. B. 8999; Port 9000 wird möglicherweise von Debians Standard-PHP-FPM verwendet schon):

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

3 Erstellen Sie das Init-Skript und die systemd-Unit-Datei

Debian unterstützt Systemd sowie die traditionellen Init-Skripte. Zuerst erstelle ich ein Init-Skript für den php-fpm-Dienst und dann erstelle ich eine systemd-Unit.

Erstellen Sie zunächst ein Init-Skript für PHP-FPM:

nano /etc/init.d/php-7.0.32-fpm
#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-7.0.32-fpm
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts php-7.0.32-fpm
# Description:       starts the PHP FastCGI Process Manager daemon
### END INIT INFO
php_fpm_BIN=/opt/php-7.0.32/sbin/php-fpm
php_fpm_CONF=/opt/php-7.0.32/etc/php-fpm.conf
php_fpm_PID=/opt/php-7.0.32/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 Init-Skript ausführbar und erstellen Sie die Systemstart-Links:

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

Und jetzt erstellen Sie die systemd-Unit-Datei

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

mit folgendem Inhalt:

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

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

[Install]
WantedBy=multi-user.target

Aktivieren Sie den Dienst und laden Sie systemd neu:

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

Starten Sie schließlich PHP-FPM.

Führen Sie für Systeme mit herkömmlichem Init-System Folgendes aus:

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

Das Ergebnis sollte sein:

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

Verwenden Sie auf Servern, die systemd verwenden, stattdessen diesen Befehl:

systemctl start php-7.0.32-fpm.service

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

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

... und am Ende folgende Zeile hinzufügen:

[...]
zend_extension=opcache.so

Die Memcache- und APCu-Erweiterung kann noch nicht auf PHP 7 installiert werden, daher überspringe ich ihre Installation vorerst. Ich werde das Tutorial später aktualisieren, wenn die Pecl-Erweiterungen mit PHP 7 kompatibel sind.

Testen Sie die PHP-Version:

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

Die Ausgabe sollte diesem Screenshot ähneln.

Bitte beachten: Der Screenshot stammt von PHP 7.0.0, das Tutorial wird kontinuierlich für neue PHP 7-Versionen aktualisiert, aber wir machen nicht jedes Mal neue Screenshots, sodass die PHP 7-Version, die Sie auf Ihrem Server sehen werden, wahrscheinlich neuer ist. Die aktuelle Version dieser Anleitung ist für php-7.0.32.

4 Aktivieren Sie PHP 7 in ISPConfig

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 ein (z. B. PHP 7.0.0) - diese PHP-Version wird unter diesem Namen in den Website-Einstellungen in ISPConfig aufgeführt:

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

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

Gehen Sie dann zum Tab „PHP-FPM-Einstellungen“ und füllen Sie die Felder wie folgt aus:

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

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

Debian
  1. So bauen Sie PHP 5.6 (PHP-FPM &FastCGI) mit Zend OPcache und APCu für ISPConfig 3 auf Debian 7 (Wheezy)

  2. So installieren Sie PHP 8.0 unter Debian 11

  3. So installieren Sie PHP 8.0 unter Debian 10 / Debian 9

  4. So installieren Sie PHP 8 auf Debian 10

  5. So installieren Sie PHP 7.3 unter Debian 10

So installieren Sie PHP 7.1, 7.2 und 5.6 als PHP-FPM &FastCGI für ISPConfig 3 auf Debian 9

So installieren Sie PHP 5.6 und 7.0 - 8.1 als PHP-FPM &FastCGI für ISPConfig 3 mit apt auf Debian 8 bis 11

So installieren Sie LAMP (Apache, MySQL, PHP) unter Debian 8 Jessie

So installieren Sie Apache mit PHP-FPM unter Debian 10

So installieren Sie Nginx mit PHP-FPM unter Debian 10

So installieren Sie ISPConfig unter Debian 11