Private Website von Niklas Menke

Elektrotechnik und mehr...

Netzfrequenz: - Hz
-

Netzfrequenz


(Etwa alle 30s wird ein neuer Messwert ermittelt. Dieses Diagramm gibt nicht den exakten Verlauf der Netzfrequenz wieder.)


Vorwort

Nachfolgend wird beschrieben, wie ein Raspberry-Pi als Webserver eingesetzt werden kann. Dabei soll die Anleitung möglichst kurzgehalten und somit auf detailliertere Beschreibungen verzichtet werden. Daher werden einige grundlegende Kenntnisse im Umgang mit dem Raspberry-Pi vorausgesetzt.

Folgende Materialien habe ich verwendet:

Das hier beschriebene Vorgehen wurde ausschließlich mit den oben aufgelisteten Materialien und dem Raspberry Pi OS Lite V5.4 getestet.

Betriebssystem installieren

Zuerst steht die Wahl eines Betriebssystems bevor. Dabei habe ich mich für das Raspberry Pi OS Lite entschieden. Die Lite-Version verfügt über keine grafische Oberfläche und kann nur über eine Konsole bedient werden. Dies ist ausreichend, da der Raspberry-Pi nachher ohnehin headless (Ohne Peripherie wie Bildschirm oder Tastatur) arbeiten soll.

Es gibt mehrere Möglichkeiten das Betriebssystem zu installieren. In der Regel nutze ich balenaEtcher, um ein bootfähiges Betriebssystem auf eine SD-Karte zu schreiben. Dieser Vorgang ist relativ einfach und soll hier nicht weiter behandelt werden. Ansonsten finden sich viele Anleitungen dazu im Netz.

Raspberry-Pi vorbereiten

Der Raspberry-Pi kann nun mit dem Betriebssystem gestartet werden. Für die weiteren Schritte muss ein Bildschirm und eine Tastatur an dem Raspberry-Pi angeschlossen werden, da einige Einstellungen nur lokal angepasst werden können.

Grundlegende Konfigurationen

Ist der Mikrorechner vollständig hochgefahren, dann kann man sich mit den Standard-Login Daten (raspberrypi login: pi, Password: raspberry) am Raspberry anmelden. Mit folgendem Befehl gelangt man ins Konfigurations-Tool des Raspberry-Pi:

sudo raspi-config

Dort werden dann diese Einstellungen vorgenommen:

Nach diesen Einstellungen kann das Konfigurations-Tool geschlossen werden. Der Raspberry-Pi wird am besten neu gestartet:

sudo reboot

Dem Raspberry-Pi sollte man eine statische, private IP-Adresse zuweisen, um die Erreichbarkeit zu erleichtern.
Dies kann in den Einstellungen des Routers vorgenommen werden.

pi-Benutzer umbenennen

Der Standard-Benutzer "pi" sollte aus Sicherheitsgründen nicht weiterverwendet werden. Entweder wird ein komplett neuer Benutzer angelegt und der pi-Benutzer anschließend gelöscht, oder der pi-Benutzer wird wie nachfolgend beschrieben abgeändert.

Zunächst muss man sich mit dem pi-User wieder an dem Mikrorechner anmelden. Während der pi-Benutzer genutzt wird, kann Dieser natürlich nicht geändert werden. Daher nutzen wir den ebenfalls standardmäßig vorhandenen Benutzer "root". Dieser ist normalerweise deaktiviert und kann erst mit der Einrichtung eines Passworts genutzt werden:

sudo passwd root

Das gesetzte Passwort muss nicht besonders sicher sein, da es nach diesem Vorgang wieder entfernt wird.

Nach der Vergabe des Passworts melden wir uns von pi-Benutzer ab:

logout

Anschließend melden wir uns am Benutzer root an und geben folgende Befehle ein:

Der Raspberry-Pi kann nun nochmal neu gestartet werden (sudo reboot). Der Bildschirm und die Tastatur werden nicht mehr benötigt und können abgebaut werden.

SSH-Verbindung

Die nachfolgenden Schritte werden alle über eine SSH-Verbindung durchgeführt. Der Bildschirm und die Tastatur werden am Raspberry-Pi nicht mehr benötigt.

Mittlerweile unterstützt Windows von Haus aus die Nutzung einer SSH-Verbindung. Dafür kann entweder die klassische Eingabeaufforderung oder PowerShell verwendet werden. Eine zusätzliche Software ist nicht notwendig.

Eine SSH-Verbindung wird standardmäßig wie folgt aufgebaut:

