Der RaspberryPi als Webserver

Der RaspberryPi als Webserver

Jedes Linux-System ist grundsätzlich als Webserver geeignet. So gut wie alle Distributionen haben die dazu notwendige Software vorinstalliert oder bieten diese zur Nachinstallation an, also auch Raspian.

Ein Webserver liefert Webseiten im HTML-Format und weitere benötigte Dateien an Browser von Internetnutzern aus. Apache in der Version 2 hat sich als Quasi-Standardsoftware in diesem Bereich etabliert. Damit serverseitig kleine Programme, sogenannte Skripts, ausgeführt werden können, leistet PHP 5 gute Dienste, um die auszuliefernden Seiten und Dateien zu „berechnen“. In diesem Gespann wird meist noch zusätzlich mySQL als Datenbank-Server verwendet. Die Kombination aus Linux, Apache, MySQL und PHP wird oft unter der Kurzbezeichnung LAMP beschrieben.

Als produktiver Webserver ist ein Raspberry Pi, der zu Hause steht, wohl nicht geeignet. Sowohl die Performance des Kleinrechners als auch die geringe Bandbreite eines privaten ADSL-Anschlusses würden ein Website nur sehr langsam erreichbar machen. Auch aus Sicherheitsgründen, also der Gefahr vor unbefugtem Zugriff aus das System und damit das ganze Heimnetzwerk, ist dies nicht zu empfehlen. Aber hausintern als Testsystem bzw. für Experimente in diesem Bereich ist die folgende Konfiguration sehr gut geeignet.

ACHTUNG! Die hier ausgeführte Installation und Konfiguration wurde im März 2016 beschrieben und bezieht sich auf Raspian/Debian Jessie und darin enthaltenen Apache in der Version 2.4. Andere Beschreibungen, die Internet zu finden sind, beziehen sich auf ältere Versionen und stimmen in Bezug auf den sogenannten Document Root, sowie Benutzer und Dateirechte, nicht mit dieser neuen Umgebung überein!

Webserver Apache 2

Installieren

Ob man die folgenden Installationsschritte in einem Terminal-Fenster, auf einer Textkonsole oder per ssh durchführt, ist gleich.

Wie immer sollte man vor einer Installation die Paketübersicht updaten und danach ein Upgrade aller bereits installierter Pakete durchführen:

sudo apt-get update
sudo apt-get upgrade

Danach geht’s an die Installation von Apache 2.

sudo apt-get install apache2

Damit werde das Paket samt der notwendigen Zusatzpakete, ingesamt mehr als 5 MB, heruntergeladen und installiert. Als Abschluss wurde der Webserver auch gleich als automatisch zu startender Dienst registriert und auch gleich gestartet.

In einem Browser kann dies von einem beliebigen Rechner im selben Netzwerk aus gleich überprüft werden, allerdings muss man die IP-Adresse des Raspberry kennen:

Apache2_ItWorks

Wenn man direkt auf dem Raspberry einen Browser verwendet, so genügt die Adresse

http://localhost

Apache2_ItWorks_Epiphany

Auf jeden Fall sollte man beides gleich ausprobieren.

Der Document Root des Webservers

Um auch gleich einmal eine eigene HTML-Datei zu erstellen, müssen wir erst einmal wissen, wo sich die HTML-Dateien befinden müssen, damit sie der Webserver findet. Der sogenannte Dokument-Root ist ab Debian Jessie (Raspian ab Herbst 2015) der Ordner /var/www/html.

Wir wechseln dorthin auf der Konsole:

cd /var/www/html

Den Inhalt diese Ordners samt Zusatzinformationen lassen wir uns gleich anzeigen:

ls -all

Auf der Konsole sieht das dann so aus:

pi@raspi:/var/www/html $ ls -all
insgesamt 24
drwxr-xr-x 2 root root  4096 Mär 28 17:57 .
drwxr-xr-x 3 root root  4096 Mär 28 17:25 ..
-rw-r--r-- 1 root root 11104 Mär 28 17:25 index.html

