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-get 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-get update && sudo apt-get upgrade
.
Inhaltsverzeichnis:
(1) NGINX installieren
(2) PHP 7.4 installieren
(3) MariaDB installieren (ersetzt MySQL unter Debian Stretch)
(4) phpMyAdmin installieren
(1) NGINX installieren
Zuerst folgt die übliche Paketaktualisierung:
Code: Alles auswählen
sudo apt-get update && sudo apt-get upgrade
Code: Alles auswählen
sudo apt-get install nginx
Anschließend wird NGINX gestartet:
Code: Alles auswählen
sudo /etc/init.d/nginx start
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 7.4 installieren
Als nächstes folgt die Installation einiger PHP Pakete:
Code: Alles auswählen
sudo apt-get install php7.4-common php7.4-fpm php7.4-cli php7.4-json php7.4-mysql php7.4-curl php7.4-intl php-pear php7.4-gd php7.4-zip php7.4-xml php7.4-mbstring
Auch hier wieder die Frage bez. Installation mit "ja" oder "yes" bestätigen.
Die Installation dauert hier ein klein wenig länger.
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:/var/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/php7.4-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/php7.4-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://hostname/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 (ersetzt MySQL unter Debian Stretch)
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-get install mariadb-client mariadb-server
Code: Alles auswählen
sudo mysql_secure_installation
Es folgt daraufhin die Frage, ob man ein Passwort setzen möchte. Dies sollte unbedingt mit
Y
für Yes bestätigt werden.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
Zuerst wird das Paket für phpMyAdmin installiert:
Code: Alles auswählen
sudo apt-get install phpmyadmin

Da bei phpMyAdmin in der Auswahl der Server kein NGINX vorkommt, ist darauf zu achten, dass auch nichts angekreuzt, sondern direkt nach unten gegangen und diese "Nichtauswahl" mit <OK> bestätigt wird.
Dann wird die Installation automatisch fortgesetzt.
Dies dauert einige Zeit, da hier einige Abhängigkeiten nachinstalliert werden.
Danach erscheint wieder ein neues Fenster, in dem die Einrichtung und Konfiguration der Datenbank für phpMyAdmin durch die Bestätigung mit <JA> erfolgt:

Darauf folgt eine Passwortkonfiguration, bei der phpMyAdmin ein Passwort für den Zugriff auf MySQL bekommt. Wird hier nichts eingetragen, erzeugt die Installationsroutine ein zufälliges Passwort.

Hier ein gewünschtes Passwort vergeben, dann ein zweites Mal eingeben und damit bestätigen.
Danach ist die Installation kurz darauf beendet und man befindet sich wieder in der Eingabeaufforderung.
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;
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/php7.4-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/php7.4-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 "phpmyadmin" 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.
Da aber nach der Standardkonfiguration (wie oben ausgeführt) der Benutzer
phpmyadmin
keine Rechte zum Anlegen und/oder bearbeiten anderer Datenbanken hat, wenn man nicht lokal am Raspberry Pi (sondern über das Netz) zugreift, gibt es zwei Möglichkeiten, dieses einzurichten:1. dem Benutzer
phpmyadmin
alle Rechte geben (sollte eigentlich vermieden werden, vor allem Remote)2. einen neuen Benutzer anlegen und diesem alle Rechte geben (auch hier die Sicherheit bedenken)
Auf jeden Fall sollte man bei einem Fernzugriff über das Internet mindestens die SSL Verschlüsselung aktivieren.
1. Möglichkeit: dem Benutzer
phpmyadmin
alle Rechte für MariaDB einrichten.Dies geschieht in der Datenbank selbst, die wie folgt per Root zu starten ist:
Code: Alles auswählen
sudo mysql --user=root mysql
phpmyadmin
Folgendes einzugeben ist:Code: Alles auswählen
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
Code: Alles auswählen
FLUSH PRIVILEGES;
exit
verlassen.Wenn jedoch einen gänzlich anderen Benutzernamen verwenden werden soll, ist die 1. Möglichkeit zu ignorieren und stattdessen die 2. Möglichkeit zu verwenden:
2. Möglichkeit: Einen neuen Benutzer anlegen und alle Rechte vergeben
Hierzu ist (wie bei Möglichkeit 1) 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.In der Regel sollte ein Login mit allen Rechten und dem geänderten Benutzer
phpmyadmin
oder einem neu dafür angelegten Benutzer sofort möglich sein, da phpMyAdmin die Benutzer in der eigenen Datenbank ablegt.Sollte dies aber dennoch nicht funktionieren, kann/muss der Benutzer in der phpMyAdmin Konfiguration angepasst werden.
Hierzu wird in der Konfigurationsdatei
/etc/dbconfig-common/phpmyadmin.conf
der Benutzer entsprechend ausgetauscht.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.