Seite 1 von 1

Raspberry Pi OS: Apache2, PHP8.2 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 08.09.2015, 13:49
von Outi
History:
26.01.2024 - Anpassung an aktuelles Raspberry Pi OS Bookworm und PHP 8.2
06.11.2021 - Anleitung korrigiert bez. PHP 8 FPM/FastCGI (unnötige Schritte rausgenommen)
16.10.2021 - phpMmyAdmin Links auf neue Version (Release) aktualisiert für PHP 8.0
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



Hinweis:
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.

Info:
Diese Anleitung setzt ein fertig konfiguriertes Raspberry Pi OS voraus.


Inhaltsverzeichnis:
(1) Apache 2 installieren
(2) PHP 8.2 mit FPM/FastCGI installieren
(3) MariaDB installieren
(4) phpMyAdmin installieren


(1) Apache 2 installieren

Um zu Starten, wird wie immer zuerst das Paketmanagement aktualisiert:

Code: Alles auswählen

sudo apt update && sudo apt full-upgrade -y
Es folgt nun die Installation des Apachen:

Code: Alles auswählen

sudo apt install apache2 -y
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: Raspberry Pi OS) und den Hostnamen (raspberrypi) (noch) nicht geändert hat, kann den Apachen nun so aufrufen:

Externer Link http://raspberrypi

oder die entsprechende IP Adresse (bei mir 192.168.178.37):

Externer Link http://192.168.178.37

Ist alles korrekt, sollte sich eine Webseite in der Art zeigen (Auszug):

Bild


(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
Gegen Ende der PHP Installation werden wir darauf hingewiesen, dass PHP 8.0 FPM nicht automatisch aktiviert wurde, dieser Hinweis aber angezeigt wird, da Apache von PHP erkannt wurde:
NOTICE: Not enabling PHP 8.2 FPM by default.
NOTICE: To enable PHP 8.2 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php8.2-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 php8.2-fpm
Damit diese Änderung wirksam wird, muss der Apache diese neu einlesen:

Code: Alles auswählen

sudo systemctl reload apache2
Zum Schluss der PHP Installation wird nun noch das Apache Modul für PHP installiert:

Code: Alles auswählen

sudo apt-get install libapache2-mod-php8.2 -y
Und es erfolgt nochmals ein Reload:

Code: Alles auswählen

sudo systemctl reload apache2
Um zu prüfen, ob PHP läuft und gleichzeitig die Konfig anzuschauen, wird nun eine PHP Datei im Webserververzeichnis erstellt:

Code: Alles auswählen

sudo nano /var/www/html/info.php
Diese neue Datei füllen wir mit folgendem Inhalt:

Code: Alles auswählen

<?php
  phpinfo();
?>
Und speichern sie per <STRG><X> und der Bestätigung mit "j" oder "y" und <Return>.

Jetzt wird wieder diese Datei im Browser aufgerufen:

Externer Link 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):

Bild

Jetzt wird das Modul mod_actions aktiviert, um die PHP Anfragen nach FastCGI umzuleiten:

Code: Alles auswählen

sudo a2enmod actions
Auch hier wieder den Apachen Reloaden, damit diese Änderung berücksichtigt wird:

Code: Alles auswählen

sudo systemctl reload apache2
Wie oben zu sehen ist, unterstützt der Apache 2 bereits jetzt FPM/FastCGI.
Jedoch konnte ich an einigen Stellen im Internet lesen, dass die nachfolgende manuelle Zuweisung des Proxys in den Seitenkonfigurationen (vHost / VirtualHost) diverse Vorteile haben soll.
Für die Einstellung der PHP Version bei mehreren Versionen geht es sogar nicht anders, da man dann dem Apachen irgendwie mitteilen muss, welche Webseite welche PHP Version nutzen soll.
Es schadet aber auch nicht, wenn man diese Einstellung auch bei der Verwendung nur einer PHP Version vornimmt.

Hierzu laden wir die Einstellungen der Standardwebseite in den Editor:

Code: Alles auswählen

sudo nano /etc/apache2/sites-available/000-default.conf
Es erscheint nun einiges an Konfiguration, die wir um folgende Zeilen ergänzen:

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.2-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:

Code: Alles auswählen

sudo service apache2 reload && sudo service php8.2-fpm reload
Wenn kein Fehler auftritt, erscheint einfach nur wieder der Eingabeprompt.

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:

Externer Link http://raspberrypi/info.php

Dabei sollte am Anfang der Konfigurationsausgabe von PHP der rot eingekreiste Wert angezeigt werden:

