Einrichten eines lokalen LAMP-Servers #

(unter Linux Mint 19)

Übersicht
Pakete installieren
Apache nach außen absichern
Dateizugriff auf /var/www/html herstellen
Produktionsdateien einbinden
Fehlermeldungen aktivieren
Apache case-insensitive konfigurieren

phpMyAdmin aufrufen
Start- und Stop-Befehl für Apache
mod_rewrite aktivieren
LAMP deinstallieren
Weiterführende Websites

Ein LAMP-Server ist ein lokaler Webserver, der unter Linux die Produktion von dynamischen Websites unter Verwendung von PHP und MySQL 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.29 (Webserver)
PHP-Modul 7.2.7 (Skriptinterpreter)
MySQL-Server 5.7.22 (Datenbank)
phpMyAdmin 4.6.6 (Verwaltungsoberfläche für MySQL)

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 #

Die benötigte Software ist standardmäßig nicht in Linux Mint enthalten, kann aber bequem über das Terminal installiert werden:

sudo apt-get install apache2 libapache2-mod-php php php-gd mysql-server phpmyadmin

Installation per apturl symbol: question

Alle weiteren benötigten Pakete werden über die Paketabhängigkeiten mit installiert. Individuelle Erweiterungen, wie im Beispiel php-gd für die GD Library, müssen entsprechend selbst gewählt und installiert werden.

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

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

In der Vergangenheit hatte man bei der Installation des MySQL-Servers die Möglichkeit, für den Benutzer root ein Passwort anzugeben. Inzwischen wird der Benutzer root automatisch ohne Passwort eingerichtet, was dazu führt, dass der Versuch, sich ohne Passwort als Root beim Server anzumelden, mit der Meldung Access denied for user 'root'@'localhost' quittiert wird. Dies ist ebenso bei phpMyAdmin der Fall. Ich habe bislang keine Möglichkeit gefunden, ein Passwort für root festzulegen, allerdings existiert auch ein Benutzer debian-sys-maint mit gleichen Privilegien. Daher kann man sich alternativ als dieser Benutzer beim Server anmelden. Dass Passwort für diesen Benutzer findet man in der Datei /etc/mysql/debian.cnf.

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.

Dateizugriff auf /var/www/html herstellen #

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

Nun haben wir aber das Problem, dass der Benutzer von Apache 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 root gehört.

Dies kann man aber ändern, indem man zunächst der Gruppe www-data beitritt:

sudo adduser <Benutzer> www-data && newgrp www-data

Der Platzhalter <Benutzer> ist durch den eigenen Benutzernamen zu ersetzen. Anschließend werden Besitzer und Gruppe von /var/www/html von root auf www-data geändert und der Gruppe www-data Schreibrechte auf dieses Verzeichnis gewährt, damit die eigenen Produktionsdateien dorthin kopiert werden können:

sudo chown www-data:www-data /var/www/html && sudo chmod 775 /var/www/html

Produktionsdateien einbinden #

Nun kann man die Dateien der eigenen Webprojekte in einen entsprechenden Ordner unterhalb von /var/www/html kopieren. Falls dies aufgrund von fehlenden Rechten nicht gelingen sollte, muss man sich über Strg+Alt+⬅   zunächst neu anmelden und dann das Kopieren wiederholen. Anschließend ändert man Besitzer und Gruppe dieser Dateien auf www-data:

sudo chown -R www-data:www-data /var/www/html

Normalerweise macht es Sinn, die Zugriffsrechte für diese Dateien nun so einzustellen, dass man selbst und www-data Lese- und Schreibzugriff besitzen:

sudo find /var/www/html -type d -exec chmod 775 '{}' \;   (Ordner: rwx rwx r_x)
sudo find /var/www/html -type f -exec chmod 664 '{}' \;   (Dateien: rw_ rw_ r__)

Werden nun nachträglich weitere Ordner oder Dateien vom normalen Benutzer unterhalb von /var/www/html hinzugefügt, so sollte man sicherstellen, dass diese nach der gerade beschriebenen Methode mit den entsprechenden Rechten auf den Benutzer www-data übertragen werden, wenn PHP-Skripte auf diese Objekte Zugriff haben sollen. Zum Beispiel kann man folgendes Shellskript unter /var/www/html/www-data.sh speichern und dann im Terminal über

sudo bash /var/www/html/www-data.sh

ausführen lassen:

Quelltext auswählen
1
2
3
4
#!/bin/bash
chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod 775 '{}' \;
find /var/www/html -type f -exec chmod 664 '{}' \;

Fehlermeldungen aktivieren #

Die Anzeige von PHP-Fehlermeldungen ist per Voreinstellung deaktiviert. In einer lokalen Entwicklungsumgebung ist es daher sinnvoll, Fehlermeldungen zu aktivieren. Dies geschieht durch Bearbeiten der Datei php.ini.

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

Hier sucht man die Zeile, die mit der Variable display_errors beginnt, und setzt den Wert von Off auf On:

display_errors = On

An anderer Stelle in dieser Datei findet man die Variable error_reporting, in der festgelegt wird, welche Fehler angezeigt werden. Eine Liste der möglichen Werte findet man im PHP-Handbuch. Diese Vorgabe kann in einem PHP-Skript während der Laufzeit vorübergehend durch die Funktion error_reporting() überschrieben werden.

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

Anschließend speichert man die Datei und startet den Apache-Server neu:

sudo /etc/init.d/apache2 restart

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 php5.conf vornimmt:

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

Hier findet man folgende Zeilen:

Quelltext auswählen
1
2
3
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Der reguläre Ausdruck .+\.ph(p[3457]?|t|tml)$ muss hier durch .+\.(?i:ph(p[3457]?|t|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:

Quelltext auswählen
1
2
3
<FilesMatch ".+\.(?i:ph(p[3457]?|t|tml))$">
    SetHandler application/x-httpd-php
</FilesMatch>

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

sudo /etc/init.d/apache2 restart

Siehe auch: <FilesMatch>

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

phpMyAdmin aufrufen #

Unter http://localhost/phpmyadmin/ kann man die Benutzeroberfläche von phpMyAdmin aufrufen. Dort muss man sich als root mit dem oben festgelegten Root-Passwort für den MySQL-Server anmelden.

Falls der Import von SQL-Dateien in phpMyAdmin nicht funktioniert, kann man dies auch über das Terminal erledigen:

mysql -u <Benutzer> -p<Passwort> <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 Teil des Passwortes!

Beispielsweise:

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

Der Export erfolgt über folgenden Befehl:

mysqldump -u <Benutzer> -p<Passwort> <Datenbankname> > /pfad/zur/datei/MeinBackup.sql

Weitere Informationen zu phpMyAdmin: UbuntuUsers-Wiki

Start- und Stop-Befehl für Apache #

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

sudo /etc/init.d/apache2 restart  (Neustarten)
sudo /etc/init.d/apache2 stop  (Anhalten)
sudo /etc/init.d/apache2 start  (Starten)

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 /etc/init.d/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

Quelltext auswählen
1
2
3
4
5
6
	<Directory /var/www/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>

LAMP deinstallieren #

Um den LAMP-Server wieder vom System zu entfernen, sollte die Deinstallation folgender Pakete ausreichen:

sudo apt-get purge apache2 libapache2-mod-php php mysql-server phpmyadmin
sudo apt-get autoremove