ssh BENUTZERNAME@HOSTNAME

Alternativ zum Hostname kann auch die IP-Adresse des Raspberry-Pi angegeben werden.

Ein SSH-Zugang kann eine Sicherheitslücke darstellen. Sollte der Server außerhalb des Heimnetzwerkes erreichbar gemacht werden, dann sollte der SSH-Zugang besonders gesichert werden. Weitere Informationen findet man bei Elektronik-Kompendium.de.

Mögliche Besonderheiten

Bei der ersten Verbindung ist der Mikrorechner für den PC noch unbekannt. Daher wird eine Sicherheitsabfrage auftauchen, welche bestätigt werden muss:

The authenticity of host 'Test (192.168.178.1)' can't be established.
ECDSA key fingerprint is SHA256:ILCeTj+OrwZGypT92mIJYxj1wDGjQ/LfcaqjcFI0cIs.
Are you sure you want to continue connecting (yes/no)?

Sollte der Mikrorechner bereits einmal unter einer anderen Konfiguration per SSH verbunden gewesen sein, oder wurde der ECDSA-Key aus anderen Gründen geändert, dann kann es zu einer Fehlermeldung kommen:

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:P51oaCHJ7DkiAUx/zXBRS5cDfVkrT6/F0nEUjhrLzpk.
Please contact your system administrator.
Add correct host key in C:\\Users\\USER/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\USER/.ssh/known_hosts:1
ECDSA host key for HOSTNAME has changed and you have requested strict checking.
Host key verification failed.

Dieser Fehler kann behoben werden, indem der alte ECDSA-Key in der Datei (Auf dem PC) C:\Users\USER\.ssh\known_hosts durch den neuen Key ersetzt wird. Sollten in dieser Datei keine weiteren, wichtigen Daten vorhanden sein, dann kann Diese alternativ einfach gelöscht werden.

Apache-Server aufsetzen

Als Server wird ein Apache HTTP Server genutzt. Dieser kann mit einem Befehl installiert werden:

sudo apt-get install apache2 -y

Direkt nach der Installation ist bereits eine Demoseite im Browser unter dem Hostnamen oder der IP-Adresse des Raspberry-Pi erreichbar:

Demoseite des Servers

Das Hauptverzeichnis des Servers befindet sich auf dem Raspberry-Pi im Ordner /var/www/html. Dort müssen alle weiteren Dateien, die der Server verarbeiten soll, abgelegt werden.

.htaccess-Dateien aktivieren

Möchte man z.B. eigene Fehlerseiten (403, 404, usw.) einbinden, dann kann dies in einer .htaccess-Datei angewiesen werden. Allerdings ist die Unterstützung von .htaccess-Dateien standardmäßig deaktiviert.

Um .htaccess-Dateien anwenden zu können, müssen wir die apache2.conf bearbeiten:

sudo nano +172 /etc/apache2/apache2.conf

Dort finden sich folgende Anweisungen (Bereits durch den oberen Befehl ausgewählt):

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

Dort ändert man die Zeile "AllowOverride None" nach "AllowOverride All"

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Nun können auch .htaccess-Dateien verwendet werden.

SFTP (FTP) Zugang

Um einfach Dokumente mit dem Webserver austauschen zu können, wird eine FTP-Verbindung eingerichtet. Allerdings wäre der Betrieb eines eigenständigen FTP-Servers unnötig.
Stattdessen kann der SSH-Server genutzt werden, um FTP-Befehle auszuführen und somit Daten auf dem Webserver zu verwalten. Dieses Protokoll nennt sich SFTP.

Für den SFTP-Zugang wird natürlich ein Benutzer auf dem Raspberry-Pi benötigt. Dafür könnte der bereits existierende Standardbenutzer genutzt werden (Der, mit den wir bereits die ganze Zeit arbeiten).
Allerdings bezieht sich der SFTP-Zugang auf das Home-Verzeichnis eines Benutzers. Der Standardbenutzer soll jedoch noch für andere Dinge benutzt werden und somit nicht als Webserver-Verzeichnis dienen. Daher wird ein neuer Benutzer angelegt:

sudo useradd BENUTZERNAME_SFTP -M

Der Benutzer wird ohne eigenes Home-Verzeichnis angelegt. Stattdessen weisen wir das Verzeichnis des Webservers zu:

sudo usermod -d /var/www/html/ BENUTZERNAME_SFTP

Um den Benutzer später nutzen zu können, muss ein Passwort zugewiesen werden:

