Raspberry/Webserver mit Apache

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Im Regelfall überlässt man das Hosting der fertigen Webauftritte einem Rechenzentrum, in dem die Verfügbarkeit durch Techniker rund um die Uhr gewährleistet wird. Zur Entwicklung ganzer Projekte hat es sich aber bewährt, einen eigenen (kleinen) Webserver lokal zu betreiben. So kann man einen Entwurf der Site vollständig isoliert, ungestört und möglichst als 1:1-Abbild des (zukünftigen) öffentlichen Angebotes erstellen. Erst nach vollständiger Prüfung "entlässt" man sein Werk dann in die Produktivumgebung.

Bei kleineren Projekten mit einer überschaubaren Zahl von Seitenaufrufen kann es durchaus auch interessant sein, einen eigenen Webserver zuhause zu betreiben, oder zumindest die Datenbank der Site in die geschützte Zone zu verlegen.

Die Raspberry Pi bietet hier eine kostengünstige und leise Möglichkeit.

Die Leistungsgrenzen der Hardware zwingen zur Verwendung von best practices. Die Verfahren finden auch bei weitaus stärkeren Servern Anwendung, weil diese sonst ebenfalls bei einer großen Nutzerzahl in die Knie gehen würden.

Installation

Wenn die im vorigen Kapitel besprochene Installation des OS erfolgt ist, ist die Installation der benötigten Server-Software in wenigen Schritten erfolgt.

Empfehlung: Folgendes wird benötigt:
  • Raspberry Pi 3 oder 4 wie vorhin installiert
  • Internet über Netzwerk oder WLAN
  • USB-Maus und USB-Tastatur
  • Bildschirm oder TV-Gerät und Kabel mit Micro-HDMI-Stecker für den Raspberry 4 und typisch HDMI-A-Stecker für den Monitor/das TV-Gerät
  • alternativ Fernzugriff mit SSH oder Fernbedienung des GUI mit VNC

Das Raspberry PI OS ist eine von Debian abgeleitete Distribution. Über die von dort bekannte Paketverwaltung können wir die benötigten Software-Pakete installieren. Dabei werden Abhängigkeiten und Registratur automatisch geprüft und gepflegt. Der Befehl

dpkg --get-selections

gibt Auskunft über die installierten Programme und Bibliotheken.

Wenn die Grundinstallation schon mehr als ein paar Stunden her ist, führen Sie nochmals das Update der Repository-Liste durch:

 sudo apt update

Mit dem sudo-Befehl (Akronym für superuser “do) stellt man sicher, dass nachfolgend wirklich die aktuellste freigegebene Version der Apache-Software installiert wird.

Apache

Genauso einfach ist dann anschließend die Installation des Apache-Webservers:

sudo apt install apache2 

Wenn Sie nun wissen wollen, welche Apacheversion und -Konfiguration Ihnen das Advanced Package Tool (apt) gerade installiert hat, können Sie die abfragen mit

sudo apache2ctl -V

und erhalten als Antwort z. B.

pi@raspi-001:/etc/apache2# apache2ctl -V

Server version: Apache/2.4.38 (Raspbian)
Server built:   2020-08-25T20:08:29
Server's Module Magic Number: 20120211:84
Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
Compiled using: APR 1.6.5, APR-UTIL 1.6.1
Architecture:   32-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"
pi@raspi-001:/etc/apache2#

Läuft der Apache-Server jetzt? (Konsole)

<Bild der Schnellstartleiste mit umkringelter Konsole> Öffnen Sie eine Konsole auf ihrer neuen Raspberry

Mit dem Befehl in der Konsole (alte Version)

service apache2 status

Testen Sie anschließend, ob der HTTP-Server jetzt läuft.

pi@raspi-002:~ $ service apache2 status
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-04-29 06:48:06 CEST; 3h 34min ago
     Docs: https://httpd.apache.org/docs/2.4/
  Process: 480 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 548 (apache2)
    Tasks: 7 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─ 548 /usr/sbin/apache2 -k start
           ├─ 553 /usr/sbin/apache2 -k start
           ├─ 554 /usr/sbin/apache2 -k start
           ├─ 555 /usr/sbin/apache2 -k start
           ├─ 556 /usr/sbin/apache2 -k start
           ├─ 557 /usr/sbin/apache2 -k start
           └─1262 /usr/sbin/apache2 -k start

Apr 29 06:48:05 raspi-002 systemd[1]: Starting The Apache HTTP Server...
Apr 29 06:48:06 raspi-002 apachectl[480]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'S
Apr 29 06:48:06 raspi-002 systemd[1]: Started The Apache HTTP Server.

Beenden Sie die Anzeige hier mit dem Anschlagen der "q"-Taste. "q" steht für "quit".

Oder in der neuen Logik mit

systemctl status apache2  

<Ausgabe Bild hier einfügen>

Achten Sie darauf, dass das Kommando hier zuerst erwartet wird und erst anschließend der betroffene Service!