Die Informationen sind für Linux-Neulinge nicht so leicht zu lesen. Beginnen wir mit der letzten Spalte, dort stehen die Dateinamen. index.html ist die angezeigte HTML-Seite. Bei der Datei . handelt es sich eigentlich um einen Ordner, nämlich um den aktuellen Ordner, in dem wir uns gerade befinden. Der Ordner .. bezieht sich auf den übergeordneten Ordner (in unserem Fall /var/www). Davor stehen Zeit und Datum der letzten Änderung der betreffenden Dateien bzw. Ordner. Die beiden Spalten davor geben an, dass die betreffenden Dateien/Ordner zur Benutzergruppe root gehören und der Benutzer root der Eigentümer dieser Dateien/Ordner ist. Die davor stehende Zahl gibt die Anzahl der enthaltenen Dateien an. Und die 10 Zeichen in der ersten Spalte geben Informationen über die Zugriffsrechte auf diese Dateien.
Für Leute, die mit Linux bisher wenig Erfahrung gesammelt haben ist der Umgang mit Benutzern, Gruppen und Dateirechten eine große Herausforderung. In diesem Zusammenhang kann ich nur auf andere Internet-Seiten verweisen, die dies ausführlich besprechen. Für uns ist herauszulesen, dass dieser Ordner samt der enthaltenen Dateien dem Administrator-Benutzer root und der Gruppe der Administratoren, ebenfalls root genannt, gehört.

Für die weiteren Schritte ist es hilfreich, wenn wir die Eigentümerschaft des Ordners /var/www/html und aller enthalten Dateien auf den Standard-Benutzer pi ändern, damit wir leichter mit den Dateien umgehen können, die Gruppenzugehörigkeit aber bei root belassen, damit der Webserver Apache darauf zugreifen kann.

sudo chown -R pi /var/www/html

Mit dem Befehl chown (Change Owner) kann der Eigentümer und die Gruppenzugehörigkeit geändert werden, wobei die Option -R (rekursiv) bedeutet, dass auch alle enthaltenen Ordner, Unterordner und Dateien von dieser Änderung betroffen sind.

Das Ergebnis mit ls -all betrachtet:

pi@raspiadvent:/var/www/html $ ls -all
insgesamt 24
drwxr-xr-x 2 pi   root  4096 Mär 28 17:57 .
drwxr-xr-x 3 root root  4096 Mär 28 17:25 ..
-rw-r--r-- 1 pi   root 11104 Mär 28 17:25 index.html

Bei der Wahl dieser Einstellungen zu den Dateirechten im Ordner /var/www/html wurde nicht auf Sicherheitsaspekte Rücksicht genommen sondern nur auf eine möglichst praktikable Lösung für den Anfänger geachtet. Auch das ist ein Grund dafür, den Raspberry Pi Webserver nicht übers Internet zugänglich zu machen!

Die erste eigene HTML-Datei

Nun endlich erstellen wir die neue HTML-Datei mit dem Nano-Editor.

nano versuch.html

Wir schreiben eine einfache HTML-Datei.

<html>
<head>
<title>Testseite</title>
</head>
<body>
<h1>Meine Testseite</h1>
<p>Ich hoffe, das klappt!!</p>
</body>
</html>

Mit Strg-X wird der Nano-Editor beenden, wobei man das Speichern mit J und dann noch den Dateinamen bestätigen muss.

Im Browser kann man mit der korrekten IP-Adresse und nach einem Slash angehängtem Dateinamen das Ergebnis betrachten, zB mit http://192.168.0.113/versuch.html.

Alle zu einer Website gehörigen Dateien und Ordner müssen in Zukunft in diesem Ordner, dem Document Root, abgelegt werden, also in /var/www/html.

Apache2_Testseite

Skriptsprache PHP 5

Auf den wenigsten Websites kommen heute statische HTML-Seiten zum Einsatz. Skriptsprachen wie PHP ergänzen Webserver um die Fähigkeit, auf Serverseite HTML-Seiten dynamisch zu berechnen, wobei auf Daten in Dateien oder Datenbanken zurückgegriffen werden kann.

Installation

Die folgende Zeile auf der Kommandozeile lädt und installiert die notwendigen Pakete.

sudo apt-get install php5 php5-common libapache2-mod-php5

Die erste PHP-Datei

Natürlich wollen wir die neuen Fähigkeiten auch testen und erstellen dazu im Ornder /var/www/html mit nano eine erste PHP-Datei.

nano phptest.php

Der einfache HMTL/PHP-Code:

<html>
<head>
<title>Erstes PHP</title>
</head>
<body>
<h1>Meine Erste PHP-Datei</h1>
<?php echo "<p>Hallo Welt!</p>"; ?>
</body>
</html>

