Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberrypi:raspberry_pi_lighttpd_webserver

Raspberry Pi Lighttpd Webserver

Ein Webserver ermöglicht es, verschiedene Inhalte im Internet anderen Nutzern zur Verfügung zu stellen. Egal ob du einen Blog, ein Forum oder einen Shop erstellt möchtest, für die Realisierung benötigst du einen Webserver. Bei der Auswahl eines Webservers stehen mehrere zur Verfügung. Die gängigsten sind Apache und NginX (Engine X ausgesprochen). Wir hingegen beschränken uns aber in diesem Artikel auf den Webserver Lighttpd (ausgesprochen: Lighty). Zwar ist dieser Webserver nicht so oft im WWW vertreten aber er macht auf dem Raspberry Pi am ehesten Sinn. Das liegt in erster Linie daran, weil Lighttpd sehr wenig Ressourcen im Vergleich zu anderen Webservern verbraucht. Beim Raspberry Pi, der ohnehin schon nicht so stark auf der Brust ist, dürfte dieser Faktor einer der Wichtigsten sein. Zudem ist der Webserver nicht überladen und recht einfach für Anfänger zu konfigurieren. Wenn du schon mal einen NginX oder Apache Webserver konfiguriert hast, weist du wovon ich spreche.

Nachfolgend ein Diagramm, welches die Marktanteile an Webservern darstellt (Stand: März 2017)

Es gibt natürlich noch andere Alternativen wie:

  • Gunicorn - ein in Python geschriebener WSGI HTTP Server
  • Hiawatha - ein schlanker Webserver
  • Instant Webserver - verschiedene einfache Webserver zu Testzwecken und zum Datenaustausc
  • XAMPP - Webserver-Testumgebung, nicht für einen öffentlichen Webserver geeignet.

Einrichtung des Webservers Lighttpd

Um einen Webserver zu betreiben solltest du ein DynDNS eingerichtet und die Portweiterleitung im Router auf 80 gesetzt haben, insofern die Webseite auch außerhalb des lokalen Netzwerks erreichbar sein soll! Möchtest du auch SSL nutzen, ist zusätzlich noch der Port 443 zu öffnen.

Zuerst einmal aktualisierst du wie gewohnt das System:

sudo apt-get update && sudo apt-get upgrade

und anschließend installierst du den Webserver:

sudo apt-get install lighttpd

Um den Webserver zu testen, gibst du im Browser einfach die IP-Adresse des Raspberry Pi's ein. Anschließend solltest du eine Testseite vom Lighttpd Server sehen können.

Die Dateien für die Webseite werden in den Ordner /var/www/html/ gelegt.

PHP installieren

Damit PHP Seiten richtig verarbeitet werden können, musst du zuerst einmal PHP installieren:

sudo apt-get install php7.0 php7.0-cgi

Danach aktivierst du das FastCGI-Modul, sowie das FastCGI-PHP-Modul:

sudo lighty-enable-mod fastcgi && sudo lighty-enable-mod fastcgi-php

Nach den Änderungen startest du den Server neu:

sudo service lighttpd restart

Um zu testen, ob PHP funktioniert, erstellst du eine neue Datei mit dem Namen phpinfo.php im Ordner /var/www/html/

sudo nano /var/www/html/phpinfo.php

Mit folgendem Inhalt:

<?php  
phpinfo();  
?>

</pre>

Speichere den Inhalt der Datei mit STRG + O und Enter und beende Nano mit STRG + X. Öffne die Datei im Browser über die Adresse http://ip-adresse-des-pi/phpinfo.php.

SSL Zertifikat erstellen

SSL-Zertifikate werden benutzt, um eine Verbindung zwischen dem Benutzer und der Webseite zu verschlüsseln. Das macht insbesondere Sinn, wenn sensible Daten zwischen Server und Client ausgetauscht werden. Dies können zum Bespiel Bankdaten, Adressen und Passwörter sein.

Um ein Zertifikat zu konfigurieren muss zunächst Eines erstellt werden. Wie das funktioniert, erfährst du im Artikel SSL Zertifikat via Certbot.

Anschließend fügst du die zwei erstellten Zertifikate zu einem zusammen:

cat /etc/letsencrypt/live/meineseite.ddns.net/cert.pem /etc/letsencrypt/live/meineseite.ddns.net/privkey.pem > /etc/letsencrypt/live/meineseite.ddns.net/combined.pem

