Zum Kontext: Ich verwende einen Debian- oder Ubuntu-Server mit Apache 2.4, PHP 7.2 und einigen anderen Dingen, um eine Entwicklungs- und Testumgebung für Entwickler und Techniker für die Arbeit einzurichten.
Ich bin gefolgt vonTutorial zum Massen-Virtualhostverwenden mod_vhost_alias
, damit ich Dinge wie diese bekomme:
path: /var/www/{projectname}/public
url: {projectname}.dev.mycompany.net
Die entsprechende Konfiguration sieht wie folgt aus (entsprechend bearbeitet)
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
Jetzt funktioniert alles einwandfrei und Entwickler können ihre eigenen Projekte ganz einfach starten, indem sie einen Benutzer anfordern. Der Benutzer wird erstellt und der www-data
Gruppe hinzugefügt. Anschließend werden die entsprechenden Ordner in /var/www mit einer Struktur wie dieser erstellt:
projectname:projectname rwxrwxr-x /var/www/projectname
www-data:www-data rwxrwsr-x /var/www/projectname/public
setfacl -m user:www-data:rwx /var/www/projectname
setfacl -R -m user:projectname:rwx /var/www/projectname/public
(Letzteres war erforderlich, damit Dateien, die beispielsweise von installierten Frameworks oder Entpackern erstellt wurden, tatsächlich vom Webserver verarbeitet werden konnten)
Das hat natürlich den Nachteil, dass jedes Projekt Inhalte in jedes andere Projekt schreiben kann, also möchte ich daran arbeiten. Allerdings möchte ich, wo möglich,haltendie Automatisierung, da die Entwickler und Techniker in der Lage sein sollten, Projekte mit möglichst geringem Input vom Backend zu starten („Ablenkung vom Backend kommt später“, sagte der Chef).
Um die Dinge nun sicher zu machen, sie aber trotzdem einfach zu halten, möchte ich Apache (oder PHP?) so einrichten, dass der entsprechende Benutzer zum Ausführen des Webserver-/PHP-Prozesses für jeden virtuellen Host verwendet wird. Das bedeutet beispielsweise, dass das Projekt /var/www/foo1
unter dem Benutzer ausgeführt wird foo1
und keinen Zugriff auf Dateien unter hat /var/www/foo2
. Natürlich erwarte ich, dass ich die Berechtigungen und die ACL entsprechend anpassen muss.
Ich kann jedoch keine Dokumentation finden, wie man separate Benutzer einrichtet, währendherumhaltendie Automatisierung für Massen-Virtual-Hosts. Ich gehe davon aus, dass es das geben muss – Hosting-Unternehmen würden so etwas schließlich tun. Aber ich habe mir eine Menge Sachen angesehen und nichts scheint eine Alternative zu bieten, die funktioniert.
Ich wurde höchstens zu apache2-mod-itk weitergeleitet, aber nach der Installation kann der Webserver immer nicht gestartet werden, egal was passiert, selbst wenn die meisten Konfigurationsdateien auf die Standardkonfiguration zurückgesetzt werden. Das ist also keine Option.
Ich suche nach etwas, das eine ähnliche Wirkung wie dieser Apache-Konfigurations-„Pseudocode“ hätte:
<Virtualhost *:443>
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
User %-4
Group %-4
SuexecUserGroup %-4
CustomLog /var/www/%-4/logs/access.log vcommon
[...other directives]
</Virtualhost>
Gibt es so etwas in Apache/+PHP oder sollte ich nach einer anderen Art von automatisierter Lösung suchen?
Beachten Sie, dass ichnichtmöchte am Ende das Ganze aufteilen in z. B.: einen Docker oder eine VM für jeden Benutzer, es sei denn, es gibt eine einfache, mass_vhosts-ähnliche Möglichkeit, die Einrichtung zu automatisieren; das würde noch mehr Aufwand erfordern (ganz zu schweigen davon, den Technikern Root-Berechtigungen(?) zum Ausführen und Installieren von Docker-Containern zu erteilen) und außerdem die laufende Automatisierung unterbrechen (wie verbinden Sie die Subdomänen dynamisch mit den Containern?).