Bitte warten...

Einrichten eines lokalen LAMP-Servers

(unter Linux Mint 21)

Ein LAMP-Server ist ein lokaler Webserver, der unter Linux die Produktion von dynamischen Websites unter Verwendung von PHP und MariaDB auf dem eigenen lokalen Rechner ermöglicht, wodurch während der Entwicklungsphase das Hochladen von PHP-Skripten auf einen entfernten Webspace überflüssig wird. LAMP besteht aus folgenden Komponenten:

Apache 2.4.52 (Webserver)
PHP-Modul 8.1.2 (Skriptinterpreter)
MariaDB-Server 10.6.12 (Datenbank)
phpMyAdmin 5.1.1 (Verwaltungsoberfläche für MariaDB)

Diese Anleitung beschreibt lediglich die Installation eines lokalen Webservers für die Produktion von PHP-Anwendungen. Diese Art der Installation ist aus Sicherheitsgründen nicht für einen Dienst im World Wide Web geeignet!

Pakete installieren

MariaDB ersetzt zunehmend MySQL. Datenbanken, die ursprünglich mit MySQL erstellt wurden, lassen sich in der Regel problemlos auch unter MariaDB verwenden.

Installation aus den offiziellen Paketquellen:

sudo apt-get install apache2 php php-intl mariadb-server phpmyadmin

Installation per apturl symbol: question

Alle weiteren benötigten Pakete werden über die Paketabhängigkeiten mitinstalliert. Individuelle Erweiterungen, wie im Beispiel php-intl für Punycode-Unterstützung müssen entsprechend selbst gewählt und installiert werden.

Bei der Installation von phpMyAdmin ist es im Normalfall ausreichend, apache2 zu konfigurieren. (Markierung der Option im Terminal durch Leertaste)

Die Frage ›Konfigurieren der Datenbank für phpmyadmin mit dbconfig-common?‹ kann man bejahen.

Es wird nach einem Passwort für den Benutzer phpmyadmin gefragt. Diesen Punkt kann man überspringen, da dieser Benutzer über keine ausreichenden Privilegien zur Administration von Datenbanken verfügt, was beim Benutzer root allerdings der Fall ist und dessen Passwort wir in einem der nächsten Schritte explizit festlegen werden. Datenbanken und ggf. weitere Benutzer können dann später durch root eingerichtet und verwaltet werden.

Apache nach außen absichern

Damit Außenstehende über das Internet nicht den vollen Zugriff auf die eigenen Dateien unter localhost haben (durch Aufruf der eigenen IP-Adresse), muss der Apache-Server nach der Installation nun nach außen abgesichert werden, es sei denn, man befindet sich z. B. in einem lokalen Netzwerk hinter einem Router. Dazu ändert man mit Rootrechten die Datei ports.conf mit Hilfe eines Texteditors (z. B. Xed):

sudo xed /etc/apache2/ports.conf

Der ursprüngliche Eintrag Listen 80 wird nun zu Listen 127.0.0.1:80 geändert.

PHP konfigurieren

Die Feineinstellung von PHP erfolgt in der Datei php.ini (s. PHP-Dokumentation):

sudo xed /etc/php/8.1/apache2/php.ini

Hier können bei Bedarf einige Änderungen vorgenommen werden. In einer lokalen Entwicklungsumgebung möchte man vermutlich Fehlermeldungen angezeigt bekommen. Dazu ändert man folgende Variable:

display_errors = On

Um sämtliche Fehlermeldungen, Warnungen und Hinweise anzeigen zu lassen, ändert man folgende Variable (s. PHP.net):

error_reporting = E_ALL

Diese Einstellung kann in einem PHP-Skript während der Laufzeit vorübergehend durch die Funktion error_reporting() überschrieben werden (s. PHP.net).

Weitere Variablen, die man hier möglicherweise einstellen möchte, sind upload_max_filesize sowie max_execution_time.

Rootpasswort des Datenbank-Servers festlegen

Die Anmeldung am Datenbank-Server kann im Terminal zunächst ohne Passwort erfolgen. Die PHP-Funktion mysqli_connect() benötigt zur Anmeldung allerdings ein Passwort und auch bei phpMyAdmin ist eine Anmeldung ohne Passwort nicht ohne Weiteres möglich. Daher wird in diesem Schritt ein Passwort für den Rootzugang zum Datenbank-Server festgelegt.

Mit sudo mariadb -u root meldet man sich ohne Passwort beim Server an. Hier gibt man folgenden Befehl ein (der Platzhalter ROOTPASSWORD ist durch das gewünschte Passwort zu ersetzen):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ROOTPASSWORD';

Mit exit; verlässt man den Server dann wieder.

Ab sofort ist die passwortlose Anmeldung im Terminal nicht mehr möglich und erfolgt daher mit dem Befehl mariadb -u root -p -h localhost.

Dateizugriff auf /var/www/html herstellen

Der Ordner /var/www/html ist der, auf den http://localhost/ bzw. http://127.0.0.1/ verweist, und in dem die eigenen Produktionsdateien liegen werden.