Sollte dabei der Fehler „Keine Berechtigung“ ausgegeben werden, musst du dich als root einloggen. Anders konnte ich das Problem nicht beheben. Sollte dies der Fall sein musst du, falls noch nicht passiert den Root Zugang mit einem Passwort versehen und dich als root einloggen.

sudo passwd
su
cat /etc/letsencrypt/live/meineseite.ddns.net/cert.pem /etc/letsencrypt/live/meineseite.ddns.net/privkey.pem > /etc/letsencrypt/live/meineseite.ddns.net/combined.pem
su normaler_user_den_du_sonst_nutzt

Das Zertifikat ist nun fertig und kann im nächsten Schritt in der Konfiguration des Vhosts eingebunden werden.

Lighttpd VHost anlegen

Es ist nicht zwingend nötig einen Vhost anzulegen. Ich finde es aber von der Übersicht her besser, die Konfigurationen in eigene VHost Konfigurationen zu schreiben. Spätestens, wenn du ein zweites Projekt realisieren möchtest, kommst du an einem VHost ohnehin nicht vorbei. Deshalb zeige ich hier direkt die Konfiguration über die Vhost Konfigurationsdatei und nicht über die Lighttpd Konfiguration, den im Grunde könntest du auch dort die Einstellungen für das Einbinden des SSL-Zertifikates vornehmen. Im Grunde bringt die Einrichtung nur Vorteile, deswegen solltest du Sie umsetzen!

Zuerst aktivierst du das Modul für Virtuelle Hosts:

sudo lighty-enable-mod simple-vhost

Anschließend legst du eine neue Konfigurationsdatei für den virtuellen Host an:

sudo nano /etc/lighttpd/conf-available/webseitenname.conf

Ändere Webseitenname zu einem Namen deiner Wahl.

In diese Datei fügst du Eine der beiden Konfigurationen ein, je nach dem ob du SSL nutzen möchtest oder nicht.

Konfiguration mit SSL Weiterleitung

$HTTP["scheme"] == "http" {
$HTTP["host"] == "meineseite.de" { #FDQN
 
server.document-root = "/var/www/html/meineseite/" # Der Hauptpfad deiner Seite
accesslog.filename = "/var/log/lighttpd/meineseite.log" # Web Server Access Logfile
server.errorlog = "/var/log/lighttpd/meineseite.log" # Web Server Error Logfile
url.redirect = ("/.*" => "https://meineseite.ddns.net$0") # HTTPS Weiterleitung erzwingen
}
} 

$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/meineseite.de/combined.pem" Kombiniertes Zertifikat
ssl.ca-file = "/etc/letsencrypt/live/meineseite.de/chain.pem" # Root CA
server.name = "meineseite.de" # Domain Name OR Virtual Host Name
server.document-root = "/var/www/html/meineseite/" # Document Root
server.errorlog = "/var/log/lighttpd/meineseite.de_error.log"
accesslog.filename = "/var/log/lighttpd/meineseite.de_access.log"
}

Konfiguration ohne SSL

$HTTP["host"] == "meineseite.de" { 
 
server.document-root = "/var/www/html/meineseite/" # Der Hauptpfad deiner Seite
accesslog.filename = "/var/log/lighttpd/meineseite.log" # Web Server Access Logfile
server.errorlog = "/var/log/lighttpd/meineseite.log" # Web Server Error Logfile
}

Ersetze noch meineseite durch den Namen deiner Webseite. Der Ordner muss dementsprechend natürlich in /var/www/html/ auch angelegt sein!

Speichere den Inhalt der Datei mit STRG + O und Enter und beende Nano mit STRG + X.

Nun machst du die Konfiguration mit einem symbolischen Link noch verfügbar.

sudo ln -s /etc/lighttpd/conf-available/meineseite.conf /etc/lighttpd/conf-enabled/

Ein Neustart des Server und schon ist der VHost eingerichtet:

sudo service lighttpd restart

Kohta Pi Konfiguration

Da man zu Anfang recht schnell mit der Konfiguration überforder sein kann, möchte ich hier mal die Konfiguration für mein Wiki zeigen. Vielleicht bringt diese ja etwas mehr Aufschluss.

$HTTP["scheme"] == "http" {
$HTTP["host"] == "kohta-pi.de" {
url.redirect = ("/.*" => "https://kohta-pi.de$0") # HTTPS Weiterleitung
server.document-root = "/var/www/html/kohtapi/" # Der Hauptpfad deiner Seite
accesslog.filename = "/var/log/lighttpd/kohtapi.log" # Web Server Access Logfile
server.errorlog = "/var/log/lighttpd/kohtapi.log" # Web Server Error Logfile
}
}

