Moderne Website-Entwicklung mit Servervariablen

Posted on by Julian Stock.

Jeder kennt das: Man entwickelt eine Website auf dem eigenen PC/Mac/Gummiboot mit einer lokal laufenden XAMPP (o. ä.) Installation und lädt das Projekt nach Fertigstellung hoch. Nach einem halben Jahr meldet sich der Kunde mit Änderungswünschen. Man lädt alle Dateien wieder herunter (wahlweise per Git, SFTP oder Rauchzeichen), zieht sich einen Datenbankdump und die Mediadaten. Anschließend muss man noch die Verbindungsdaten der Datenbank anpassen (und bei WordPress viele weitere Querverweise) und kann endlich mit den Anpassungen starten.

Macht man es "richtig", testet man seine Änderungen nach der lokalen Entwicklung noch auf einem Staging/QA/Test-System, welches auch der Kunde einsehen kann. Im besten Fall hat man noch eine Continuous Delivery Pipeline, die einem nach dem erfolgreichen Mergen in den Master-Branch die Änderungen auf das Test/Produktiv-System deployed.

Und hier irgendwo beginnt der Spaß.

Moderne Website-Entwicklung mit Servervariablen

Wenn man zwischen all den Umgebungen/Servern die Datenbankverbindungen anpassen und sicherstellen muss, dass man sich immer auf den richtigen Verzeichnisebenen aufhält, passieren schnell Fehler. Ich habe mir angewöhnt, sämtliche "Umgebungsvariablen" in einer ausgelagerten Datei .env.php zu hinterlegen, diese Datei zu inkludieren und kann so mittels Umgebungserkennung in der .htaccess Datei mit SetEnvIf (SetEnvIf auf apache.org) bequem zwischen den einzelnen Systemen wechseln.

In der .htaccess nutze ich dann folgendes Snippet:

SetEnvIf Host ^(www\.)?shinefour\.de$ APPLICATION_CONTEXT=Production
SetEnvIf Host ^test\.shinefour\.de$ APPLICATION_CONTEXT=Testing
SetEnvIf Host ^shinefour\.localhost$ APPLICATION_CONTEXT=Development

<If "req('Host') == 'test.shinefour.de'">
    AuthUserFile /var/www/vhosts/httpdocs/test.shinefour.de/.htpasswd
    AuthType Basic
    AuthName "shinefour.de Testing"
    Require valid-user
</If>

Und in der .htpasswd befinden sich die Zugangsdaten für das Testsystem (damit die Inhalte dort nicht versehentlich veröffentlicht oder durch Google indiziert werden).

Moderne Website-Entwicklung mit Servervariablen

Durch selbst definierte Variablen in der .env.php kann ich nun außerdem bestimmte Elemente de-/aktivieren, beispielsweise Google Analytics. Statistiken interessieren mich während der Entwicklungsphase nämlich relativ wenig nicht.

Der größte Vorteil ist dabei, dass man nach wie vor alles schön versionieren kann und nicht mehr darauf achten muss, dass sämtliche Zugangsdaten und Pfadangaben der aktuellen Laufzeitumgebung entsprechen. Und für die Sicherheitsfanatiker: Man kann auch prima die Versionierung der Zugangsdaten vom Repository mittels .gitignore ausschließen.

Abgeschaut/Inspiriert habe ich mir das Vorgehen irgendwann einmal bei einem TYPO3 Projekt. Dort gibt es für die Laufzeitumgebungen die Variable TYPO3_CONTEXT, die man ähnlich steuern kann.

Wie arbeitet ihr? Habt ihr solche Umgebungsvariablen schon einmal genutzt?

Bis zum nächsten Mal,
Julian


Julian Stock
Webentwickler aus Lübeck · 35 Jahre

Social