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!):
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:
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:
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/
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
- Apache: http://httpd.apache.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
- phpMyAdmin: http://www.phpmyadmin.net/