Verwechseln Sie systemctl nicht mit sysctl!

Läuft der Apache-Server jetzt? (Browser)

<Bild der Schnellstartleiste mit umkringelter Weltkugel> Um zu überprüfen, ob der Webserver läuft, können Sie im Browser ihrer Raspberry Pi auch eine Testseite aufrufen. Öffnen Sie den Browser über das Weltkugel-Symbol in der Schnellstartleiste.


Geben Sie in die Adresszeile localhost ein und bestätigen Sie die Eingabe. Die Standard-Webseite des Webservers sollte nun erscheinen.

Apache-2 Default-Page


Von einem anderen Gerät in Ihrem LAN mit Browser sollte es ähnlich klappen: geben Sie die IP-Adresse Ihrer Raspberry PI in die URL-Leiste des Browsers ein. Diese hatten wir uns bei der Installation gemerkt!

IP vergessen?

Sie kennen die IP-Adresse ihrer Raspberry Pi noch nicht bzw. nicht mehr? (Im vorherigen Kapitel wurde erklärt, wie Sie diese herausfinden.)

Öffnen Sie am Raspberry die Konsole <Bild der Starterleiste mit rotem Kringel um das Konsolen-Icon> und geben Sie dort den Befehl ifconfig -a ein. Der Ausgabe können Sie nun die erwünschten Informationen entnehmen. <Bild der Ausgabe mit roten Kringeln>

<Bild von ifconfig>

Rufen sie über die Adressleiste eines Browsers im LAN 192.168.2.1 (Telekom Speedport) oder 192.168.178.1 (Fritzbox) oder 192.168.0.1 (Vodafon/Kabel DE) oder ... die Weboberfläche ihres Routers auf und ermitteln Sie dort die ip4-Adresse Ihrer Raspberry Pi.

Erste eigene Webseite anlegen

Zunächst verschaffen wir uns mit Hilfe einer Konsole Übersicht über bereits Vorhandenes.

ls -la /var/www/html/

<Bild mit der Ausgabe>

Dann benennen wir die Default-Page um, damit sie uns nicht verloren geht.

cd /var/www/html  
mv index.html index-20210426.html   

Im Directory des Webservers auf der Raspberry Pi können Sie nun eigene statische HTML-Seiten anlegen.

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

Mehr dazu unter Standardwebseite, HTML-Grundgerüst

PHP

Damit Sie Webseiten dynamisch zusammenbauen oder ein CMS einsetzen können, benötigen Sie PHP:

sudo apt install php

PHP (z. Zt. 2023-04-26: Version 8.2) wird nun automatisch als MODUL in den Apache-Webserver eingebunden und außerdem als CLI (Command Line Interface) bereitgestellt. Mit dem CLI kann man PHP auch ohne Browser benutzen und z. B. komplexe Cronjobs aufbauen (mehr unter Cronjob).

Damit PHP als Modul funktioniert, muss der Apache seine Konfiguration neu einlesen. Geschieht dies nicht automatisch durch die obige Installation, muss man dies ggf. manuell anstoßen.

sudo service apache2 reload  

oder

sudo systemctl reload apache2


Erstellen einer eigenen Info Page

Erzeugen Sie unter /var/www/html eine PHP-Datei phpinfo.php:

sudo nano phpinfo.php

In einem Editor können Sie folgenden Code erstellen:

1 <?php
2 phpinfo();
3 ?>

Aufruf der Info-Page

Aufruf der Info-Page im Browser

Bei einem Aufruf dieser Ressource mittels IP-Eingabe im Browser eines Gerätes im LAN sollte die nachfolgende Seite erscheinen:

Info Page des PHP Parsers

SQL-Datenbank

Nun installieren wir eine Datenbank. In älteren Tutorials wird MySQL von Oracle installiert, seit 2015 wurde in den Repositories der Debianoiden auf MariaDB gewechselt. Dies hat einerseits Lizenzgründe und andererseits damit zu tun, dass der MySQL-Code stark gewachsen ist. MariaDB hat nahezu dieselben Funktionalitäten wie die letzte verwendete MySQL-Version.

Installieren Sie die Pakete MariaDB-Server und PHP-MySQL. PHP-MySQL enthält die Requester-Funktionen für den Zugriff mittels PHP auf MariaDB und MySQL.

sudo apt install mariadb-server php-mysql -y

(Warum -y? Das benutzt man eigentlich nur in Scripten, oder wenn man zu faul ist, Rückfragen zu lesen. Hier wäre es aber ein Lernbestandteil die Fragen zu lesen.)

Danach ist die initiale Einrichtung der Datenbank auch schon beendet. Starten Sie anschließend den Raspi mit sudo reboot neu, um die Installation abzuschließen.

(Warum die ganze Himbeere neu starten? Es muss nur der Apache seine Konfiguration neu einlesen)

Datenbank und PHPmyAdmin absichern