Bild

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/Raspberry Pi OS als Standard eingeführten Datenbankschnittstelle Wikipedia MariaDB.

Um MariaDB zu installieren, wird folgender Befehl eingegeben:

Code: Alles auswählen

sudo apt-get install mariadb-client mariadb-server -y
Diese Installation nimmt einiges an Zeit in Anspruch, daher bitte Geduld haben.

Danach folgt die Absicherung der Datenbank mit folgendem Befehl:

Code: Alles auswählen

sudo mysql_secure_installation
Hier ist zuerst das aktuelle Passwort des Datenbankadministrators (root) eingegeben. 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 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

Hinweis:
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 !!

Nun wird phpMyAdmin installiert:

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
Nach dem Download und Entpacken wird ein Passwortgenerator installiert:

Code: Alles auswählen

sudo apt install pwgen -y
Und anschließend ein Passwort generiert:

Code: Alles auswählen

pwgen -s 32 1
Dieses generierte Passwort ist recht komplex und sollte in der Zwischenablage zwischengespeichert werden.

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
Jetzt öffnen wir die Datei

Code: Alles auswählen

sudo nano config.inc.php
und tragen das zwischengespeicherte Passwort hier an dieser Stelle ein:

Code: Alles auswählen

$cfg['blowfish_secret'] = 'Hier das zuvor generierte und zwischengespeicherte komplexe PW eintragen'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Wenn wir schon in der Datei drin sind, hängen wir noch folgende Zeile ans Ende:

Code: Alles auswählen

$cfg['TempDir'] = 'tmp';
Die Datei wird nun per Tastenkombination <STRG><X> gespeichert und beendet.

Nun erzeugen wir die phpMyAdmin Konfigurationsdatei:

Code: Alles auswählen

sudo nano /etc/apache2/conf-available/phpmyadmin-custom.conf
und füllen sie mit folgendem Inhalt:

Code: Alles auswählen

Alias /phpmyadmin /usr/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages
<Directory "/usr/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages">
        Options SymLinksIfOwnerMatch
        DirectoryIndex index.php
        Require all granted
</Directory>
Nach dem Speichern und Beenden der Konfig müssen wir diese noch in Apache2 aktivieren:

Code: Alles auswählen

sudo a2enconf phpmyadmin-custom && sudo systemctl reload apache2
Damit es beim Anlegen von temporären Dateien in phpMyAdmin zu keinen Fehlern kommt, müssen wir hier noch das oben eingetragene TMP Verzeichnis anlegen und den Eigentümer von Root auf den Webserver ändern:

Code: Alles auswählen

sudo mkdir tmp

Code: Alles auswählen

sudo chown -R www-data:www-data tmp
Nun können wir auch wieder ins Home Verzeichnis zurückspringen:
Vorab löschen wir noch einige nicht mehr benötigte Daten von der Installation:

Code: Alles auswählen

sudo rm /usr/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages.zip

Code: Alles auswählen

sudo rm /var/www/html/info.php
Da bei dieser manuellen Installation keine phpMyAdmin Datenbank für phpMyAdmin selbst angelegt wird, könnte man später die in phpMyAdmin auftretende Fehlermeldung anklicken und den Anweisungen folgen.
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
Dann geben wir das Passwort ein, welches wir bei der Installation der Datenbanksoftware vergeben haben.

Mit dem BefehlCREATE DATABASE legen wir zuerst die Datenbank an:

Code: Alles auswählen

MariaDB [(none)]> CREATE DATABASE phpmyadmin;
Hier nur den Teil 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
Es folgt das Einlesen der fehlenden Tabellen:

Code: Alles auswählen

sudo mysql -u root -p phpmyadmin < /usr/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages/sql/create_tables.sql
Hier wieder das Datenbankpasswort eingeben und die Daten sind schnell importiert.

phpMyAdmin läuft nun unter folgendem Link:

Externer Link http://raspberrypi/phpmyadmin

Nach dem Aufruf im Browser erscheint die Loginmaske von phpMyAdmin:

Bild

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

Bild

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 nach der Standardkonfiguration (wie oben ausgeführt) der Benutzer root der einzige Nutzer ist, der Rechte zum Anlegen und/oder bearbeiten anderer Datenbanken hat, wenn man nicht lokal am Raspberry Pi (sondern über das Netz) zugreift und man generell mit einem anderen Nutzer auch von anderen Skripten zugreifen möchte, kann man hier für diverse Datenbanken auch einen anderen Nutzer anlegen.

Auf jeden Fall sollte man bei einem Fernzugriff über das Internet mindestens die SSL Verschlüsselung aktivieren.

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
Der neue Benutzer wird wie folgt angelegt:

