20.02.2021 - PHP 8.0 hinzugefügt
26.11.2020 - Anpassung an PHP 7.4
05.07.2019 - Anpassung an aktuelles Raspbian Buster
14.10.2018 - Anpassung an Raspbian Stretch
08.09.2015 - 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.
Zum Zeitpunkt 02/2021 ist im aktuellen Raspberry Pi OS noch kein PHP 8.0 und kein dazu passendes phpMyAdmin vorhanden, welche sich einfach per
Code: Alles auswählen
sudo apt-get install
Daher beschreibe ich hier den Weg der manuellen Integration beider Funktionen.
Für PHP 8.0 bedarf es nur einer kleinen Erweiterung für die Bereitstellung der Pakete, phpMyAdmin muss komplett manuell installiert und konfiguriert werden, da nur die neuste Version mit PHP 8.0 zusammen läuft und diese sich noch im RC Stadium befindet.
In eigener Sache:
Ich bitte folgende Dinge zu beachten:
1. Aktuell ist in der Anleitung noch keine SSL Verschlüsselung vorhanden.
Hier kann man aber auf folgende Anleitung zurückgreifen:
Raspberry Pi installieren: Ubuntu Server 20.04.1 LTS 64Bit (oder 20.10) + Nextcloud + Collabora Online
Dort wird im Abschnitt
Verschlüsselung mit Let´s Encrypt
beschrieben, wie man mit dem genannten Dienstleister eine solche Verschlüsselung erstellt.Dies sollte man auch hier anwenden können.
2. Da ich eben länger nicht mehr mit dem Apachen gearbeitet habe, bitte ich um Nachsicht, falls Dinge inzwischen anders und/oder besser gelöst wurden/werden. Ich würde mich über Hinweise diesbezüglich freuen, auch generell zu diesem Thema.
Inhaltsverzeichnis:
(1) Apache 2 installieren
(2) PHP 7.4/8.0 mit FPM/FastCGI installieren
(3) MariaDB installieren (ersetzt MySQL unter Debian Stretch)
(4) phpMyAdmin installieren
(1) Apache 2 installieren
Um zu Starten, wird wie immer zuerst das Paketmanagement aktualisiert:
Code: Alles auswählen
sudo apt-get update && sudo apt-get upgrade
Code: Alles auswählen
sudo apt-get install apache2 -y
-y
am Ende des Befehls weist die Installation darauf hin, dass alle Abfragen automatisch mit yes
bestätigt werden.Bevor wir fortfahren, erfolgt ein erster Test, ob der Apache läuft und korrekt gestartet wurde. Das hat den Vorteil, dass bei späteren Fehlersuchen zumindest bis hier her sichergestellt war, dass der Apache korrekt installiert wurde.
Im Browser wird dazu die Webseite des Apachen aufgerufen.
Wer hier die Standardanleitung aus diesem Forum für die Raspbian Installation benutzt (Raspberry Pi installieren: RASPBIAN Buster (+Full +Lite)) und den Hostnamen (raspberrypi) (noch) nicht geändert hat, kann den Apachen nun so aufrufen:
http://raspberrypi
oder die entsprechende IP Adresse (bei mir 192.168.178.37):
http://192.168.178.37
Ist alles korrekt, sollte sich eine Webseite in der Art zeigen (Auszug):

(2) PHP 7.4/8.0 mit FPM/FastCGI installieren
PHP 7.4:
Code: Alles auswählen
sudo apt-get install php7.4 php7.4-curl php7.4-gd php7.4-fpm php7.4-cli php7.4-opcache php7.4-json php7.4-mbstring php7.4-xml php7.4-zip php7.4-mysql -y
NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
PHP 8.0:
Code: Alles auswählen
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
Code: Alles auswählen
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
Code: Alles auswählen
sudo apt-get update
Code: Alles auswählen
sudo apt-get install php8.0 php8.0-curl php8.0-gd php8.0-fpm php8.0-cli php8.0-opcache php8.0-mbstring php8.0-xml php8.0-zip php8.0-mysql -y
NOTICE: Not enabling PHP 8.0 FPM by default.
NOTICE: To enable PHP 8.0 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.0-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Das holen wir nun nach:
Code: Alles auswählen
sudo a2enmod proxy_fcgi setenvif
Code: Alles auswählen
sudo a2enconf php7.4-fpm
Code: Alles auswählen
sudo a2enconf php8.0-fpm
Code: Alles auswählen
sudo systemctl reload apache2
PHP 7.4:
Code: Alles auswählen
sudo apt-get install libapache2-mod-php7.4 -y
Code: Alles auswählen
sudo apt-get install libapache2-mod-php8.0 -y
Code: Alles auswählen
sudo systemctl reload apache2
Code: Alles auswählen
sudo nano /var/www/html/info.php
Code: Alles auswählen
<?php
phpinfo();
?>
Jetzt wird wieder diese Datei im Browser aufgerufen:
http://raspberrypi/info.php
Oder eben Alternativ per IP Adresse, ich beschränke mich aber ab hier nur noch auf den Hostnamen, da die Unterschiede inzwischen klar sein dürften und man in den seltensten Fällen auf die IP direkt zugegriffen wird.
Bei korrekter Funktion sollte eine Ausgabe in der Art wie hier erfolgen (Auszug):