sudo passwd BENUTZERNAME_SFTP

Damit der neue Benutzer nachher auf alle notwendigen Verzeichnisse zugreifen kann, weisen wir Ihm noch folgende Gruppe zu:

sudo usermod -G www-data BENUTZERNAME_SFTP

Als nächstes machen wir den Benutzer zum Besitzer des Webserver-Verzeichnis:

sudo chown BENUTZERNAME_SFTP:www-data -R /var/www/html

Zum Schluss werden noch die notwendigen Rechte für das Webserver-Verzeichnis eingestellt:

sudo chmod 775 -R /var/www/html

Der Standardpfad des Webserver-Verzeichnis ist "/var/www/html". Sollte das Verzeichnis abweichen, dann müssen natürlich die obenstehenden Befehle entsprechend angepasst werden.

Nun kann mit entsprechender Software (z.B. FileZilla) per SFTP auf das Webserver-Verzeichnis zugegriffen werden. Die notwendigen Zugangsdaten sind die des angelegten Benutzers. Der Standard-Port ist 22.

PHP

Bisher können wir mit dem Server nur statische HTML-Seiten anzeigen. Für die Nutzung dynamischer Inhalte ist PHP ein wichtiges Werkzeug. Dieses kann auf dem Raspberry-Pi mit einem Befehl installiert werden:

sudo apt-get install php -y

Die nachfolgenden Schritte bezüglich dieses Abschnitts können auch über den eingerichteten SFTP-Zugang durchgeführt werden.

Um PHP zu testen, erstellen wir eine Testseite.
Zunächst kann die statische Demoseite gelöscht werden:

sudo rm /var/www/html/index.html

Anschließend wird an selber Stelle eine neue php-Datei mit dem Namen index erstellt:

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

Diese Datei kann z.B. mit <?php phpinfo(); ?> gefüllt werden. Ruft man nun wieder die Startseite des Servers im Browser auf, dann sollte das Ergebnis ungefähr so aussehen (PHP funktioniert):

PHP Testseite
DBMS: Datenbankmanagementsystem

Auf dem Raspberry-Pi soll nun noch ein DBMS (Datenbankmanagementsystem) installiert werden. Dafür nutze ich das weit verbreitete MySQL, bzw. MariaDB System.
Zur Installation genügt zunächst ein Befehl:

sudo apt-get install mariadb-server -y

Um nun noch die Sicherheit des DBMS zu erhöhen, wird folgender Befehl ausgeführt:

sudo mysql_secure_installation

Mithilfe dieses Befehls wird ein Passwort für den root-Benutzer gesetzt. Alle gestellten Fragen sollten mit Ja (y) beantwortet werden.

Neuen Benutzer anlegen

Als Standard-Benutzer des DBMS wird der root-Benutzer genutzt. Da root allerdings nur für wichtige, administrative Zwecke genutzt werden sollte, wird ein neuer Benutzer für das DBMS erstellt.
Dazu loggt man sich zunächst in das DBMS ein:

sudo mysql -u root -p 

Anschließend befindet man sich im "MariaDB monitor". Hier können wir eine Datenbank erstellen, welcher der Benutzer später nutzen soll:

CREATE DATABASE datenbankname;

Nun wird der neue Benutzer angelegt:

CREATE USER 'benutzername'@'localhost' IDENTIFIED BY 'passwort';

Dem Benutzer werden alle Rechte für die zuvor erstellte Datenbank zugewiesen:

GRANT ALL PRIVILEGES ON datenbankname.* TO 'benutzername'@'localhost';

Zuletzt werden die Rechte neu geladen und der MariaDB Monitor verlassen:

FLUSH PRIVILEGES;
quit

Um den neuen Benutzer zu testen, melden wir uns mit eben Diesen an:

sudo mysql -u BENUTZERNAME -p 

Ist eine Anmeldung möglich, dann wurde der Benutzer richtig angelegt und kann verwendet werden.

phpMyAdmin

Eine Administration der Datenbanken wäre über die Konsole des Raspberry-Pi sehr umständlich. Daher wird phpMyAdmin installiert, um diese Arbeit zu erleichtern.
Auch hier erfolgt die Installation mit einem Befehl:

sudo apt-get install phpmyadmin -y

Während der Installation erscheint ein Konfigurationsfenster. In diesem wählt man zunächst "apache2" aus. Die spätere Frage bezüglich der Konfiguration mit "dbconfig-common" wird verneint.

Hat die Installation geklappt, dann ist phpMyAdmin unter HOSTNAME/phpmyadmin, bzw. IP-ADRESSE/phpmyadmin erreichbar:

