05.12.2023 - Anpassung an aktuelles Raspberry Pi OS Bookworm und PHP 8.2
22.11.2021 - Anpassung an aktuelles Raspbian Bullseye und PHP 8.0
26.11.2020 - Anpassung an PHP 7.4
06.07.2019 - Anpassung an aktuelles Raspbian Buster und PHP 7.3
08.10.2017 - Hinweise zu phpMyAdmin bez. Datenbankrechte hinzugefügt (Standard keine Administration möglich, wenn nicht lokal).
04.10.2017 - Anleitung an aktuelles Image (Stretch) angepasst und aktualisiert,
worker_processes 4
Info entfernt, da inzw. auf "auto"26.12.2016 - Info zur Konfiguration bez. Pi 2 und Pi 3 /
worker_processes 4
hinzugefügt03.03.2016 - Befehl korrigiert für den 1. Restart von NGINX und Konfigcode optimiert
27.02.2016 - Abschalten der NGINX Versionsanzeige im Abschnitt NGINX hinzugefügt
22.02.2016 - Anpassung für Singlecore Pis im Abschnitt NGINX hinzugefügt
21.02.2016 - Erste Fertigstellung
Diese Anleitung/Information erhebt keinen Anspruch auf Vollständigkeit und kann Fehler enthalten und die Benutzung erfolgt auf eigene Gefahr.
Es wird keinerlei Haftung für Schäden und/oder Datenverluste übernommen.
Diese Anleitung setzt ein fertig konfiguriertes RASPBIAN voraus.
Die
apt install xxxx
Befehle wurden absichtlich einzeln zu den Textpassagen hinzugefügt und nicht gesamt alles auf einmal installiert, damit man auf Wunsch auch nur das installiert, was man haben möchte und Teile ersetzen oder überspringen kann.Sollten einzelne Teile oder alle getrennt zu unterschiedlichen Zeiten installiert werden, sollte immer ein Paketupdate vorab durchgeführt werden per
sudo apt update && sudo apt full-upgrade -y
.
In dieser Anleitung wird NGINX mit PHP, MySQL und der Datenbankverwaltung phpMyAdmin installiert, was im Groben eine Grundausstattung für einen Webserver aufzeigt.
Inhaltsverzeichnis:
(1) NGINX installieren
(2) PHP 8.2 mit FPM/FastCGI installieren
(3) MariaDB installieren
(4) phpMyAdmin installieren
(1) NGINX installieren
Zuerst folgt die übliche Paketaktualisierung:
Code: Alles auswählen
sudo apt update && sudo apt full-upgrade -y
Code: Alles auswählen
sudo apt install nginx -y
Ein erster Test soll zeigen, dass NGINX auch läuft. Hierzu rufen wir im Browser folgende Seite auf:
Code: Alles auswählen
http://raspberrypi
(oder was auch immer als Hostname gewählt wurde) oder
http://192.168.xxx.xxx
(die IP Adresse, die entweder fest oder per DHCP zugewiesen wurde)

Manchmal ist die Anzeige der NGINX Version z.B. bei Fehlerseiten nicht erwünscht. Diese kann man in der Konfigdatei deaktivieren:
Code: Alles auswählen
sudo nano /etc/nginx/nginx.conf
http
das #
vor der folgenden Zeile entfernen: server_tokens off;
Danach mit folgendem Befehl NGINX neu starten:
Code: Alles auswählen
sudo /etc/init.d/nginx reload
(2) PHP 8.2 mit FPM/FastCGI installieren
Als nächstes folgt die Installation einiger PHP Pakete:
Code: Alles auswählen
sudo apt install php8.2-common php8.2-fpm php8.2-cli php8.2-mysql php8.2-curl php8.2-intl php-pear php8.2-gd php8.2-zip php8.2-xml php8.2-mbstring -y
Nun wird PHP in NGINX eingebunden, indem man die Datei
/etc/nginx/sites-available/default
mit dem Editor Nano mit dem folgenden Befehl bearbeitet:Code: Alles auswählen
sudo nano /etc/nginx/sites-available/default
Code: Alles auswählen
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
Code: Alles auswählen
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
Beim Copy/Paste hier im Forum werden Tabs in Leerzeichen umgewandelt !!
Dies passiert leider auch beim Einfügen der Zeilen in die Datei.
Dies ist zwar nicht weiter tragisch, jedoch sollte man - um die Einrückungen dem restlichen Text anzupassen - diese Leerzeichen löschen und wieder durch Tabs ersetzen.
Damit PHP Dateien auch erkannt und ausgeführt werden, muss in der selben Datei noch Folgendes ergänzt/geändert werden:
Code: Alles auswählen
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
Code: Alles auswählen
# Add index.php to the list if you are using PHP
index index.php index.html index.htm;
Zu guter Letzt müssen NGINX und PHP neu gestartet werden:
Code: Alles auswählen
sudo /etc/init.d/php8.2-fpm reload && sudo /etc/init.d/nginx reload
In der zuvor bearbeiteten Datei ist das Verzeichnis zu sehen, aus dem der Webserver seine Seiten aufruft:
Code: Alles auswählen
root /var/www/html;
Daher wird folgende leere Testdatei in diesem Verzeichnis erzeugt:
Code: Alles auswählen
sudo nano /var/www/html/phpinfo.php
Code: Alles auswählen
<?php phpinfo(); ?>
Code: Alles auswählen
http://raspberrypi/phpinfo.php
oder
http://192.168.xxx.xxx/phpinfo.php

