Version 1.0
Autoren:Till Brehm
Folgen Sie howtoforge auf Twitter
ISPConfig 3 verfügt über eine integrierte Funktion, um mehrere PHP-Versionen auf einem Server zu unterstützen und die optimale PHP-Version für eine Website auszuwählen. Diese Funktion funktioniert mit PHP-FPM und FastCGI. Dieses Tutorial zeigt, wie man PHP 5.6 als PHP-FPM- und FastCGI-Version auf einem Debian Wheezy-Server erstellt. Diese PHP 5.5-Builds umfassen Zend OPcache und APCu.
1 Vorbemerkung
Ich werde PHP 5.6.36 installieren, die neueste PHP 5-Version zum Zeitpunkt des Schreibens dieses Artikels. Ich werde auch zeigen, wie man einige zusätzliche PHP-Erweiterungen wie APCu und Memcache erstellt. Der Ioncube-Loader ist derzeit nicht für PHP 5.6 verfügbar, daher werde ich diesen Schritt auslassen.
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.
PHP-FPM und FastCGI schließen sich in PHP 5.6 gegenseitig aus, deshalb zeige ich zwei Möglichkeiten, PHP zu bauen, eine für PHP-FPM, eine für FastCGI, aber Sie können PHP zweimal kompilieren, um beide zu bekommen, einmal mit --enable-fpm und einmal mit --enable-cgi (stellen Sie sicher, dass Sie unterschiedliche Basisverzeichnisse verwenden, z. B. /opt/php-5.6.36 für PHP-FPM und /opt/phpfcgi-5.6.36 für FastCGI).
2 Erstellen von PHP 5.6.36 (PHP-FPM)
Laden Sie PHP 5.6.36 herunter und extrahieren Sie es:
mkdir /opt/php-5.6.36
mkdir /usr/local/src/php5-build
cd /usr/local/src/php5-build
wget http://de2.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2
tar jxf php-5.6.36.tar.bz2
cd php-5.6.36/
Installieren Sie die Voraussetzungen zum Erstellen von PHP5:
apt-get install build-essential
apt-get build-dep php5
apt-get install libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-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-5.6.36#
)
Konfigurieren und bauen Sie PHP 5.6.36 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-5.6.36 --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-mysql --with-pdo-mysql --with-mysqli --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/php5-build/php-5.6.36/php.ini-production /opt/php-5.6.36/lib/php.ini
cp /opt/php-5.6.36/etc/php-fpm.conf.default /opt/php-5.6.36/etc/php-fpm.conf
Öffnen Sie /opt/php-5.6.36/etc/php-fpm.conf und passen Sie die folgenden Einstellungen an - in der Listen-Zeile müssen Sie einen unbenutzten Port verwenden (z. B. 8999; Port 9000 könnte bereits von Debians Standard-PHP-FPM verwendet werden ), und Sie müssen am Ende die Zeile include=/opt/php-5.6.36/etc/pool.d/*.conf hinzufügen:
vi /opt/php-5.6.36/etc/php-fpm.conf
[...] pid = run/php-fpm.pid [...] user = www-data group = www-data [...] listen = 127.0.0.1:8999 [...] include=/opt/php-5.6.36/etc/pool.d/*.conf
Erstellen Sie das Pool-Verzeichnis für PHP-FPM:
mkdir /opt/php-5.6.36/etc/pool.d
Erstellen Sie als Nächstes ein Init-Skript für PHP-FPM:
vi /etc/init.d/php-5.6.36-fpm
#! /bin/sh ### BEGIN INIT INFO # Provides: php-5.6.36-fpm # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php-5.6.36-fpm # Description: starts the PHP FastCGI Process Manager daemon ### END INIT INFO php_fpm_BIN=/opt/php-5.6.36/sbin/php-fpm php_fpm_CONF=/opt/php-5.6.36/etc/php-fpm.conf php_fpm_PID=/opt/php-5.6.36/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-5.6.36-fpm
insserv php-5.6.36-fpm
Zum Schluss PHP-FPM starten:
/etc/init.d/php-5.6.36-fpm start
Solange es keine Pools in /opt/php-5.6.36/etc/pool.d gibt, erhalten Sie diese Warnung, die Sie ignorieren können:
[email protected]:/usr/local/src/php5-build/php-5.6.36# /etc/init.d/php-5.6.36-fpm start
Starting php-fpm [29-Aug-2014 13:21:12] WARNING: Nothing matches the include pattern '/opt/php-5.6.36/etc/pool.d/*.conf' from /opt/php-5.6.36/etc/php-fpm.conf at line 528.
done
[email protected]:/usr/local/src/php5-build/php-5.6.36#
Um den Zend OPcache zu aktivieren, öffnen Sie /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... und am Ende folgende Zeile hinzufügen:
[...] zend_extension=opcache.so
Das war's - wenn Sie möchten, können Sie jetzt einige zusätzliche Module wie APCu, Memcache, Memcached und Ioncube installieren.
Die Module APCu, Memcache und Memcached können über PEAR installiert werden, das wir zuerst installieren und initialisieren müssen:
apt-get -y install php-pear
cd /opt/php-5.6.36/etc
pecl -C ./pear.conf update-channels
APCu kann nun wie folgt installiert werden:
pecl -C ./pear.conf install channel://pecl.php.net/apcu-4.0.6
Akzeptieren Sie alle Standardwerte. Öffnen Sie danach /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... und fügen Sie die Zeile extension=apcu.so am Ende der Datei hinzu (Sie können auch einige zusätzliche APCu-Einstellungen konfigurieren):
[...] extension=apcu.so apc.enabled=1 apc.shm_size=128M apc.ttl=0 apc.gc_ttl=600 apc.enable_cli=1 apc.mmap_file_mask=/tmp/apc.XXXXXX ;apc.mmap_file_mask=/dev/zero ;apc.shm_segments = 5
Die Memcache-Erweiterung kann wie folgt installiert werden:
pecl -C ./pear.conf install memcache
Öffnen Sie /opt/php-5.6.36/lib/php.ini...
vi /opt/php-5.6.36/lib/php.ini
... und fügen Sie am Ende der Datei die Zeile extension=memcache.so hinzu:
[...] extension=memcache.so
Anschließend PHP-FPM neu laden:
/etc/init.d/php-5.6.36-fpm reload
In ISPConfig 3.0.5 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 5.6.36) - diese PHP-Version wird unter diesem Namen in den Website-Einstellungen in ISPConfig aufgeführt:
Gehen Sie zur Registerkarte „PHP-FPM-Einstellungen“ (die Registerkarte „FastCGI-Einstellungen“ kann leer bleiben) und füllen Sie die Felder wie folgt aus: