Verwendung von PHP-FPM mit Apache unter Ubuntu 16.04 LTS

Dieses Tutorial zeigt, wie man einen Apache Webserver auf einem Ubuntu 16.04 Server mit PHP 7 (über PHP-FPM) und MySQL-Unterstützung installiert. PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe, insbesondere für geschäftigere Websites, nützlich sind.

1 Vorbemerkung

In diesem Tutorial werde ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100 verwenden. Diese Einstellungen können für Sie unterschiedlich sein, so dass Sie sie gegebenenfalls ersetzen müssen.

Ich führe alle Schritte in diesem Tutorial mit root-Rechten aus, also stellen Sie sicher, dass Sie als root angemeldet sind:

sudo su

2 Installation von MySQL oder MariaDB

Ubuntu bietet sowohl MySQL- als auch MariaDB-Pakete an. MariaDB ist eine MySQL-Gabel des ursprünglichen MySQL-Entwicklers Monty Widenius. Folgen Sie entweder Kapitel 2.1 oder 2.2, um den Datenbankserver zu installieren.

2.1 MySQL installieren 5.7

Zuerst installieren wir MySQL 5.7 wie folgt:

apt-get -y install mysql-server mysql-client

Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben – dieses Passwort gilt sowohl für den Benutzer root@localhost als auch für root@server1.example.com, so dass wir später kein MySQL-Root-Passwort manuell angeben müssen:

Neues Passwort für den MySQL „root“-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL „root“-Benutzer: <– yourrootsqlpassword

Führen Sie mysql_secure_installation aus, um die MySQL-Datenbank zu sichern und den Zugriff auf die Testdatenbank zu deaktivieren.

mysql_secure_installation

Diese Fragen werden Ihnen gestellt:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

2.2 MariaDB installieren

Führen Sie den folgenden Befehl aus, um MariaDB-Server und Client zu installieren:

apt-get -y install mariadb-server mariadb-client

Nun setzen wir ein Root-Passwort für MariaDB.

mysql_secure_installation

Diese Fragen werden Ihnen gestellt:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

3 Installation des Apache

Apache 2.4 ist als Ubuntu-Paket verfügbar. Wir benötigen das apache2-Paket, das wir so installieren können:

apt-get -y install apache2

Richten Sie nun Ihren Browser auf http://192.168.1.100, und Sie sollten die Apache Platzhalterseite sehen (Es funktioniert!):

Die Apache-Standardseite auf Ubuntu

Der Standard-Dokumentenstamm des Apache ist /var/wwww/html unter Ubuntu, und die Konfigurationsdatei ist /etc/apache2/apache2.conf. Zusätzliche Konfigurationen werden in Unterverzeichnissen des Verzeichnisses /etc/apache2 gespeichert, wie z.B. /etc/apache2/mods-enabled (für Apache-Module), /etc/apache2/sites-enabled (für virtuelle Hosts) und /etc/apache2/conf.d.

4 Installation von PHP 7

Wir können PHP 7 in Apache2 durch PHP-FPM und das mod_fastcgi-Modul von Apache, das wir wie folgt installieren, zum Laufen bringen:

apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0

PHP-FPM ist ein Daemon-Prozess (mit der Systemeinheit php7.0-fpm.service), der einen FastCGI-Server auf dem Socket /var/run/php/php/php7.0-fpm.sock betreibt.

Aktivieren Sie anschließend die folgenden Apache-Module…..

a2enmod actions fastcgi alias

…. und starten Sie den Apache neu:

systemctl restart apache2.service

5 Apache konfigurieren

Damit der Apache mit PHP-FPM funktioniert, benötigen wir die folgende Konfiguration:

        <IfModule mod_fastcgi.c>
                AddHandler php7-fcgi .php
                Action php7-fcgi /php7-fcgi
                Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
        </IfModule>

Sie können es in die globale Apache-Konfiguration einfügen (damit es für alle vhosts aktiviert ist), z.B. in /etc/apache2/conf.d/php7.0-fpm.conf (diese Datei existiert nicht, also müssen Sie sie erstellen), oder Sie können es in jeden Vhost platzieren, der PHP-FPM verwenden soll. Ich möchte PHP-FPM mit dem Standard-Vhost verwenden, also öffne ich seine vhost-Konfigurationsdatei /etc/apache2/sites-available/000-default.conf.

nano /etc/apache2/sites-available/000-default.conf

…. und setzen Sie den folgenden Abschnitt irgendwo zwischen <VirtualHost></VirtualHost> :

        <Directory /usr/lib/cgi-bin>
                Require all granted
        </Directory>
        <IfModule mod_fastcgi.c>
                SetHandler php7-fcgi .php
                Action php7-fcgi /php7-fcgi virtual
                Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
        </IfModule>