Nun können die Willkommensseite von NGIX und die phpinfo.php Datei (zur Sicherheit) gelöscht und durch eigene Seiten ersetzt werden.
(3) MariaDB installieren
Während oben die Grundlagen für einen Webserver und der Skriptsprache PHP geschaffen wurde, folgt hier die Beschreibung der in Debian/Raspbian Stretch als Standard eingeführten Datenbankschnittstelle

Um MariaDB zu installieren, wird folgender Befehl eingegeben:
Code: Alles auswählen
sudo apt install mariadb-client mariadb-server -y
Code: Alles auswählen
sudo mysql_secure_installation
Wurde die Datenbank erst gerade installiert und noch kein Passwort eingegeben, ist einfach die Entertaste für kein Passwort einzugeben.
Es folgt daraufhin die Frage, ob man zur
unix_socket authentication
wechseln möchte.Dies sollte unbedingt mit
Y
für Yes bestätigt werden, denn dadurch gelangt man zur Passwortfestlegung.Wer bereits zuvor ein Passwort erstellt hatte, kann hier mit "n" antworten.
Nun ist das neue Administratorpasswort einzugeben, danach ein zweites Mal zur Bestätigung (und um Tippfehler zu vermeiden).
Auf die Frage, ob anonyme Benutzer gelöscht werden sollen, ist ebenfalls mit
Y
für Yes zu bestätigen.Ebenso ist die nachfolgende Frage nach dem Verbot für das entfernte Einloggen des Benutzers "Root" mit
Y
zu bestätigen. Somit kann sich der Benutzer "Root" nur lokal in die Datenbank einloggen und niemand sonst aus dem Netzwerk mit diesem Account.Bei der Frage nach dem Löschen der Datenbank "Test" ist auch wieder eine Bestätigung mit
Y
einzugeben, da diese für eine produktive Umgebung nicht benötigt wird. Ebenso werden auch die Zugänge darauf gelöscht.Zum Schluss folgt noch die erneute Bestätigung mit
Y
für das Neuladen der Datenbankprivilegien, damit die Änderungen sofort übernommen werden.Die Installation ist hiermit beendet und die zu dem früheren MySQL kompatible Datenbank kann sofort eingesetzt werden.
(4) phpMyAdmin installieren
phpMyAdmin unter PHP 8.X:
Die in den Raspberry Pi OS Paketen enthaltene phpMyAdmin Version läuft NICHT mit PHP 8.X zusammen !!
Daher bitte bei PHP 8.X eine neuere Version manuell installieren !!
Dies geschieht folgendermaßen:
Code: Alles auswählen
cd /usr/local/src
Code: Alles auswählen
sudo mkdir phpmyadmin
Code: Alles auswählen
cd phpmyadmin
Code: Alles auswählen
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip && sudo unzip phpMyAdmin-5.2.1-all-languages.zip && cd phpMyAdmin-5.2.1-all-languages
Code: Alles auswählen
sudo apt install pwgen -y
Code: Alles auswählen
pwgen -s 32 1
Als Nächstes kopieren wir die Beispiel Konfigdatei in eine brauchbare Datei um:
Code: Alles auswählen
sudo cp config.sample.inc.php config.inc.php
Code: Alles auswählen
sudo nano config.inc.php
Code: Alles auswählen
$cfg['blowfish_secret'] = 'Hier das zuvor generierte und zwischengespeicherte komplexe PW eintragen'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Code: Alles auswählen
$cfg['TempDir'] = 'tmp';
Nun wechseln wir 1 Verzeichnis zurück, löschen die Downloaddatei und verschieben phpMyAdmin an den endgültigen Platz und benennen es um:
Code: Alles auswählen
cd ..
sudo rm phpMyAdmin-5.2.1-all-languages.zip
sudo mv phpMyAdmin-5.2.1-all-languages/ /usr/share/phpmyadmin/
cd ..
sudo rmdir phpmyadmin
Code: Alles auswählen
sudo mkdir /usr/share/phpmyadmin/tmp
Code: Alles auswählen
sudo chown -R www-data:www-data /usr/share/phpmyadmin/tmp
Wir können aber dieses Problem bereits vorher beheben, indem wir die Datenbank selbst erstellen und mit die gewünschten Daten einlesen.
Zuerst loggen wir uns in die Datenbank ein:
Code: Alles auswählen
mysql -u root -p
Mit dem Befehl
CREATE DATABASE
legen wir zuerst die Datenbank an:Code: Alles auswählen
MariaDB [(none)]> CREATE DATABASE phpmyadmin;
CREATE DATABASE phpmyadmin;
eingeben, das davor ist die Eingabezeile der Datenbanksoftware !!Nun verlassen wir die Datenbanksoftware wieder mit
exit
:Code: Alles auswählen
MariaDB [(none)]> exit
Code: Alles auswählen
sudo mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
Als nächster Schritt wird der Webserver NGINX auf phpMyAdmin konfiguriert.
phpMyAdmin wurde bei der Installation in das Verzeichnis
/usr/share/phpmyadmin
kopiert.Damit man über NGINX darauf zugreifen kann, ist eine Änderung notwendig.
Hier gibt es nun mehrere Möglichkeiten, dies zu realisieren.
Zum einen kann man den Pfad in eine Subdomain verlinken oder einfach an den Hostnamen oder die IP ein Verzeichnis anhängen ala
http://raspberrypi/phpmyadmin
.In dieser Anleitung wird jedoch ein anderer Port konfiguriert, damit man extern phpMyAdmin nicht so leicht finden kann, falls man auch extern darauf zugreifen will. Das ist zwar auch kein 100%iger Schutz aber besser als gar nichts.
Um die Konfiguration zu erweitern, ist die folgende Datei zu bearbeiten:
Code: Alles auswählen
sudo nano /etc/nginx/sites-available/default
Code: Alles auswählen
server {
listen 81;
listen [::]:81;
server_name raspberrypi;
root /usr/share/phpmyadmin;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php?url=$1 last;
break;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
Server_name
an den eigenen Hostnamen oder eine Domain angepasst werden, sofern man was anderes verwendet.Um die Änderungen zu übernehmen und neu einzulesen, werden NGINX und PHP neu gestartet:
Code: Alles auswählen
sudo /etc/init.d/php8.2-fpm reload && sudo /etc/init.d/nginx reload
raspberrypi
verwendet und lokal auf phpMyAdmin zugegriffen, ist dieses über Port 81 im Browser so zu erreichen:Code: Alles auswählen
http://raspberrypi:81
/etc/nginx/sites-available
gespeichert und per SymLink in /etc/nginx/sites-enabled
aktiviert werden.Nach dem Aufruf nach obigem Schema im Browser erscheint die Loginmaske von phpMyAdmin:

Hier ist nun ein Login mit dem Datenbankbenutzer "root" und dem weiter oben definierten Passwort möglich
und man erhält die folgende Startseite:

Greift man von extern auf phpMyAdmin zu, sollte eine Verschlüsselung aktiviert werden, denn sonst gehen die Abfragen im Klartext durchs Internet. Daher entweder verschlüsseln oder den Zugriff von extern blockieren.
Unter PHP 8.2 haben wir mit dem "root" Account gearbeitet.
Dieser User hat von vorneherein durch die andere Konfigurationsart alle Rechte.
Wenn jedoch einen gänzlich anderen Benutzernamen verwenden werden soll, ist diese Möglichkeit zu verwenden:
Einen neuen Benutzer anlegen und alle Rechte vergeben
Hierzu ist die Kommandozeile von mysql zu starten:
Code: Alles auswählen
sudo mysql --user=root mysql
Code: Alles auswählen
CREATE USER 'benutzername'@'localhost' IDENTIFIED BY 'passwort';
benutzername
und passwort
sind durch eigene Kreationen auszutauschen.Die Rechtevergabe sieht dann so aus:
Code: Alles auswählen
GRANT ALL PRIVILEGES ON *.* TO 'benutzer'@'localhost' WITH GRANT OPTION;
benutzer
wie im oberen Befehl gleich zu setzen.Und zum Abschluss wieder die sofortige Rechteübernahme:
Code: Alles auswählen
FLUSH PRIVILEGES;
exit
beendet die Datenbankkonsole wieder und führt in die Terminaleingabe zurück.Ob die erweiterte Rechtevergabe geklappt hat, erkennt man im eingeloggten phpMyAdmin links an der Anzahl der Datenbanken (mehr als 2).
Zum Test sollte eine neue Datenbank angelegt und wieder gelöscht werden.
Generell lässt sich noch empfehlen, dass ggf. für diverse Datenbanken auch unterschiedliche Benutzer mit verschiedenen Rechten konfiguriert werden können. Hierzu ist z.B. die recht ausführliche Anleitung per
man mysql
aufrufbar oder auch diverse Webseiten zu MySQL und MariaDB geben umfangreiche Infos.