Sprache auswählen

Tutorial

Docker-LAMP Tutorial mit pragmatischer Rechtebehandlung

Ein lokales Docker-LAMP-Setup, bei dem Apache und Host-Benutzer mit denselben Dateien arbeiten können, ohne ständig an Besitzern, Gruppen oder Root-Rechten zu scheitern.

docker lampWie ihr wahrscheinlich bereits festgestellt habt, ist das Rechtemanagement zwischen Docker-Containern und Host-Benutzern eine heikle Angelegenheit. Genau an diesem Punkt setzt dieses Docker-LAMP-Setup an.

Der Unterschied zu vielen anderen LAMP-Containern besteht hier nicht in einer exotischen Architektur, sondern in der Rechtebehandlung. Bei diesem LAMP-Setup setzt der Apache-Server automatisch die Rechte auf 777 beim Erstellen von Dateien. Dies geschieht durch die Verwendung von umask. Dadurch lassen sich Dateien auf dem Host leichter ohne root bearbeiten.

Damit das aber auch in die andere Richtung funktioniert - also dass der Apache-Server Dateien ändern kann, die auf dem Host im www-Ordner erstellt wurden - müssen die Gruppenrechte sauber vorbereitet werden. Genau darum geht es in dieser Anleitung.

Das Setup besteht aus:

- Apache/PHP für die Anwendung
- MariaDB für die Datenbank
- phpMyAdmin für die Datenbankverwaltung

Der eigentliche Punkt dieses Setups ist nicht nur Docker selbst, sondern die Frage, wie Container und Host ohne ständigen Rechtekampf auf denselben Webroot zugreifen können.

1. ZIP-Datei herunterladen und entpacken

Zuerst die Docker-LAMP-Datei herunterladen und in einen Ordner entpacken:

LAMP-DOWNLOAD

unzip lamp.zip -d lamp
cd lamp

2. Pfad zum Webverzeichnis in der docker-compose.yml anpassen

In der docker-compose.yml muss der Pfad zum lokalen Webserver-Verzeichnis angepasst werden. Relevant ist das Volume des Apache/PHP-Containers.

Datei öffnen:

nano docker-compose.yml

Beispiel:

volumes:
  - /srv/docker/lamp/www/:/var/www/html/

3. Docker Compose starten

Wenn der Pfad korrekt gesetzt ist, kann der Stack gebaut und gestartet werden:

sudo docker compose up -d --build

Zur Kontrolle:

sudo docker compose ps

4. Warum die Rechte in diesem Setup besonders wichtig sind

Der praktische Vorteil dieses Setups ist, dass Apache Dateien mit offenen Rechten anlegen kann. Dadurch ist das Ändern auf dem Host deutlich entspannter als bei vielen anderen LAMP-Containern.

Das Problem verschiebt sich aber in die andere Richtung: Wenn Dateien auf dem Host erstellt und in den www-Ordner kopiert werden, muss Apache sie später ebenfalls ändern können. Dafür müssen zumindest die Gruppenrechte stimmen.

Deshalb sollte nach dem Erstellen von Ordnern oder Dateien im www-Ordner deren Gruppenzugehörigkeit geändert und am besten gleich Lese- und Schreibrechte gesetzt werden.

Normalerweise wird der Apache-Server als Benutzer mit der ID 33 gestartet. Je nach System heisst diese ID 33 meist www-data oder http.

4.1. Aktuellen Eigentümer und die Gruppe prüfen

Bevor etwas angepasst wird, sollte zuerst geprüft werden, wem der Webroot aktuell gehört und welche Gruppen gesetzt sind. Das geht im Terminal oder im Dateimanager. Im Terminal helfen zum Beispiel diese Befehle:

ls -ln /srv/docker/lamp/www
stat -c '%U %G %u %g' /srv/docker/lamp/www
getent group 33

Wenn statt Benutzer- oder Gruppennamen nur IDs angezeigt werden, ist das ein Hinweis darauf, dass die Zuordnung auf dem Host noch nicht sauber vorhanden ist.

4.2. Gruppe mit der ID 33 vorbereiten

Die Gruppen-ID sollte in der Regel 33 sein. Der Gruppenname ist meist www-data, manchmal auch http. Wenn diese Gruppe auf dem Host noch nicht existiert, kann sie mit dem Benutzer zusammen angelegt werden:

sudo groupadd -g 33 www-data
sudo useradd -u 33 -g 33 -M -N www-data

Danach sollte der eigene Benutzer zur Gruppe hinzugefügt werden:

sudo usermod -aG 33 "$USER"

Bei Bedarf kann für den aktuellen Benutzer in der aktuellen Session die primäre Gruppe geändert werden.

newgrp www-data

Wenn die Gruppe bereits existiert, ist groupadd und useradd nicht nötig. Dann reicht das Hinzufügen des Benutzers zur vorhandenen Gruppe.

4.3. Gruppe nach dem Kopieren von Dateien anpassen

Wenn Dateien in den www-Ordner kopiert oder erstellt werden, sollte danach die Gruppe auf die Apache-Gruppe gesetzt werden, damit der Webserver später damit arbeiten kann:

sudo chgrp -R www-data /srv/docker/lamp/www

Optional zur Kontrolle:

ls -ln /srv/docker/lamp/www

Damit ist sichergestellt, dass Dateien, die vom Host kommen, für Apache nicht plötzlich zum Problem werden.

5. Wichtiger Hinweis zum Start des Servers

Bei jedem Start des Servers werden die Rechte des gesamten www-Ordners neu gesetzt. Genau das ist lokal bequem, kostet aber mit wachsender Dateimenge Zeit.

Wichtig zu wissen:

- Je mehr Dateien im www-Ordner liegen, desto länger dauert der Start.
- Das Verhalten kommt aus der run.sh.
- Dort werden aktuell chown und chmod auf den gesamten Webroot ausgeführt.

Die relevanten Zeilen sehen so aus:

chown -R www-data:www-data /var/www/html
chmod -R 777 /var/www/html

Theoretisch kann man dieses Verhalten umgehen, indem diese Zeilen in der run.sh auskommentiert oder angepasst werden. Dann wird das Setup strenger, aber auch weniger bequem.

6. Ergebnis

Wenn alles richtig vorbereitet ist, hat dieses Setup genau den Vorteil, für den es gedacht ist:

- Apache kann Dateien im Container ändern
- der Host-Benutzer kann dieselben Dateien ohne ständigen root-Umweg bearbeiten
- lokale Joomla- und PHP-Projekte lassen sich deutlich unkomplizierter pflegen

Das ist kein Produktionsmodell, sondern ein bewusst pragmatisches Entwicklungssetup. Gerade für lokale Arbeit kann genau dieser Kompromiss aber sinnvoll sein.