Starten Sie den Apache anschließend neu:

systemctl restart apache2.service

Erstellen Sie nun die folgende PHP-Datei im Dokumentenstamm /var/www:

nano /var/www/html/info.php
<?php
phpinfo();

Nun rufen wir diese Datei in einem Browser (z.B. http://192.168.1.100/info.php) auf:

PHP 7 funktioniert gut unter Ubuntu 16.04.

Wie Sie sehen, funktioniert PHP 7, und es arbeitet mit FPM/FastCGI, wie in der Server-API-Zeile dargestellt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die in PHP bereits aktiviert sind. MySQL ist dort nicht aufgeführt, was bedeutet, dass wir noch keine MySQL-Unterstützung in PHP haben.

Bitte beachten Sie: Wenn Sie das PHP 7 Apache-Modul (mod_php) installiert haben, kann dies z.B. passieren, wenn Sie mit einem LAMP-Server-Setup Ihres ISPs beginnen und nicht mit einem leeren Server, wie ich es in diesem Tutorial getan habe, dann müssen Sie möglicherweise mod_php wie unten gezeigt deaktivieren.

a2dismod php7.0

und starten Sie den Apache neu:

systemctl restart apache2.service

6 MySQL / MariaDB Unterstützung in PHP 7 erhalten

Um MySQL-Unterstützung in PHP zu erhalten, können wir das Paket php7.0-mysql installieren. Es ist eine gute Idee, einige andere PHP-Module zu installieren, da Sie diese für Ihre Anwendungen benötigen könnten. Sie können auf diese Weise nach verfügbaren PHP-Modulen suchen:

apt-cache search php7.0

Wählen Sie die gewünschten aus und installieren Sie sie so:

apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl

Laden Sie nun PHP-FPM neu:

systemctl reload php7.0-fpm.service

Laden Sie nun http://192.168.1.100/info.php in Ihrem Browser neu und scrollen Sie erneut nach unten zum Modulbereich. Sie sollten dort nun viele neue Module finden, darunter das MySQLi-Modul:

PHP 7 mit MySQL-Unterstützung

7 phpMyAdmin

phpMyAdmin ist eine Weboberfläche, mit der Sie Ihre MySQL-Datenbanken verwalten können. Es ist eine gute Idee, es zu installieren:

apt-get -y install phpmyadmin

Sie werden die folgenden Fragen sehen:

Web server to reconfigure automatically:<-- apache2 
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter

Danach können Sie auf phpMyAdmin zugreifen unter http://192.168.1.100/phpmyadmin/

PHPMyAdmin auf Ubuntu

8 Damit PHP-FPM eine TCP-Verbindung verwendet (optional)

HINWEIS: Dieses Kapitel zeigt die Konfiguration von PHP-FPM über TCP. Ich werde dies als Konfigurationsbeispiel zeigen und es könnte Setups geben, wo Sie dies benötigen, z.B. wenn der fastcgi-Prozess auf einem zweiten Server läuft, aber im Allgemeinen ist es schneller, Sockets zu verwenden. Daher sollten Sie dieses Kapitel vielleicht überspringen.

Standardmäßig lauscht PHP-FPM auf dem Socket /var/run/php/php/php7.0-fpm.sock. Es ist auch möglich, dass PHP-FPM eine TCP-Verbindung verwendet. Öffnen Sie dazu /etc/php5/fpm/pool.d/www.conf…

nano /etc/php/7.0/fpm/pool.d/www.conf

…. und lassen Sie die Hörleitung wie folgt aussehen:

[...]
;listen = /var/run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
[...]

Dadurch wird PHP-FPM auf Port 9000 auf der IP 127.0.0.0.0.1 (localhost) lauschen. Stellen Sie sicher, dass Sie einen Port verwenden, der auf Ihrem System nicht verwendet wird.

Laden Sie dann PHP-FPM neu:

systemctl reload php7.0-fpm.service

Als nächstes durchsuchen Sie Ihre Apache-Konfiguration und alle Ihre vhosts und ändern die Zeile FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php/php7.0-fpm.sock -pass-header Autorisierung auf FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.0.1:9000 -pass-header Autorisierung, z.B. so:

nano /etc/apache2/sites-available/000-default.conf
[...]
 <Directory /usr/lib/cgi-bin>
   Require all granted
 </Directory>

<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule> […]

Laden Sie schließlich den Apache neu:

systemctl reload apache2.service

9 Links

Das könnte dich auch interessieren …