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
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 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
Code: Alles auswählen
sudo apt install apache2 -y
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 Externer Link](/images/links/Link.png)
oder die entsprechende IP Adresse (bei mir 192.168.178.37):
![Externer Link Externer Link](/images/links/Link.png)
Ist alles korrekt, sollte sich eine Webseite in der Art zeigen (Auszug):
![Bild](/images/anleitungen/lamp/apache_check.jpg)
(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
Das holen wir nun nach: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.
Code: Alles auswählen
sudo a2enmod proxy_fcgi setenvif
Code: Alles auswählen
sudo a2enconf php8.2-fpm
Code: Alles auswählen
sudo systemctl reload apache2
Code: Alles auswählen
sudo apt-get install libapache2-mod-php8.2 -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:
![Externer Link Externer Link](/images/links/Link.png)
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](/images/anleitungen/lamp/apache_php.jpg)
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
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
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>
….
….
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
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 Externer Link](/images/links/Link.png)
Dabei sollte am Anfang der Konfigurationsausgabe von PHP der rot eingekreiste Wert angezeigt werden:
![Bild](/images/anleitungen/lamp/apache_php_fpm.jpg)
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
![Es folgt ein Link zu Wikipedia. Wikipedia](/images/links/Wikipedia.png)
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.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
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 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.2.1-all-languages
<Directory "/usr/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages">
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
Require all granted
</Directory>
Code: Alles auswählen
sudo a2enconf phpmyadmin-custom && sudo systemctl reload apache2
Code: Alles auswählen
sudo mkdir tmp
Code: Alles auswählen
sudo chown -R www-data:www-data tmp
Code: Alles auswählen
cd ~
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
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/local/src/phpmyadmin/phpMyAdmin-5.2.1-all-languages/sql/create_tables.sql
phpMyAdmin läuft nun unter folgendem Link:
![Externer Link Externer Link](/images/links/Link.png)
Nach dem Aufruf im Browser erscheint die Loginmaske von phpMyAdmin:
![Bild](/images/anleitungen/lamp/phpmyadmin_login.jpg)
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](/images/anleitungen/lamp/phpmyadmin_start.jpg)
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
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 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
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.