cmllr.eu

Pinguinhaltiges Geschwafel seit 2012.

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

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

  2. 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

  3. 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 "#" – 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." – 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 – Konfiguration noch eine Richtlinie für die Verarbeitung von *.php – 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 – 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 – Pakete. Bei der Installation wird nach einem MySQL – 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

    DB 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 "… 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" – 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" – 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:phpinfo 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 – 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 ;).