oder

Jetzt wird das Modul
mod_actions
aktiviert, um die PHP Anfragen nach FastCGI umzuleiten:Code: Alles auswählen
sudo a2enmod actions
Code: Alles auswählen
sudo systemctl reload apache2
Hierzu laden wir diesen in den Editor:
Code: Alles auswählen
sudo nano /etc/apache2/sites-available/000-default.conf
PHP 7.4:
Code: Alles auswählen
<VirtualHost *:80>
….
ServerName raspberrypi
….
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
….
Code: Alles auswählen
<VirtualHost *:80>
….
ServerName raspberrypi
….
<Directory /var/www/html>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.0-fpm.sock|fcgi://localhost"
</FilesMatch>
….
Die
….
deuten darauf hin, dass noch weitere Einträge vorhanden sind und das oben Gezeigte zusätzlich mit eingefügt werden muss.Wurde die obige Datei ergänzt und gespeichert, starten wir den Apachen und PHP Teil neu:
PHP 7.4:
Code: Alles auswählen
sudo service apache2 restart && sudo service php7.4-fpm restart
Code: Alles auswählen
sudo service apache2 restart && sudo service php8.0-fpm restart
Nun gilt es zu prüfen, dass der Apache auch wirklich im FPM/FastCGI Modus läuft.
Dafür rufen wir unsere zuvor angelegte Info Datei wieder auf:
http://raspberrypi/info.php
Dabei sollte am Anfang der Konfigurationsausgabe von PHP der rot eingekreiste Wert angezeigt werden:

oder

Dieser Check sollte bei allen VirtualHosts durchgeführt werden, damit man nicht versehentlich die unsicherere Variante (ohne FPM/FastCGI) aktiviert.
(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 -y
Danach folgt die Absicherung der Datenbank mit folgendem Befehl:
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
phpMyAdmin unter PHP 8.0:
Die in den Raspberry Pi OS Paketen enthaltene phpMyAdmin Version läuft NICHT mit PHP 8.0 zusammen !!
Daher bitte bei PHP 8.0 eine neuere Version manuell installieren !!
Nun wird phpMyAdmin installiert:
Nur PHP 8.0 (PHP 7.4 folgt darunter):
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.1.0-rc2/phpMyAdmin-5.1.0-rc2-all-languages.zip && sudo unzip phpMyAdmin-5.1.0-rc2-all-languages.zip && cd phpMyAdmin-5.1.0-rc2-all-languages
Code: Alles auswählen
sudo apt-get 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! */
Nun erzeugen wir die phpMyAdmin Konfigurationsdatei:
Code: Alles auswählen
sudo nano /etc/apache2/conf-available/phpmyadmin-custom.conf
Code: Alles auswählen
Alias /phpmyadmin /usr/local/src/phpmyadmin/phpMyAdmin-5.1.0-rc2-all-languages
<Directory "/usr/local/src/phpmyadmin/phpMyAdmin-5.1.0-rc2-all-languages">
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
Require all granted
</Directory>
Code: Alles auswählen
a2enconf phpmyadmin-custom && systemctl restart apache2
Code: Alles auswählen
sudo chown -R www-data:www-data tmp
Code: Alles auswählen
cd ~
Nur PHP 7.4:
Code: Alles auswählen
sudo apt-get install phpmyadmin -y

Hier ist darauf zu achten, dass unbedingt
apache2
angekreuzt und unten 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.
Es folgt am Ende wieder die bereits von weiter oben bekannte Meldung am Ende der phpMyAdmin Installation:
Dies ignorieren wir diesmal, da wir das ja bereits weiter oben getan haben und ich habe es auch getestet, eine erneute Eingabe bestätigte, dass diese Module bereits laufen.NOTICE: Not enabling PHP 7.4 FPM by default.
NOTICE: To enable PHP 7.4 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.4-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
PHP 7.4 und PHP 8.0:
phpMyAdmin läuft nun unter folgendem Link:
http://raspberrypi/phpmyadmin
Nach dem Aufruf 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.Zur Sicherheit starten wir den Apachen und PHP nochmals neu:
PHP 7.4:
Code: Alles auswählen
sudo service apache2 restart && sudo service php7.4-fpm restart && sudo service mysql restart
Code: Alles auswählen
sudo service apache2 restart && sudo service php8.0-fpm restart && sudo service mysql restart
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.