Nach dem Speichern und Beenden lässt sich die HTML-Datei im Browser aufrufen unter http://ip-adresse/phptest.php

phptest

Spaß macht PHP aber erst, wenn manche Sachen automatisiert erledigt werden. Hier z.B. in einer kleine Schleife:

<html>
<head>
<title>Erstes PHP</title>
</head>
<body>
<h1>Meine Erste PHP-Datei</h1>
<?php

for ($i=0;$i<10;$i++)
{
    echo "<p>$i: Hallo Welt!</p>";
}

?>
</body>
</html>

phptest2

Umfangreiche Infos über die LAMP-Installation liefert eine PHP-Funktion namens phpinfo(), die man am besten in einer eigenen, einzeiligen PHP-Datei aufruft.

nano phpinfo.php
<?php phpinfo(); ?>

phpinfo

Datenbankserver mySQL

Jetzt zum dazugehörigen Datenbankserver mySQL.

Installation

sudo apt-get install mysql-server php5-mysql

Damit installieren wir den mySQL-Server und die PHP-Module zum Zugriff auf mySQL per PHP.

Während der Installation werden einige Eingaben erwartet. Der mySQL-Server hat seine eigene Benutzerverwaltung und verwendet dort einen Benutzer namens root, der als Datenbankadministrator dient. (Dieser Benutzer hat nichts mit dem Linux-Benutzer root zu tun!). Während der Installation werden wir nach einem Passwort für diesen Benutzer gefragt. Aus Gründen der Einfachheit habe ich hier das Passwort „raspberry“ gewählt, was aus Sicherheitsgründen aber keine gute Idee ist.

Wenn die Datenbankinstallation abgeschlossen ist, sollte man einen ersten Test durchführen. Auf der Kommandozeile ermöglich das Programm mysql den Datenbankzugriff.

mysql -uroot -praspberry

Damit wird mit der Option -u der Benutzer root und mit -p das Passwort raspberry für die Datenbankanwendung gestartet. Wenn das klappt, dann zeigt sich das mySQL-Prompt mysql> und wir versuchen eine erste SQL-Abfrage, um die Funktion zu testen:

mysql> show databases;

Als Ergebnis werden uns die derzeit vorhandenen Datenbanken aufgelistet:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

Mit exit wird der Datenbankzugriff beendet.

Webapplikation zur Datenbankverwaltung phpmyadmin

Zur Verwaltung des Datenbankserver mysql hat sich phpmyadmin als Standard etabliert. Es handelt sich dabei um eine Webapplikation, die direkt auf dem Webserver unter PHP läuft. Die Installation erfolgt durch:

sudo apt-get install phpmyadmin

Phpmyadmin erstellt sich einen eigenen Benutzer für seine Datenbank und fragt dazu um das zu wählende Passwort. Geht man ohne Eingabe weiter, wird eines automatisch erstellt. Da wir dieses nicht weiter benötigen, wird diese Möglichkeit empfohlen.

Danach fragt das Installationsprogramm um Erlaubnis, ob seine Konfigurationsdaten auch auf dem Datenbank-Server in einer eigenen Datenbank namens pma ablegen darf, was wir gewähren.

dbconfig-common

Dazu benötigt das Installationsprogramm das Passwort für den Datenbankadmin root, was wir oben mit „raspberry“ festgelegt haben, also muss dieses im Anschluss eingegeben werden.

Außerdem muss angegeben werden, welcher Webserver verwendet wird. Hier ist in unserem Fall apache2 auszuwählen.

mysql_webserver

Wenn man nach der Installation die Adresse http://ip-adresse/phpmyadmin in einen Browser eintippt, dann sollte sich diese Webapplikation melden.

http://192.168.0.111/phpmyadmin

phpmyadmin_login

Klappt die Anmeldung mit dem Datenbank-Benutzer root und dem dazugehörigen Passwort, so war die Installation erfolgreich.

Fazit

Auch wenn diese Installation aus Sicherheitsgründen und auf Grund der geringen Performance sicher keinen professionellen Webserver ersetzt, leistet diese LAMP-Installation zum Ausprobieren, Testen und Experimentieren gute Dienste.

Dieser Beitrag wurde unter Linux, Raspberry Pi, Webprogrammierung veröffentlicht. Setze ein Lesezeichen auf den Permalink.