Raspberry Pi: Nginx und PHP installieren und einrichten
Einige Projekte für den Raspberry Pi benötigen einen Webserver auf dem beispielsweise Software wie Owncloud oder WordPress installiert werden kann. Als Webserver für den Raspberry Pi kommen Apache oder Nginx in Frage. Nginx wird die bessere Performance für leistungsschwache Hardware nachgesagt, weshalb ich mich für diesen Server entschieden habe.
Die Diskussion welcher Server besser für den Raspberry Pi geeignet ist, kann hier und hier nachgelesen werden. Da meine Projekte weder viele Nutzer noch eine große Anzahl an Anfragen produzieren werden, dürfte es letztendlich egal sein. Diese Anleitung erklärt die Installation von Nginx und PHP auf dem Raspberry Pi.
Raspberry Pi: Nginx und PHP installieren und einrichten
Wie bei allen Anleitungen gilt auch hier, ihr müsst keine Profis sein, nur den Willen zu haben und etwas zu recherchieren, falls es bei euch klemmt. Ansonsten genügt das Befolgen der hier genannten Schritte. Zur Durchführung wir eine lauffähige Distribution wie Raspbian erwartet. Anleitungen dazu finden sich hier:
Zudem kann auf Wunsch die Installation von Nginx ganz bequem via SSH per Kommandozeile vorgenommen werden. Wie man mit dem Raspberry Pi eine SSH-Verbindung aufbauen kann, erklärt der Beitrag.
Raspbian upgraden
Vor der Installation von Nginx auf dem Raspberry Pi werden alle Pakete des Betriebssystems auf den aktuellen Stand gebracht. Das erfolgt mit folgendem Befehl über den Terminal:
sudo apt-get update sudo apt-get dist-upgrade sudo apt-get upgrade
PHP 7.0 auf dem Raspberry Pi installieren
Raspbian basiert auf Debian Jessie und wird mit PHP 5.6 ausgeliefert. Das ist soweit auch gut aber zwischenzeitlich ist mit PHP 7.0 eine bessere Option auf dem Markt. PHP 7.0 wurde im Dezember 2015 vorgestellt und bringt erhebliche Verbesserungen in den Bereichen Leistung, Sprache und nutzt dabei deutlich weniger Speicher. Optimal für den Raspberry Pi.
Damit PHP 7.0 auf dem Raspberry Pi installiert werden kann, wird Zugriff auf die Entwicklerversion von Raspbian benötigt. Diese trägt den Codename stretch. Dazu ist die Datei sources.list abzuändern welche von Aptitude (apt-get) genutzt wird.
sudo nano /etc/apt/sources.list
Unter der ersten Zeile die das Wort jessie enthält, ist folgende Zeile einzufügen:
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
Gespeichert wird mit Strg + X, Y und dann Enter drücken.
Damit würden alle Installationen und Updates automatisch die neusten verfügbaren Dateien aus dem stretch Release ziehen. Diese sind jedoch nicht immer 100 Prozent stabil. Damit zukünftig keine instabilen Pakete installiert werden, werden automatisch alle Pakete gezwungen, das jessie Release mit einer höheren Priorität zu wählen.
sudo nano /etc/apt/preferences
Hier ist folgendes einzufügen:
Package: * Pin: release n=jessie Pin-Priority: 600
Gespeichert wird mit Strg + X, Y und dann Enter drücken.
Anschließend werden die Updates noch einmal ausgeführt mit:
sudo apt-get update
Jetzt erfolgt die Installation von PHP 7.0 auf dem Raspberry Pi aus dem stretch Release inklusive aller PHP-Pakete.
sudo apt-get install -t stretch php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache php7.0-mbstring php7.0-xml php7.0-zip
Mit nachfolgendem Befehl lässt sich die Funktion von PHP testen:
php -v
Anschließend sollte folgende oder ähnliche Ausgabe erscheinen:
PHP 7.0.7-4 (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.6-dev, Copyright (c) 1999-2016, by Zend Technologies
Fertig. PHP 7.0 wurde erfolgreich auf dem Raspberry Pi installiert.
Nginx auf dem Raspberry Pi installieren
Wie bei PHP 7.0 gibt es im stretch Release eine neue und verbesserte Version mit der Nummer 1.9. Diese wird wie folgt installiert:
sudo apt-get install -t stretch nginx
Nginx auf dem Raspberry Pi starten
Mit folgende Befehl wird Nginx gestartet:
sudo /etc/init.d/nginx start
An dieser Stelle empfiehlt es sich kurz zu testen, ob die Installation von Nginx auf dem Raspberry Pi erfolgreich war. Nginx erstellt eine HTML Datei in Web-Ordner. Diese default Webseite lässt sich wie folgt aufrufen:
Über den Browser des Raspberry Pis:
http://localhost/
Über einen Computer im Netzwerk. Dazu benötigt ihr die IP-Adresse eures Raspberry Pis. Wenn ihr diese nicht kennt, zeigt folgende Befehl euch diese an:
hostname -I
Über einen beliebigen Computer im Netzwerk könnt ihr die Webseite dann unter der IP aufrufen. Beispielsweise:
http://192.168.1.10
Wenn ihr das nachfolgende Bild sieht, wart ihr bis hier erfolgreich. Einige weitere Schritte sind für die abschließende Installation von Nginx auf dem Raspberry Pi notwendig.
Nginx auf dem Raspberry Pi konfigurieren
Die Standardwebseite liegt im Verzeichnis /usr/share/nginx/www unter Raspbian. Die index.html kann von euch beliebig angepasst, gelöscht oder durch eine andere ersetzt werden. Das Standardverzeichnis wird über eine Datei in /etc/nginx/sites-available festgelegt. In dieser Datei befindet sich eine Zeile die mit root beginnt. Hier kann das Verzeichnis beliebig angepasst werden.
Nginx liefert eine default Datei für die Konfiguration mit. Da wir diese modifizieren, empfiehlt es sich davon eine Sicherungskopie zu erstellen. Es wird eine Kopie von default mit dem Namen default-do-not-touch angelegt:
cd /etc/nginx/sites-available sudo cp default default-do-not-touch cd
Weitere Informationen zum Kopieren unter Linux erklärt der verlinkte Beitrag.
Im nächsten Schritt ist PHP für Nginx zu aktivieren:
sudo nano /etc/nginx/sites-available/default
Dort ist folgende Zeile zu suchen:
index index.html index.htm;
Bei mir war diese bei Zeile 39. Um zu sehen in welcher Zeile der Cursor sich befindet, einfach Strg + C drücken. In die oben genannte Zeile muss noch ein index.php eingefügt werden, so dass die Zeile anschließend wie folgt aussieht:
index index.php index.html index.htm;
Zusätzlich ist noch etwas weiter unten in der default Datei weitere Zeilen anzupassen. Scrollt etwas runter bis ihr folgenden Abschnitt findet:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php5-fpm.sock; #}
Durch das Entfernen des # werden diese Zeilen aktiviert. Das ist für drei Zeilen vorzunehmen. Zusätzlich müssen noch einige Zeilen eingefügt werden, diese sind fett markiert.
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi.conf; }
Ebenso muss der Verweis auf php5 auf die Version php7.0 aus dem stretch-Release abgeändert werden. Siehe fett gedruckte Zeile.
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; include fastcgi.conf; }
Gespeichert wird mit Strg + X, Y und dann Enter drücken. Abschließend muss die Konfigurationsdatei neu geladen werden:
sudo /etc/init.d/nginx restart sudo /etc/init.d/php7.0-fpm restart
Jetzt läuft auf dem Raspberry Pi unter Raspbian ein Nginx Server zusammen mit PHP 7.0. Viel Spaß.
Teste PHP auf dem Nginx Server
Bevor mit weiteren Projekten fortgefahren wird, ist zu testen ob PHP unter Nginx auf dem Raspberry Pi läuft. Dazu wird eine index.php im Webverzeichnis erstellt:
cd /var/www/html sudo nano index.php
In die neue Datei ist folgende Zeile einzufügen:
<?php echo phpinfo(); ?>
Gespeichert wird mit Strg + X, Y und dann Enter drücken. Jetzt den Browser unter localhost auf dem Raspberry Pi oder der IP auf einem externen Computer neu laden. Jetzt sollten die Versionsinformationen zu PHP erscheinen.
Persönliche Meinung
Nach der Installation von Nginx auf dem Raspberry Pi zusammen mit PHP lassen sich zahlreiche Projekte wie beispielsweise Owncloud auf dem Raspberry Pi realisieren. Damit lässt sich mit minimalem Aufwand eine Alternative zu Dropbox für Zuhause und unterwegs aufbauen.
Geek, Blogger, Consultant & Reisender. Auf seiner Detail-Seite findest du weitere Informationen über Benjamin. In seiner Freizeit schreibt Benjamin bevorzugt über Technik-Themen. Neben Anleitungen und How-To’s interessieren Benjamin auch Nachrichten zur IT-Sicherheit. Sollte die Technik nicht im Vordergrund stehen, geht Benjamin gerne wandern.
Sehr gute verständliche und ausführliche Anleitung. Klasse.
Hat alles sehr gut geklappt – bis aufs Finale. Nachdem alles fertig war und alle Zwischenschritte funktionierten kam zum Schluss kam 502 Bad Gateway nginx/1.10.1
Und dieses Problem bekomme ich trotz I*net Recherchen leider nicht weg.
Habe leider dasselbe Problem. Bis zuletzt eine tolle Anleitung, aber was mache ich jetzt?
Hatte das selbe Problem auch gerade. Schaut mal in der /etc/init.d/sites-available/default ob Ihr den Pfad zum PHP7.0 Sock richtig angegeben habt. Die Zeile sollte wie folgt lauten:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
Danke für Deine Hilfe, Jason. Leider ist in /etc/init.d/ kein sites-available Ordner.
Hups, mein Fehler. Gemeint war /etc/nginx/sites-available/default
Danke nochmal, es war tatsächlich der falsche Pfad eingetragen. Der ist nun korrigiert, hat aber leider keine Besserung ergeben.
Die von Technik-Salamander angesprochene I-Netrecherchen haben auch bei mir nicht gefruchtet, weil ich die entsprechenden Ordner, bzw. Dateien so nicht habe.
Welche Linux-Distribution verwendest du denn? Ansonsten versuch es doch nochmal mit apt-get install php7.0 – Ich könnte mir gerne auch mal deine default-Datei anschauen, dazu müsstest du diese irgendwo hochladen. Im schlimmsten Fall wirst du den Raspberry Pi nochmal neu aufsetzen müssen. Ich verwende den Raspberry Pi Version 3 Model B mit Raspbian Jessie 4.4, vielleicht hilft das ja 🙂
Super Anleitung! Bei mir hat das problemlos funktioniert…
Top, danke läuft!
Pingback: Raspberry Pi: Owncloud Server installieren und einrichten – random brick [DE]
Hallo, hab mir nach der Anleitung nginx installiert. Ich bekomme jedoch auch einen Bad Gateway. Nun würde ich ungern wieder bei Null anfangen, ich sitze schon seit Tagen an der Installation um owncloud zum fehlerfreien laufen zu bekommen. Bisher vergeblich.
Vielleicht kannst mir bei dem 502 Fehler helfen? Wie gesagt, genau nach Anleitung.
Danke.
hatte auch bad gateway der fehler bei mir war in der
fastcgi_pass unix:/var/run/php7.0-fpm.sock;
ein php zu wenig.
Richtig:
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
das wars bei mir leider nicht, es war ein fehlender zusätzlicher ServerName. Nun funktioniert es. ;-)))
Hallo und vielen Dank für das gute und aktuelle Tutorial.
Aber am Schluss scheitert es auch bei mir. Zunächst musste ich ein /php zwischen schieben. Nachdem ich dann die /var/www/html/index.nging-debian.html weggeschoben habe und nur noch die index.php drin liegt, bekomme ich die Meldung 403 Forbidden.
Mein Ziel ist, auf dem RasPi3 eine SeafileCloud zu installieren.
Bei mir war auch der fehler.
folgendes hat mir geholfen:
in der datei: „/etc/nginx/sites-available/default“
1. den pfad angepasst „fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;“
2.hinter „server_name“ noch die ip vom raspberry eingefügt „XXX.XXX.XXX.XX;“
Bei mir war der root Pfad falsch
#root /var/www/html;
root /usr/share/nginx/html;
Danke für die Anleitung
Paddy
Hallo zusammen,
bekomme leider den Fehler:
Sub process /usr/bin/dpkg returned an error code (1)
Paket nginx-full ist noch nicht konfiguriert
Wie kann ich diesen beheben?
Hallo,
tolle Schritt für Schritt Anleitung. Vorher habe ich zwei andere ausprobiert. Mein Ziel ist die Installation von Tiny Tiny RSS auf einem Raspberry Pi 3.
Das erste Tutorial, dass ich für die gesamte Installation verwendet habe, war richtig gut geschrieben und hat auch Sicherheitsaspekte für MySQL und HTTPS Zugriff berücksichtigt. Ich habe es damit aber nicht hinbekommen und nach Rücksprache mit dem Blog Betreiber erfuhr ich, dass das Tutorial für bereits erfahrene Leser gedacht ist. Wobei da die geforderten Erfahrungen liegen kann ich mir in etwa vorstellen, nachdem ich dieses Tutorial durchgearbeitet habe. Es ist mein erstes Projekt mit einem Raspi und ich verstehe, dass man auch Erfahrungen mit den Tutorials sammeln muss. Wobei ich sagen muss, dass ich es total gut finde, das es auch Leute gibt, die Tutorials für Fortgeschrittene anbieten.
Das zweite verwendete Tutorial war auch nicht schlecht, aber lange nicht so gut wie das zuerst ausprobierte. Das lag aber vermutlich auch daran, dass es bereits aus dem Jahr 2012 war. Es hat teilweise nicht mehr funktioniert und ich habe versucht die entsprechenden Stellen mit dem ersten Tutorial auszugleichen. Das hat aber aufgrund meiner fehlenden Linux Kenntnisse auch nicht funktioniert.
Das hier vorliegende Tutorial bearbeitet nun zunächst „nur“ die Installation des Webservers und von PHP. Aber was soll ich sagen? Es hat auf Anhieb funktioniert, dass ich zunächst die Test HTML Seite erreichte und dann auch die PHP Seite. So weit bin ich vorher gar nicht gekommen, weil ich nicht verstanden hatte, wie die Skripte funktionieren. Vor allem dieser Part hat mir hier sehr gut gefallen. Insgesamt ist das Tutorial sehr gut geschrieben, auch für den Laien.
Ich habe viel gelernt. Wie gesagt, vor allem auch über die Konfigurations Dateien. Danke dafür 🙂
Zwenn
PS: Alle von Euch, die z.B. die genannten Befehle abtippen … Das könnt ihr Euch einfacher machen. Kopiert die Zeilen, die Ihr als Befehl auf der Konsole braucht (ich verwende PuTTY unter Windows 10) oder als ergänzende Zeile für ein Skript oder ein ganzes Skript. Einfügen könnt Ihr den kopierten Teil dann einfach mit der rechten Maustaste auf dem Konsolenfenster von PuTTY. In Skripten müsst Ihr zuzvor den grünen Klotz Cursor mit der den Pfeiltasten an die richtige Stelle bewegen und ggf. eine Leerzeile mit Enter einfügen.
Ich hatte vorher schon NginX auf einem anderen System im Betrieb. Gehe ich nach deiner Anleitung vor bzw. nehme die Config / ändere sie ab dann läuft er nicht. Ihr / Du könnt gern meine nehmen, ist auch ein wenig erweitert und getweakt und leif vorher bei mir auf einem anderen System. Mfg
server {
listen 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default ipv6only=on; ## listen for ipv6
access_log off;
root /var/www;
index index.php index.html index.htm;
# Make site accessible from http://localhost/
server_name debian;
location ~* \.html$ {
expires -1;
}
#location ~* \.(css|js|gif|jpe?g|png)$ {
# expires 168h;
# add_header Pragma public;
# add_header Cache-Control „public, must-revalidate, proxy-revalidate“;
#}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 30d;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ /index.html;
}
location /doc {
root /usr/share;
autoindex on;
allow 127.0.0.1;
deny all;
}
location /images {
root /usr/share;
autoindex off;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
location ~ /.ht {
deny all;
}
}
Gute Anleitung so weit. Hat bei mir auch geklappt, konnte somit mit dem Pi3 meinen TV Sender wechseln.
Jetzt versuche ich Alexa (Echo dot) mit dem Pi3 zu verwenden (http://blog.gaiterjones.com/amazon-alexa-php-hello-world-example/).
Leider ist hierfür SSL erforderlich und das scheint weitaus schwieriger.
Wie würde eine minimal Anleitung, ähnlich wie diese (https://www.randombrick.de/raspberry-pi-owncloud-server-inst) für ein Alexa Skill Endnode aussehen?
Nach zick fehl versuchen mit Projekten wie mit dem Banana Pi R1 und Nextcloud etc war ich nun wahrlich glücklich das solch ein Anleitung mit Step by Step so reibungslos geklappt hat – Danke aus Herzen