nicht vergessen, Datenbank und PHPmyAdmin ein Passwort zu verpassen

PHPMyAdmin

Mit PHPMyAdmin können Sie die Datenbank über eine grafische Benutzeroberfläche im Browser verwalten.

sudo apt-get install phpmyadmin
  • wählen Sie den Apache 2 als Webserver aus.
  • Installieren Sie mit Ja die phpMyAdmin-Verwaltungsdatenbank
  • Bestimmen Sie ein Passwort für phpMyAdmin (es kann dasselbe wie das MySQL-Passwort sein) und die Installation ist fertiggestellt.

Als Letztes müssen Sie noch das frisch installierte phpMyAdmin mit dem Apache Webserver verbinden. Mit diesem Kommando können Sie die Konfigurationsdatei apache2.conf mit dem Nano-Editor editieren:

sudo nano /etc/apache2/apache2.conf

Gehen Sie mit dem Cursor ans Ende der Konfigurationsdatei (Sie können hierfür auch einfach die Tastenkombination „Strg“ + „V“ wiederholt drücken) und schreiben hier eine neue Zeile in die Datei:

Include /etc/phpmyadmin/apache.conf

Speichern Sie die Änderungen über das Tastenkürzel Strg + O und schließen die Konfigurationsdatei mit Strg + x. Daraufhin starten Sie den Apache-Webserver über einen weiteren Befehl in der Konsole neu:

sudo /etc/init.d/apache2 restart

oder

sudo service apache2 restart  


Nun ist nicht nur Ihr Webserver vollständig eingerichtet, sondern dessen Datenbank auch über phpMyAdmin im Webbrowser administrierbar. Hierfür tragen Sie einfach in der URL-Leiste die Raspberry-Pi-IP-Adresse sowie anschließend /phpmyadmin ein (192.168.X.X/phpmyadmin) und melden sich auf der phpMyAdmin-Seite mit dem Benutzernamen „root“ und Ihrem schon vorher festgelegten MySQL-Passwort an. Sobald Sie eingeloggt sind, können Sie in phpMyAdmin Datensätze auflisten, Datenbanken und Tabellen anlegen oder löschen und einige weitere Funktionen nutzen.

ToDo (weitere ToDos)

Abschnitt Passwörter und Sicherheit.

Hauptartikel: Sicherheit/sichere Passwortwahl

dynDNS

Grundlagen/Wie funktioniert das Internet?

Unser Webserver ist nun erreichbar. Allerdings erhält unser Router vom Provider eine beliebige Internet-Adresse zugewiesen, die bei jeder neuen Verbindung geändert wird. Häufig werden Internetverbindungen nach 24h automatisch getrennt und neu verbunden.

Deshalb gibt es Anbieter, die statische IP-Adressen und Domains mit wechselnden IP-Adressen dynamisch verknüpfen.[1]

    • Verwaltungsstruktur von Apache auf Debianoiden
    • Virtual Hosts
    • Logrotate anpassen
    • TLS-Zertifikat + HTTPs (Vorbereitung)
    • htaccess aktivieren

.htaccess

Mit der .htaccess-Datei (englisch hypertext access „Hypertext-Zugriff“) können Sie auf Apache-Servern weitreichende Einstellungen und Vorgaben für verzeichnisbezogene Regeln setzen.[2]

.htaccess aktivieren

Um .htaccess Dateien verwenden zu können, muss die AllowOverride Einstellung in der Apache 2 Konfiguration angepasst werden. Dazu öffnen wir die 000-default Datei.

sudo nano /etc/apache2/sites-enabled/000-default

Setzen Sie im Verzeichnis (Directory) /var/www/ den Punkt AllowOverride None zu AllowOverride All. Jetzt werden .htaccess-Dateien beim HTTPs-Zugriff auf den Pfad ausgewertet und können verwendet werden.

Zuvor muss aber noch die Konfiguration des Webservers neu eingelesen werden

sudo service apache2 reload  

Achten Sie darauf, dass dies mit [ok] quittiert wird und keine Fehlermeldung erscheint. Sonst haben Sie sich verschrieben oder in einer .htaccess-Datei im relevanten Pfad einen falschen Befehl eingegeben.

Empfehlung: Als Standard ist Options Indexes FollowSymLinks MultiViews eingetragen. Dies würde bei einem Fehlen einer index.html (z. B. in einem Bilderordner) alle im Ordner befindlichen Dateien anzeigen.
  • Setzen Sie die Einstellung auf
Options -Indexes FollowSymLinks MultiViews (das ist zum Üben unpraktisch)

ToDo (weitere ToDos)

  1. Aktivieren
  2. welche Einstelllungen sind nötig??
    • 404
    • DirectoryIndex
    • ...

SSL

  • GetSSL
  • LetsEncrypt


Weblinks

Apache

Quellen

  1. Wikipedia: Dynamisches DNS
  2. SELF-Forum: raspberry htaccess probleme vom 15.02.2021