[Tutorial] Wie mache ich meinen Raspberry Pi zum Webserver?

Post at — Apr 06, 2013

An dieser Stelle möchte ich einmal darstellen, wie man auf dem Raspberry Pi den Webserver Nginx installieren kann. Ich möchte hier noch einmal darauf Hinweisen, dass die Nutzung von Apache2 als Webserver auf dem Pi sehr starke Auslastung hervorruft. Nginx hat sich bisher als weniger ressourcenhungrig dargestellt. Man kann auch hier keine Wunder erwarten, aber für kleinere Projekte auf dem Pi zu nutzen reicht es allemal ;). Diese Tutorial ist wie folgt strukturiert: WebServer installieren -> Notwendige Gruppen und Benutzer anlegen/ prüfen -> Nginx Einrichten -> Verzeichnisse vorbereiten -> PHP installieren -> MySQL installieren -> phpMyAdmin installieren -> Kosmetisches

  1. Installation

Über apt-get installieren wir das Paket nginx. Es liefert die nötigen Webserver – Funktionalitäten-  
pi@raspberrypi~ $ sudo apt-get install nginx
  1. Prüfen eines Benutzers und der Gruppe

Der Webserver arbeitet in einem Verzeichnis, das i. d. R. einem bestimmten Benutzer zugeordnet ist. In der Regel handelt es sich dabei um die Gruppe mit dem Namen "www-data". Es kann wie folgt geprüft werden, ob diese Gruppe schon existiert.  
pi@raspberrypi~ $ groups  
pi adm dialout cdrom sudo audio www-data video plugdev games users netdev lpadmin input

In diesem Falle hat mein Pi diese Gruppe schon. Sollte sie dort nicht auftauchen, kann sie mit dem Befehl  
pi@raspberrypi~ $ sudo groupadd www-data

hinzugefügt werden. Anschließend sollte der Befehl  
pi@raspberrypi~ $ awk -F‘:‘ ‚{ print $1}‘ /etc/passwd

abgesetzt werden, da wir einen gleichnamigen Benutzer noch benötigen. Taucht dort kein "www-data" Benutzer auf, so muss dieser noch zur "www-data" – Gruppe hinzugefügt werden. Dies können wir mittels  
pi@raspberrypi~ $ sudo useradd www-data

sowie  
pi@raspberrypi~ $ sudo usermod -g www-data www-data

## getan werden. 3. Einrichten von Nginx

Zuerst testen wir einmal, ob wir den Server starten können, dies können wir mit Hilfe des "service" – Skripts tun  
pi@raspberrypi~ $ sudo service nginx start

Rufen wir die IP des Pi nun im Browser der Wahl auf, so sollte > Welcome to nginx!

uns präsentiert werden. Als nächstes Betrachten wir die Konfiguration von Nginx. Dies geht am besten mithilfe von Nano als Superuser  
pi@raspberrypi~ $ sudo nano /etc/nginx/nginx.conf