Nun haben wir aber das Problem, dass der Benutzer von Apache in der Voreinstellung den Namen www-data trägt, was dazu führt, dass weder www-data noch ich als normaler Benutzer Schreibrechte für /var/www/html besitzen, da dieser Ordner bei der Installation von LAMP mit Rootrechten angelegt wurde und daher zunächst root gehört.

Dies kann man aber ändern, indem man sich selbst zum Besitzer des Wurzelordners macht (der Platzhalter BENUTZER ist durch den eigenen Benutzernamen zu ersetzen):
sudo chown BENUTZER:BENUTZER /var/www/html && sudo chmod 775 /var/www/html

Anschließend ändert man noch den Apache-Benutzer:
sudo xed /etc/apache2/envvars
In dieser Datei ändert man den Wert der Variablen APACHE_RUN_USER und APACHE_RUN_GROUP auf den eigenen Benutzernamen.

Mit sudo service apache2 restart wird Apache mit diesen Änderungen neu gestartet. (Dieser Befehl ist auch nach allen späteren Änderungen der Apache-Konfiguration notwendig.)

Nun können unter /var/www/html die eigenen Produktionsdateien erstellt bzw. dorthin kopiert werden.

phpMyAdmin aufrufen

Die eventuell benötigten Datenbanken können nun über das Terminal, per PHP-Skript oder über phpMyAdmin eingerichtet bzw. importiert werden.

Unter http://localhost/phpmyadmin/ kann man die Benutzeroberfläche von phpMyAdmin aufrufen. Dort meldet man sich mit den gleichen Anmeldedaten an, mit denen man sich auch im Terminal oder mit PHP am Datenbank-Server anmelden würde. Also beispielsweise als root mit dem oben festgelegten Rootpasswort.

Falls man den Import von SQL-Dateien nicht über phpMyAdmin, sondern über das Terminal abwickeln möchte, erfolgt das mit einem Befehl nach folgendem Muster:

mariadb -u BENUTZER -pPASSWORT DATENBANKNAME < /pfad/zur/datei/MeinBackup.sql

Die Platzhalter BENUTZER, PASSWORT und DATENBANKNAME sowie der Pfad zur Backupdatei müssen angepasst werden. Kein Leerzeichen nach -p, es sei denn, es ist das erste Zeichen des Passwortes!

Beispielsweise:

mariadb -u web123 -phGtGvFeDfZHjIu usr_web123_1 < /pfad/zur/datei/MeinBackup.sql

Der Export erfolgt über folgenden Befehl:

mariadb-dump -u BENUTZER -pPASSWORT DATENBANKNAME > /pfad/zur/datei/MeinBackup.sql

Weitere Informationen zu phpMyAdmin: UbuntuUsers-Wiki

Das war’s schon. LAMP ist nun fertig installiert. Die folgenden Abschnitte sind als Anhang zu verstehen.


Apache case-insensitive konfigurieren

Sollte der Apache-Server auf Anfrage ein PHP-Skript als Quelltext senden, statt es zu interpretieren, wenn die Dateinamenserweiterung der PHP-Datei nicht ausschließlich aus Kleinbuchstaben besteht (also z. B. .PHP statt .php), so kann man dieses Problem beheben, indem man eine Änderung in der Datei php7.2.conf vornimmt:

sudo xed /etc/apache2/mods-available/php7.2.conf

Hier findet man folgende Zeilen:

Code kopieren
<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Der reguläre Ausdruck .+\.ph(ar|p|tml)$ muss hier durch .+\.(?i:ph(ar|p|tml))$ ersetzt werden, wodurch die case-sensitivity auf case-insensitive gesetzt wird und somit sowohl Klein- als auch Großbuchstaben in der Dateinamenserweiterung akzeptiert werden:

Code kopieren
<FilesMatch ".+\.(?i:ph(ar|p|tml))$">
    SetHandler application/x-httpd-php
</FilesMatch>

Nach dieser Änderung die Datei speichern und schließen. Anschließend den Apache-Server neu starten:

sudo service apache2 restart

Siehe auch: <FilesMatch>

Start- und Stop-Befehl für Apache

Mit folgenden Befehlen kann der Apache-Server über das Terminal gesteuert werden:

sudo service apache2 start  (Starten)
sudo service apache2 restart  (Neustarten)
sudo service apache2 stop  (Anhalten)

mod_rewrite aktivieren

Um das Apache-Modul mod_rewrite zu verwenden, was z. B. bei der URL-Umwandlung lokal installierter Content Management Systeme nützlich sein kann, geht man folgendermaßen vor:

sudo a2enmod rewrite
sudo service apache2 force-reload

Anschließend noch in der Konfigurationsdatei 000-default in der Rubrik <Directory /var/www/> den Wert von AllowOverride von None auf All ändern (s. Ausschnitt unten) und den Browser neu starten.

sudo xed /etc/apache2/sites-enabled/000-default

Code kopieren
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>