Dynamische Entwicklungs-Hosts

Webprojekte bei der Entwicklung ohne große Apache-Konfiguration testen

Bei der Entwicklung von Web-Projekten ist es meist nötig, einen lokalen Webserver zu betreiben. Während das bei Node.js oder statischen Projekten sehr einfach ist, ist bei größeren PHP-Projekten eher der Apache HTTPd das Maß aller Dinge.

Normalerweise wird dann für eine lokale Entwicklung folgendes gemacht:

  1. Verzeichnis anlegen bzw. Projekt aus der Versionsverwaltung auschecken
  2. Eintrag in der /etc/hosts
  3. Eintrag für einen VHost in /etc/apache2/sites-available/SEITE
  4. VHost aktivieren (sudo a2ensite SEITE)
  5. Apache2 neustarten

Das ist nicht nur jedes Mal umständlich, sondern es sammelt sich auch immer Konfigurations-Müll an, der regelmäßig entfernt werden muss.

Praktischerweise ist dies alles nicht nötig!

Das Apache-Modul vhost_alias

Bei Apache gibt es ein Modul vhost_alias, das dynamische VHost-Konfiguration ermöglicht. Was eigentlich für Massen-Hoster gedacht und auch so dokumentiert ist, funktioniert auch wunderbar für unseren Zweck.

Zunächst legen wir mal etwa im Home ein Verzeichnis an, in dem die Projekte liegen sollen:

mkdir ~/prj

In dieses Verzeichnis legen wir eine Apache-Konfigurationsdatei vhosts.conf, die alle Projekt-Hosts konfiguriert:

UseCanonicalName off

<VirtualHost 127.0.0.2:80>
  VirtualDocumentRoot /home/aki/prj/%1

  <Directory "/home/aki/prj">
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride All
    		Order allow,deny
    		Allow from all
  </Directory>
</VirtualHost>

Statt /home/aki/ setzt natürlich euren eigenen Login-Namen ein. ;)

Jetzt muss die Konfigurationsdatei noch in die Apache-Konfiguration symlinkt und Apache neugestartet werden:

sudo ln -s ~/prj/vhosts.conf /etc/apache2/sites-enabled/000-vhosts.conf
sudo apache2ctl restart

Damit ist Apache HTTPd bereits vollständig konfiguriert. Es fehlt nur noch die Auflösung der Entwicklungsservernamen nach 127.0.0.2. Dies könnte jetzt über (viele) Einträge in der /etc/hosts geschehen – oder aber wir nehmen uns die Arbeit ab, indem wir einen kleinen DNS-Server einsetzen:

dnsmasq

dnsmasq ist ein kleiner DNS-Proxy, der ursprünglich dafür gedacht ist, DNS-Anfragen zu cachen. Aber er hat auch eine simple Möglichkeit, eigene Adressen zu hinterlegen, was sogar mit Wildcards geht, die wir nun ausnutzen.

Zunächst wird dnsmasq installiert. Bei Ubuntu ist das simpel:

sudo apt-get -y install dnsmasq

Nun brauchen wir noch eine Konfiguration für unsere TLD, die ich bei mir .dev genannt habe, in der Datei /etc/dnsmasq.d/dev:

address=/.dev/127.0.0.1

Nun noch den Daemon starten:

sudo service dnsmasq start

Fertig!

Ab jetzt werden alle Domains der Form ABC.dev in die Verzeichnisse /home/aki/prj/ABC aufgelöst und diese können beliebig erstellt oder gelöscht werden, ohne das noch irgendwelche Änderungen an Konfigurationsdateien nötig sind. Sollte es doch einmal einen Eintrag in der apache.conf brauchen, kann der mit den normalen Benutzerrechten schnell in der ~/prj/vhosts.conf geändert werden.

Außerdem gibt's immer noch die Möglichkeit, beliebige eigene VHosts zu definieren, die dann aber nach Möglichkeit auf 127.0.0.2 etc. liegen sollten, um mit der vhost_alias-Konfiguration nicht ins Gehege zu kommen. Letzteres ist mir noch nicht passiert, aber da die 127.-Zone groß genug ist, können wir da großzügig sein! :)

Neuen Kommentar schreiben

Flattr