LEMP-Stack: Nginx und PHP-FPM mit PHP 7 auf einem Ubuntu-Server installieren

LEMP-Stack: Nginx und PHP-FPM mit PHP 7 auf einem Ubuntu-Server installieren

Nginx in Kombination mit PHP und der MySQL-Datenbank bzw. dem performanteren Form MariaDB ist ein gängiger Stack für Webseiten und Anwendungen. Im neuen PHP 7 hat sich gegenüber dem Vorgänger 5.6 einiges getan, was sich bereits anhand der Versionsnummer vermuten lässt. Es macht daher Sinn, 7 statt 5.x zu verwenden, sofern möglich. Leider bietet Ubuntu dies noch nicht in ihren Paketquellen an, sodass wir hierfür auf eine Drittanbieter-Quelle zurückgreifen müssen. Dazu greifen wir auf das Repository von Ondřej Surý zurück, der auch für die Wartung der PHP-Paketquellen unter Debian zuständig ist.

PHP 7 installieren

Beginnen wir mit dem etwas aufwändigeren Teil. Zunächst muss die Paketquelle hinzugefügt werden:

sudo add-apt-repository ppa:ondrej/php

Wichtig ist hierbei, dass der System-Zeichensatz auf UTF-8 gesetzt ist. Ansonsten schlägt das Hinzufügen möglicherweise fehl, da der Name des Autors Sonderzeichen enthält. Dies kann mit dem Befehl locale geprüft werden:

daniel@server:~$ locale
LANG=de_DE.UTF-8

In diesem Beispiel ist alles in Ordnung. Wird hier jedoch ein anderer Zeichensatz als UTF-8 ausgegeben, muss dieser zunächst geändert werden:

sudo locale-gen "de_DE.UTF-8" && sudo sudo dpkg-reconfigure locales

Wurde die Paketquelle erfolgreich hinzugefügt, ist wie üblich deren Aktualisierung notwendig:

sudo apt-get update

Nun können wir die nötigen Pakete installieren:

sudo apt-get install php7.0 php7.0-fpm php7.0-mysql

php7.0 bringt die Laufzeitumgebung für PHP 7 mit, also sozusagen der Kern. Um PHP-FPM für Nginx nutzen zu können, wird php7.0-fpm benötigt. Um die MySQL-Erweiterung von PHP nutzen zu können, installieren wir schlussendlich noch php7.0-mysql.

Hat alles funktioniert, sollte der Befehl php -v uns die installierte Version zeigen, etwa:

daniel@server:~$ php -v
PHP 7.0.10-2+deb.sury.org~xenial+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.10-2+deb.sury.org~xenial+1, Copyright (c) 1999-2016, by Zend Technologies

PHP-FPM konfigurieren

Zunächst bearbeiten wir die global von allen PHP-FPM Instanzen genutzte php.ini im Pfad /etc/php/7.0/fpm/php.ini und fügen am besten an den Anfang folgende Zeile ein:

cgi.fix_pathinfo = 1

Standardmäßig nutzt PHP-FPM den Unix-Socket /run/php/php7.0-fpm.sock. Es ist eine gute Idee, Unix-Sockets statt TCP zu nutzen, da diese etwas weniger Overhead verursachen. Allerdings fehlen noch die nötigen Berechtigungen, damit PHP-FPM den Socket erstellen kann. Werden die Berechtigungen nicht in der Konfiguration geändert, läuft der zugreifende Prozess mit den Rechten von www-root:

sudo chown www-data:www-data /run/php/php7.0-fpm.sock && sudo service php7.0-fpm restart

Nginx installieren und konfigurieren

Der Nginx Webserver kann direkt über die Paketquellen von Ubuntu mit folgendem Befehl installiert werden:

sudo apt-get install nginx

Die Standard-Seite entfernen wir am besten direkt und erstellen mit einem Texteditor (nano, vi, usw) eine neue:

cd /etc/nginx/sites-enabled
rm default
nano test-page

Als minimale Test-Konfiguration kann folgender vHost eingefügt werden:

server {
listen 80;
root /var/www/html;
index index.php index.html;

location ~ \.php$ {
try_files $uri =404;
include fastcgi.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}

Die try_files Zeile ist aus Sicherheitsgründen notwendig, insbesondere wenn Datei-Uploads von Außen erlaubt sein sollten. Um das ganze zu testen, erzeugen wir eine Index-Datei, welche die Php-Info ausgibt:

sudo bash -c 'echo "<?php phpinfo();" > /var/www/html/2.php'

Rufen wir nun unseren Testserver (z.B. 192.168.178.10) im Browser per HTTP auf, sollte uns die Php-Info begrüßen:

Leave a Reply