$HTTP["scheme"] == "http" {
$HTTP["host"] == "www.kohta-pi.de" {
url.redirect = ("/.*" => "https://www.kohta-pi.de$0") # HTTPS Weiterleitung
server.document-root = "/var/www/html/kohtapi/" # Der Hauptpfad deiner Seite
accesslog.filename = "/var/log/lighttpd/kohtapi.log" # Web Server Access Logfile
server.errorlog = "/var/log/lighttpd/kohtapi.log" # Web Server Error Logfile
}
}

$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/www.kohta-pi.de/combined.pem" # Combined Certificate
ssl.ca-file = "/etc/letsencrypt/live/www.kohta-pi.de/chain.pem" # Root CA
server.name = "www.kohta-pi.de" # Domain Name OR Virtual Host Name
server.document-root = "/var/www/html/kohtapi/" # Document Root
server.errorlog = "/var/log/lighttpd/kohtapi_error.log"
accesslog.filename = "/var/log/lighttpd/kohtapi_access.log"
}

MySQL (MariaDB) installieren

MySQL ist eine Datenbank-Serveranwendung, welche es ermöglich Datenbanken zu erstellen und zu verwalten. Viele Content-Management-Systeme wie Blogs, Foren ect. benutzen zum Beispiel Datenbanken zur Speicherung Ihrer Daten. Solltest du keine Datenbanken benötigen, musst du MySQL und Adminer nicht zwingen installieren.

Um MySQL zu installieren gibst du folgenden Befehl in der Konsole ein:

sudo apt-get install mariadb-server php7.0-mysql

Nach der Installation wird über ein Script die Einrichtung von MySQL vorgenommen. Dazu gibst du in der Konsole folgenden Befehl ein:

sudo mysql_secure_installation

Bei der Passwort Abfrage drückst du einfach Enter und beantwortest alle Fragen mit „Y“ (Yes). Dabei wird gleich ein neues Passwort für den Root Account von MariaDB gesetzt.

Logge dich als Root User in MariaDB ein:

sudo mysql -u root

Mit folgendem Befehl kannst du einen neuen Datenbankbenutzer anlegen:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Ersetze newuser und password durch den gewünschten Benutzernamen und Passwort!

Nun fügst dem Datenbankbenutzer noch das komplette Programm an Berechtigungen zu:

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Nicht vergessen, der Benutzer newuser wird durch deinen gewünschten Benutzernamen ersetzt!

Zu guter letzt musst du noch die Berechtigungen neu laden und MySQL beenden:

FLUSH PRIVILEGES; 
quit

Es gibt verschiedene Konfigurationsdateien für MariaDB:

  • „/etc/mysql/mariadb.cnf“ Um globale Standardwerte festzulegen.
  • „/etc/mysql/conf.d/*.cnf“ Um globale Optionen festzulegen.
  • „/etc/mysql/mariadb.conf.d/*.cnf“ Um MariaDB eigene Optionen festzulegen.
  • „~/.my.cnf“ Um benutzerspezifische Optionen festzulegen.

In den Konfigurationsdateien musst du eigentlich keine Änderungen mehr vornehmen. Ich erwähne Sie nur der Vollständigkeit halber.

Adminer installieren

Mit Adminer ist es möglich Datenbanken über eine grafische Oberfläche im Browser zu verwalten. So kannst du dir viel Arbeit auf der Shell ersparen und musst dich nicht mit etlichen MySQL Befehlen rumschlagen. Relativ bekannt ist auch das Tool phpMyAdmin. Unserer Meinung nach reicht aber für kleinere Projekte Adminer völlig aus. Zudem kommt es vollkommen ohne Konfiguration aus und besteht nur aus einer PHP Datei! Noch nicht überzeugt? Dann schau dir doch mal die Unterschiede zwischen PHPmyAdmin und Adminer

Zuerst einmal wird Adminer herunter geladen:

sudo cd /var/www/html/ 
sudo wget https://github.com/vrana/adminer/releases/download/v4.7.1/adminer-4.7.1-de.php
sudo mv adminer-4.7.1-de.php mysql.php

Anschließend befindet sich die Oberfläche unter http://www.meineadresse.de/mysql.php und du kannst dich mit dem zuvor neu erstelltem User einloggen.

raspberrypi/raspberry_pi_lighttpd_webserver.txt · Zuletzt geändert: 19/03/2019 16:01 von kohtachan