Code: Alles auswählen

CREATE USER 'benutzername'@'localhost' IDENTIFIED BY 'passwort';
Die Wörter 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;
Auch hier ist das Wort benutzer wie im oberen Befehl gleich zu setzen.

Und zum Abschluss wieder die sofortige Rechteübernahme:

Code: Alles auswählen

FLUSH PRIVILEGES;
Der Befehl exit beendet die Datenbankkonsole wieder und führt in die Terminaleingabe zurück.

Zur Sicherheit laden wir die Konfiguration vom Apachen und PHP neu und restarten die Datenbank:

Code: Alles auswählen

sudo service apache2 reload && sudo service php8.2-fpm reload && sudo service mysql restart
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.

Nun steht im Prinzip die Grundkonfiguration bereit, um eigene Webseiten in PHP und mit Datenbanken über den Apachen als Webserver aufzubauen.
Im Hauptverzeichnis des Webservers steht noch dessen Willkommenswebseite, die natürlich gelöscht/ersetzt werden sollte.
Diese Anleitung stellt nur den Einstieg dar, denn das Thema Webseiten ist ein sehr komplexes Unterfangen, welches man nicht unterschätzen sollte.
Ganz wichtig ist auch die Tatsache, dass hier bei externem Betrieb (außerhalb der eigenen 4 Wände / Netzes) zwingend eine Verschlüsselung zu konfigurieren ist und ggf. weitere Themen berücksichtigt werden sollten, was hier aber zu weit gehen würde.


Fortsetzungen, Korrekturen, Änderungen möglich ....

Copyright © 2024 by RasPiFun.de

Re: RASPBIAN: Apache2 mit PHP7 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 14.10.2018, 18:33
von Outi
Anpassung an aktuelles Raspbian Stretch.

Re: RASPBIAN: Apache2, PHP7 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 08.11.2018, 17:25
von Sinus
Hallo Outi,
ich konnte nach deiner Anleitung alles bis auf den phpMyAdmin installieren. Fehlermeldung: sudo apt-get install phpMyAdmin -y
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
E: Paket phpMyAdmin kann nicht gefunden werden.

Nach der Meldung habe ich phpmyadmin direkt auf dem Pi über Add/Remove Software installiert.

Wieder zurück auf die Konsole und mit dem Befehl sudo apt-get install phpMyAdmin -y die Installation angestoßen, aber der Fehler bleibt

Hast du eine Lösung??

Gruß
Thomas

Re: RASPBIAN: Apache2, PHP7 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 08.11.2018, 20:51
von Outi
Hallo Thomas,
Sorry, mein Fehler, Du musst phpMyAdmin klein schreiben, also so: phpmyadmin
Ich vermute, die Autokorrektur hat zugeschlagen ....

Re: RASPBIAN: Apache2, PHP7 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 05.07.2019, 16:53
von Outi
Anpassung an aktuelles Raspbian Buster und PHP 7.3.

Re: RASPBIAN: Apache2, PHP7 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 26.11.2020, 16:41
von Outi
Anpassung an PHP 7.4.

Re: RASPBIAN: Apache2, PHP7/PHP8 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 20.02.2021, 19:32
von Outi
PHP 8.0 hinzugefügt.

Re: RASPBIAN: Apache2, PHP7/PHP8 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 16.10.2021, 22:28
von Outi
phpMyAdmin Links auf neue Version (Release) aktualisiert für PHP 8.0.

Re: RASPBIAN: Apache2, PHP7/PHP8 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 06.11.2021, 18:06
von Outi
Anleitung korrigiert bez. PHP 8 FPM/FastCGI (unnötige Schritte rausgenommen).

Wer PHP 8.x auf dem Raspberry Pi installiert, bei dem läuft PHP in der Regel bereits von vorne herein im FPM/FastCGI Modus.
Hier sind also die Schritte in den VHosts nicht nötig, die unter 7.x noch gemacht werden mussten.
Daher einfach die PHP Info Datei anlegen, den Apache Handler checken und damit sicher stellen, dass der FPM/FastCGI Modus aktiv ist.
Wurden vorher trotzdem Änderungen ala PHP 7.x durchgeführt, tut das keinen Abbruch und sollte trotzdem funktionieren.

Re: Raspberry Pi OS: Apache2, PHP8.2 (FPM/FastCGI), MariaDB & phpMyAdmin installieren

Verfasst: 26.01.2024, 19:59
von Outi
Anpassung an aktuelles Raspberry Pi OS Bookworm und PHP 8.2.