{"id":4668,"date":"2019-07-21T10:51:29","date_gmt":"2019-07-21T08:51:29","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=4668"},"modified":"2019-07-21T10:51:30","modified_gmt":"2019-07-21T08:51:30","slug":"lemp-stack-nginx-und-php-fpm-mit-php-7-auf-einem-ubuntu-server-installieren","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/lemp-stack-nginx-und-php-fpm-mit-php-7-auf-einem-ubuntu-server-installieren\/","title":{"rendered":"LEMP-Stack: Nginx und PHP-FPM mit PHP 7 auf einem Ubuntu-Server installieren"},"content":{"rendered":"<p>Nginx in Kombination mit PHP und der MySQL-Datenbank bzw. dem performanteren Form MariaDB ist ein g\u00e4ngiger Stack f\u00fcr Webseiten und Anwendungen. Im neuen PHP 7 hat sich gegen\u00fcber dem Vorg\u00e4nger 5.6 einiges getan, was sich bereits anhand der Versionsnummer vermuten l\u00e4sst. Es macht daher Sinn, 7 statt 5.x zu verwenden, sofern m\u00f6glich. Leider bietet Ubuntu dies noch nicht in ihren Paketquellen an, sodass wir hierf\u00fcr auf eine Drittanbieter-Quelle zur\u00fcckgreifen m\u00fcssen. Dazu greifen wir auf das Repository von&nbsp;Ond\u0159ej Sur\u00fd zur\u00fcck, der auch f\u00fcr die Wartung der PHP-Paketquellen unter Debian zust\u00e4ndig ist.<\/p>\n<h4><strong>PHP 7 installieren<\/strong><\/h4>\n<p>Beginnen wir mit dem etwas aufw\u00e4ndigeren Teil. Zun\u00e4chst muss die Paketquelle hinzugef\u00fcgt werden:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo add-apt-repository ppa:ondrej\/php\n<\/pre>\n<p>Wichtig ist hierbei, dass der System-Zeichensatz auf UTF-8 gesetzt ist. Ansonsten schl\u00e4gt das Hinzuf\u00fcgen m\u00f6glicherweise fehl, da der Name des Autors Sonderzeichen enth\u00e4lt. Dies kann mit dem Befehl <code class=\"\" data-line=\"\">locale<\/code> gepr\u00fcft werden:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ndaniel@server:~$ locale\nLANG=de_DE.UTF-8\n<\/pre>\n<p>In diesem Beispiel ist alles in Ordnung. Wird hier jedoch ein anderer Zeichensatz als UTF-8 ausgegeben, muss dieser zun\u00e4chst ge\u00e4ndert werden:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo locale-gen &quot;de_DE.UTF-8&quot; &amp;amp;amp;&amp;amp;amp; sudo sudo dpkg-reconfigure locales\n<\/pre>\n<p>Wurde die Paketquelle erfolgreich hinzugef\u00fcgt, ist wie \u00fcblich deren Aktualisierung notwendig:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo apt-get update\n<\/pre>\n<p>Nun k\u00f6nnen wir die n\u00f6tigen Pakete installieren:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo apt-get install php7.0 php7.0-fpm php7.0-mysql\n<\/pre>\n<p><code class=\"\" data-line=\"\">php7.0<\/code> bringt die Laufzeitumgebung f\u00fcr PHP 7 mit, also sozusagen der <em>Kern<\/em>. Um PHP-FPM f\u00fcr Nginx nutzen zu k\u00f6nnen, wird <code class=\"\" data-line=\"\">php7.0-fpm<\/code> ben\u00f6tigt. Um die MySQL-Erweiterung von PHP nutzen zu k\u00f6nnen, installieren wir schlussendlich noch <code class=\"\" data-line=\"\">php7.0-mysql<\/code>.<\/p>\n<p>Hat alles funktioniert, sollte der Befehl <code class=\"\" data-line=\"\">php -v<\/code> uns die installierte Version zeigen, etwa:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ndaniel@server:~$ php -v\nPHP 7.0.10-2+deb.sury.org~xenial+1 (cli) ( NTS )\nCopyright (c) 1997-2016 The PHP Group\nZend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies\nwith Zend OPcache v7.0.10-2+deb.sury.org~xenial+1, Copyright (c) 1999-2016, by Zend Technologies\n<\/pre>\n<h4 style=\"font-weight: bold;\">PHP-FPM konfigurieren<\/h4>\n<p>Zun\u00e4chst bearbeiten wir die global von allen PHP-FPM Instanzen genutzte php.ini im Pfad <code class=\"\" data-line=\"\">\/etc\/php\/7.0\/fpm\/php.ini<\/code> und f\u00fcgen am besten an den Anfang folgende Zeile ein:<\/p>\n<p><code class=\"\" data-line=\"\">cgi.fix_pathinfo = 1<\/code><\/p>\n<p>Standardm\u00e4\u00dfig nutzt PHP-FPM den Unix-Socket <code class=\"\" data-line=\"\">\/run\/php\/php7.0-fpm.sock<\/code>. Es ist eine gute Idee, Unix-Sockets statt TCP zu nutzen, da diese etwas weniger Overhead verursachen. Allerdings fehlen noch die n\u00f6tigen Berechtigungen, damit PHP-FPM den Socket erstellen kann. Werden die Berechtigungen nicht in der Konfiguration ge\u00e4ndert, l\u00e4uft der zugreifende Prozess mit den Rechten von <em>www-root<\/em>:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo chown www-data:www-data \/run\/php\/php7.0-fpm.sock &amp;amp;amp;&amp;amp;amp; sudo service php7.0-fpm restart\n<\/pre>\n<h4 style=\"font-weight: bold;\">Nginx installieren und konfigurieren<\/h4>\n<p>Der Nginx Webserver kann direkt \u00fcber die Paketquellen von Ubuntu mit folgendem Befehl installiert werden:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo apt-get install nginx\n<\/pre>\n<p>Die Standard-Seite entfernen wir am besten direkt und erstellen mit einem Texteditor (nano, vi, usw) eine neue:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ncd \/etc\/nginx\/sites-enabled\nrm default\nnano test-page\n<\/pre>\n<p>Als minimale Test-Konfiguration kann folgender vHost eingef\u00fcgt werden:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nserver {\nlisten 80;\nroot \/var\/www\/html;\nindex index.php index.html;\n\nlocation ~ \\.php$ {\ntry_files $uri =404;\ninclude fastcgi.conf;\nfastcgi_pass unix:\/run\/php\/php7.0-fpm.sock;\n}\n}\n<\/pre>\n<p>Die <code class=\"\" data-line=\"\">try_files<\/code> Zeile ist aus Sicherheitsgr\u00fcnden notwendig, insbesondere wenn Datei-Uploads von Au\u00dfen erlaubt sein sollten. Um das ganze zu testen, erzeugen wir eine Index-Datei, welche die Php-Info ausgibt:<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nsudo bash -c 'echo &quot;&amp;amp;lt;?php phpinfo();&quot; &amp;amp;gt; \/var\/www\/html\/2.php'\n<\/pre>\n<p>Rufen wir nun unseren Testserver (z.B. 192.168.178.10) im Browser per HTTP auf, sollte uns die Php-Info begr\u00fc\u00dfen:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/u-img.net\/img\/6613Af.png\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nginx in Kombination mit PHP und der MySQL-Datenbank bzw. dem performanteren Form MariaDB ist ein g\u00e4ngiger Stack f\u00fcr Webseiten und Anwendungen. Im neuen PHP 7 hat sich gegen\u00fcber dem Vorg\u00e4nger 5.6 einiges getan, was sich bereits anhand der Versionsnummer vermuten l\u00e4sst. Es macht daher Sinn, 7 statt 5.x zu verwenden, sofern m\u00f6glich. Leider bietet Ubuntu &#8230;<\/p>\n","protected":false},"author":5,"featured_media":6180,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[541,55,542],"class_list":["post-4668","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-softwareentwicklung","tag-nginx","tag-php","tag-php7"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4668","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=4668"}],"version-history":[{"count":11,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4668\/revisions"}],"predecessor-version":[{"id":6215,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/4668\/revisions\/6215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/6180"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=4668"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=4668"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=4668"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}