Die Konfiguration sieht zu Beginn wie folgt aus: > user www-data; worker\_processes 4; pid /var/run/nginx.pid; events { worker\_connections 768; # multi_accept on; }

An dieser Stelle ist jedoch ein bissjen Korrektur nötig – wir wollen den Pi ja etwas schonen. Hierfür modifizieren wir die Anzahl der Prozesse auf 2 und reduzieren die Verbindungen um die Hälfte auf 300. Das sollte erst einmal genügen. **Wichtig:** Nach Änderungen an der Konfiguration muss der Server neu gestartet werden. Das geht auch einfach mittels des "service" – Skripts  
pi@raspberrypi ~ $ sudo service nginx restart
  1. Einrichten des Verzeichnisses

Als nächstes wollen wir unser notwendiges Verzeichnis anlegen. Dieses lege ich unter /var/www/ an. Natürlich kann auch ein anderes Verzeichnis gewählt werden. Mittels  
pi@raspberrypi ~ $ sudo mkdir /var/www

wird das Verzeichnis angelegt, mittels  
pi@raspberrypi ~ $ sudo chown www-data:www-data /var/www/

setzen wir die Eigentumsverhältnisse auf unseren vorhin angelegten Benutzer. Als nächstes müssen wir Nginx erklären, wo sein Verzeichnis liegt. Nginx hat hierfür eine Steuerdatei, die im Unterverzeichnis "sites-enabled" liegt. Diese öffnen wir mittels  
pi@raspberrypi /var $ sudo nano /etc/nginx/sites-enabled/default

Diese Datei sollte zu Beginn wie folgt aussiehen (Ausschnitt) > server { #listen 80; ## listen for ipv4; this line is default and implied #listen :80 default_server ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.html index.htm; # Make site accessible from <http://localhost/> server\_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try\_files $uri $uri/ /index.html; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules }

## Hierbei entfernen wir das "#" &#8211; Zeichen vor "listen 80;". Außerdem ersetzen wir root /usr/share/nginx/www/ durch /var/www/. Anschließend wird der Server neu gestartet mittels des "service" Skripts. Außerdem sollte man hinter "index.htm" noch "index.php" anfügen, da wir später noch PHP zum Einsatz bringen werden. Falls gewünscht, kann man unterhalb von "server_name" noch ein "autoindex on" einfügen, welches es ermöglicht, dass man den Inhalt eines Verzeichnisses anzeigt, wenn kein "index." &#8211; Dokument vorhanden ist. 5. PHP

Viele Programme/ Serveranwendungen benötigen PHP. Dieses möchten wir natürlich auch benutzen. PHP installieren wir mittels einiger Pakete über die Paketverwaltung  
pi@raspberrypi/var $ sudo apt-get install php5-fpm php5-cgi php5-cli php5-common

Anschließend muss in der Nginx &#8211; Konfiguration noch eine Richtlinie für die Verarbeitung von *.php &#8211; Dateien integriert werden. An einer freien Stelle kann > location ~ .php$ { include fastcgi\_params; fastcgi\_intercept\_errors on; fastcgi\_pass 127.0.0.1:9000; }

## eingefügt werden. Anschließend muss der Server neu gestartet werden. Jetzt starten schon einmal PHP &#8211; Skripte. Jedoch die, die auf MySQL setzen, verusachen noch einen Fehler 500. Den möchten wir jetzt beheben. 6. MySQL

Mittels  
pi@raspberrypi /var $ sudo apt-get install mysql-server mysql-client php5-mysql

## installieren wir die nötigen MySQL &#8211; Pakete. Bei der Installation wird nach einem MySQL &#8211; Root Passwort gewählt. Ansonsten läuft die Installation automatisch. 7. PHPMyAdmin

PHPMyAdmin wird über die Paketverwaltung wie gewohnt installiert:  
pi@raspberrypi /var $ sudo apt-get install phpmyadmin

## [<img decoding="async" src="http://scribble.pf-control.de/blog/wp-content/uploads/2013/04/DB-150x150.png" alt="DB" />][2] Nach kurzer Zeit ist die Installation auch abgeschlossen. Sollte die Adresse /phpmyadmin/index.php nicht erreichbar sein, sollte folgender Inhalt angefügt werden: <http://www.howtoforge.com/running-phpmyadmin-on-nginx-lemp-on-debian-squeeze-ubuntu-11.04> (Abschnitt "&#8230; and add the following part to the server {} container:". Lediglich die Stelle mit =404 würde ich entfernen, da sonst eine nicht existente Datei gesucht wird, wenn sie nicht in /usr/share/ liegt. 8. Kosmetik

Wird eine Datei nicht gefunden, so wirft der Server eine ziemlich unschöne "Fehler 500" &#8211; Nachricht. Man kann dies ändern. Hierfür muss die Serverkonfiguration um > error_page 404 = 404.html;

erweitert (nach "root") und die Zeile mit "=404" erweitert werden > try_files $uri $uri/ /index.html =404;

## Sind weitere "error_page" &#8211; Anbgaben vorhanden, so werden diese auch verwendet. 10. Test

Um zu testen, ob das ganze auch erfolgreich ist, kann man mittels  
pi@localhost/var/www $ sudo nano ./index.php

Eine index.php mit folgendem Inhalt erzeugen 

erzeugt werden. Natürlich muss diese aufgrund der Rechteverhältnisse dem Bennutzer "www-data" übergeben werden. Dies geht mit  
pi@localhost/var/www $ sudo chown www-data ./index.php

Anschließend sollte eine sehr lange Seite mit technischen Informationen sichtbar werden:[<img decoding="async" src="http://phisco.rigel.uberspace.de/0fury/blog/wp-content/uploads/2013/04/phpinfo.png" alt="phpinfo" />][3] Das wars ;). Jetzt könnt Ihr den Pi als Webserver nutzen. Ich freue mich über Kommentare und Anregungen zu diesem Tutorial. **Wichtiger Hinweis (Vielen Dank an Rolfi für den Hinweis):** Die Beispielseite mit "phpinfo();" ist lediglich zum testen gedacht und dient zum einfachen Test, ob PHP auch funktioniert. Generell sollte man davon Abstand nehmen, den Raspberry Pi in einer produktiven Umgebung (ich meine damit Sachen wie eigene Internetauftritte, die von außen erreichbar sind) einzusetzen. Hierfür ist der Raspberry Pi doch zu schwach. Jedoch um darauf PHP &#8211; Programme, Skripte etc. testen und z. B. für eine Hausautomatisierung etc. zu nutzen, ist der Pi ideal. **Haftungsausschluss**: Ich übernehme keinerlei Haftung für Schäden, die durch Befolgung der Schritte dieses Beitrages auftreten können. Es können auch hier Fehler und Unstimmigkeiten auftreten, die Fehler veursachen können. Ich habe die Tutorials in der Regel so erstellt, wie ich es bei meinem System auch durchgeführt hatte. Eventuelle Probleme sind dabei je nach Konfiguration möglich. Fehler gefunden? Ich bin für einen Kommentar dankbar ;).