phpMyAdmin Startseite

Dort kann man sich nun mit dem Benutzer, welchen wir im Abschnitt "DBMS: Datenbankmanagementsystem" eingerichtet haben, anmelden.

In phpMyAdmin erscheint eine Datenbank mit dem Namen "information_schema". Dabei handelt es sich um eine Standard-Datenbank, welche nicht gelöscht werden kann. Diese Datenbank sollte einfach ignoriert werden.

Pfad anpassen

Standardmäßig ist phpMyAdmin, wie oben erwähnt, unter HOSTNAME/phpmyadmin, bzw. IP-ADRESSE/phpmyadmin erreichbar. Dies kann ein Sicherheitsrisiko darstellen, weshalb der Standardpfad in der apache.conf geändert werden soll:

sudo nano +3 /etc/phpmyadmin/apache.conf

In dieser Datei befindet sich folgende Zeile:

Alias /phpmyadmin /usr/share/phpmyadmin

Dort ersetzt man "/phpmyadmin" durch den eigenen, gewünschten Pfad.

Der Apache-Server wird neu gestartet:

sudo /etc/init.d/apache2 restart

Danach ist phpMyAdmin unter dem neuen Pfad aufrufbar.

phpMyAdmin-Konfigurationsspeicher

Unter Umständen erscheint in phpMyAdmin ein Fehler, dass der phpMyAdmin-Konfigurationsspeicher nicht vollständig konfiguriert wurde. Diesen Fehler beheben wir, indem wir uns zunächst auf dem Raspberry-Pi mit root bei dem DBMS anmelden:

sudo mysql -u root -p 

Anschließend führen wir ein Skript aus, welches uns die notwendige Datenbank mit den entsprechenden Tabellen erstellt:

\. /usr/share/phpmyadmin/sql/create_tables.sql

Des Weiteren wird ein Kontrollbenutzer benötigt, der angelegt werden muss:

CREATE USER 'phpmyadminmanager'@'localhost' IDENTIFIED BY 'phpmyadminmanagerpassword';
GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadminmanager'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Der MariaDB Monitor kann wieder verlassen werden (quit).
Der angelegte Benutzer muss nun noch in die "config.inc.php" eingetragen werden. Diese Datei öffnet man wie folgt:

sudo nano +77 /etc/phpmyadmin/config.inc.php

Dort editiert man folgende Zeilen:

  1. Von:

    $cfg['Servers'][$i]['controluser'] = $dbuser;

    Nach:

    $cfg['Servers'][$i]['controluser'] = 'phpmyadminmanager';
  2. Von:

     $cfg['Servers'][$i]['controlpass'] = $dbpass;

    Nach:

    $cfg['Servers'][$i]['controlpass'] = 'phpmyadminmanagerpassword';

"phpmyadminmanager" und "phpmyadminmanagerpassword" sind Platzhalter und sollten ersetzt werden.

Anschließend wird die Datei gespeichert und der Fehler sollte verschwunden sein.

Warning count();

Ein weiterer Fehler kann ungefähr so aussehen:

count(); Fehler

Dieser Fehler muss in der sql.lib.php Datei auf dem Raspberry-Pi behoben werden:

sudo nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php

Dort editiert man die Zeile 613 (Bereits durch den oberen Befehl ausgewählt) wie folgt:
Von:

|| (count($analyzed_sql_results['select_expr'] == 1)
Nach: (Änderung rot hervorgehoben.)
|| ((count($analyzed_sql_results['select_expr']) == 1)

Nachdem man sich bei phpMyAdmin neu eingeloggt hat, sollte der Fehler verschwunden sein.

Dauerbetrieb

Da sich der Raspberry-Pi als Server vermutlich im Dauerbetrieb befindet, gibt es noch einige Verbesserungsmöglichkeiten. Diese werden gut auf Elektronik-Kompendium.de beschrieben.


Diese Website verwendet zur Darstellung einiger Inhalte externe Dienste und Cookies.

Nachfolgend können Sie die einzelnen Dienste ein- bzw. ausschalten.
Diese Einstellungen können jederzeit im Footer der Website angepasst werden.

Technisch notwendig (Cookie-Präferenzen, Design)
Font Awesome (Symbole)
Google Fonts (Schriftart)
Google reCAPTCHA (Formularschutz)
Sketchfab (3D-Inhalte)

Weitere Informationen finden Sie in der Datenschutzerklärung.

Datenschutzerklärung