Docker-Poxy-Stack

Wenn man als Fullstack-Webentwickler seiner täglichen Arbeit nachgeht, ist an manchen Tagen ein Springen zwischen vielen Projekten notwendig. Ein Kunde benötigt ein neues Feature, für den nächsten müssen Übersetzungen und Texte angepasst werden, ein Dritter meldete einen Bug, den wir lösen müssen, und zuletzt entwickelt man vielleicht noch ein völlig neues Projekt. Noch vor einigen Jahren habe ich dafür XAMPP auf meinem Windows Rechner verwendet. Oh man, was hat sich seither verändert…

Der XAMPP oder LAMP Stack

LAMP steht für „Linux, Apache, MySQL, PHP/Perl“ und war bis vor wenigen Jahren das Basis-Entwicklertool. Auch heute wird damit noch viel Software entwickelt. XAMPP ist die Windows Variante des Stacks und agiert genauso. Das Problem an diesem Stack: Auf manchen Systemen ist es schwer einzurichten, die Konfiguration ist ziemlich starr, lässt wenig Veränderung zu und die MySQL und PHP Versionen sind mit der Version des Installers „verbundled“. Somit laufen alle Projekte auf einer mehr oder minder alten PHP Version.

Kein schönes Szenario. Ein anderer Ansatz soll her…

Docker kann fast alles!

Mit Docker wird unsere Welt schon viel programmier-freudiger: Docker ist auf vielen Betriebssystemen einfach zu installieren. Natürlich braucht es noch das eine oder andere Wissen über den Wal und seine Container, um wirklich damit arbeiten zu können. Dafür ist die Version unserer Entwicklertools nur an ein Image gebunden. Und wenn wir mehr Versionen benötigen, werden einfach mehr Docker-Images gebaut.

Haben wir uns ein schönes Docker-Image zusammengestellt, welches den LAMP Stack enthält, müssen wir den Container nur noch hochfahren. Unsere lokale Testinstanz der Website läuft dann auf dem Localhost. Dazu vielleicht noch ein PhpMyAdmin für die Interaktion mit der Datenbank auf dem Port 8080. Schwierig wird es jetzt nur, wenn wir ein weiteres Projekt starten wollen: Der Port 80 ist bereits belegt, sagt die Docker-Engine…

Hier müssen wir also jedem Projekt einen eigenen Port zuordnen, wobei uns bald der Überblick verloren geht. Docker ist außerdem effizienter, wenn es als Microservice-Architektur genutzt wird. Alle Dienste in ein Image zu installieren sollte eher eine Ausnahme sein. Wie können wir unsere Situation verbessern?

Der Docker-Proxy-Stack soll es besser machen

Heute habe ich für all dies eine gute Lösung auf meiner Linux-Maschine: Den Docker-Proxy-Stack. Aus einer Idee von Kollegen ist ein rundes Projekt geworden, welches wir nun auch auf GitHub veröffentlicht haben. Aber warum dieser, statt den ober präsentierten Lösungen?

Der Proxy-Stack ist ein ausgefeiltes System verschiedenster Docker Images, deren Ziel es ist:

  • parallel verschiedene Projekte auf eigenen Domains zu unterhalten,
  • das https Protokoll (SSL) durch selbst-signierte Zertifikate zu erlauben,
  • einen zentralen Datenbankserver für alle Projekte anzubinden,
  • mehrere Datenbanktechnologien zur Verfügung zu stellen,
  • Frontend-Lösungen für Datenbankverwaltung bereitzustellen, sowie
  • einen Mailcatcher zu nutzen, um E-Mails lokal testen zu können.

Jeder Dienst ist in einem eigenen Container untergebracht: Der NGINX-Proxy für die Verteilung der Anfragen, die MySQL Datenbank, PostgreSQL, der Mailcatcher, usw. Dies macht das Netzwerk von Services leicht erweiterbar und auch austauschbar. Das Tool soll schließlich bei der Entwicklung zur Seite stehen.

Im Repository findet sich eine Anleitung für die Installation. Während die erste Konfiguration vielleicht komplex erscheint, steigt die Einfachheit und der Nutzen mit jedem neuen Projekt. Die Nutzung unter Windows ist zum aktuellen Zeitpunkt jedoch sehr eingeschränkt und mit viel manueller „Verdrahtung“ verbunden.

Zusammen arbeiten wir weiter an unserem Development-Tool. Neben einer Steuerung einzelner Services des Stacks, soll z.B. noch ein einstellbarer Quota folgen. Ideen haben wir jedenfalls genug und wer weiß, was der Zugang zur GitHub Community noch bringen wird.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.