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