Raspberry als Webserver

All die Daten, die so ein Raspberry erfassen kann, möchte man natürlich auch von anderer Stelle aus abrufen. Dazu eignet sich HTTP natürölich ideal und mit dem Linux-unterbau ist es auch schnell geschafft, einen WebServer zu installieren

WebServer installieren

Leider ist aber genau die offene Plattform wieder das Problem der Auswahl. Neben Apache gibt es noch einige andere HTTP-Server, die vielleicht sogar besser auf so ein Leichtgewicht wie den RasPi passen.

  • Apache
    Bekannt, groß aber vielleicht auch etwas zu umfangreich für eine kleine statische Webseite
  • LightHTTP
    Kleiner aber durchaus leistungsfähiger Webserver, der wohl auch von Wikipedia und YouTube genutzt wird
  • nginx
    Noch kein kleiner Webserver
  • Bottle.Py
    Das Bottle-Framework erlaubt in Python einfache Webdienste anzubieten, ohne gleich einen kompletten Webserver zu installieren
    http://bottlepy.org/docs/dev/

Das Ziel eines Webservers auf einer solch kleinen Plattform ist natürlich ein möglichst geringer und stabiler Speicherverbraucht. Wir haben keine Gigabyte RAM und keine echte Festplatte als Swap-Bereich. Auf der anderen Seite erwarten wird auf dem RaspberryPi natürlich auch keine unmenge an Requests. Auch sind Authentifizierung per LDAP/Kerberos weniger gefragt und selbst SSL kann man sich sparen, wenn die Daten einfach anonym abgefragt werden und unkritisch sind.

NGenix

Das "Apache" vielleicht zu groß und damit anfälliger und komplexer ist, habe ich zwischen LightHTTP und ngenx die Wahl gehabt. NGenX gibt es auch für Windows und insbesondere die ReverseProxy-Konfiguration kann mit da mal weiter helfen. Also habe ich mit für NGenX für RasPi entschieden, zumal hier auch viele Quellen vorhanden sind.

Die Installation ist wieder über APT-GET möglich:

sudo apt-get install nginx

APT-GET installiert die Pakete nginx, nginx-common und nginx-full, die in der Summer gerade mal 1Mbyte benötigen. Der Webserver ,muss dann nur noch gestartet werden

sudo /etc/init.d/nginx start

Per Browser sollte er die Seite anzeigen, die sich im Verzeichnis "/home/rpi/html" befindet. Die Konfiguration von NGNIX verteilt sich auf mehrere Dateien.

  • "/etc/nginx/nginx.conf"
    Diese globale Datei gibt allgemeine Werte vor, z.B. Logging und vor allem die Verweise auf andere CONF-Dateien
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
  • /etc/nginx/sites-available/default
    Diese Datei enthält z.B. die Konfiguration der "Default"-Webseite. Hier ist z.B. das Basisverzeichnis definiert
server {
    root /usr/share/nginx/www;
    index index.html index.htm;
    server_name localhost;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

Änderungen an der Konfiguration werden erst nach einem Restart des Webservers aktiv.

sudo /etc/init.d/nginx restart

Alternativ kann man ein "Reload-Signal" an den Webserver senden:

nginx -s reload

Als erstes bietet es sich an die Default Seite zu ändern

sudo nano /usr/share/nginx/www/index.html

PHP ?

Möchte man den Webserver nicht nur statische Inhalte ausliefern lassen, sondern z.B. auch PHP-Code ausführen, dann muss man zuerst PHP und einen "PHP-Server" (PHP-FPM) installieren.

sudo apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd

Und dann muss in der Konfiguration natürlich noch PHP aktiviert werden, d.h. damit ngenx weiß, wie er mit ".php"-Dateien umgehen soll:

location ~ \.php$ {
   try_files $uri =404;
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
   fastcgi_pass Unix:/var/run/php5-fpm.sock;
   fastcgi_index index.php;
   include fastcgi_params;
   }
# Zugriff auf .htaccess dateien verhindern
location ~ /\.ht {
   deny all;
}

Aktuell habe ich noch keine PHP-Seiten angelegt. Aber das kann ja noch kommen, z.B.: um die Daten der verschiedenen Sensoren auszulesen und als HTML, XML oder CSV-Datei auszuliefern.

Weitere Links