Der cloudtec Plattform-Stack
Jede Plattform, die wir bauen, startet auf derselben Basis. Woraus dieser Stack besteht, wie er entstanden ist und welche Umwege wir dabei genommen haben.
Im Beitrag Stack als Basis für Online-Plattformen und Portale ging es darum, was ein Software-Stack allgemein leistet. Hier wird es konkret: unser eigener Stack, seine Bestandteile und die Gründe für den Aufbau.
Die Bausteine sind durchgehend etablierte Open-Source-Komponenten. Das ergibt eine Basis, die auf langen Betrieb ausgelegt ist und trotzdem flexibel bleibt: einzelne Teile lassen sich austauschen, ohne dass alles daran hängt.
Wie der Stack entstanden ist und was zuerst schiefging
Auch bei uns läuft jedes Projekt im Spannungsdreieck aus Zeit, Qualität und Budget. Die Idee, neue Projekte immer auf derselben Software- und Infrastruktur-Basis zu starten, kam aus der simplen Beobachtung, dass wir denselben Unterbau immer wieder neu bauten.
Der erste Anlauf scheiterte trotzdem. Neue Entwicklungen liessen sich nicht in den Stack zurückspielen, er konnte also nicht mit den Projekten mitwachsen und das Setup wurde kein Stück schneller. Die Lösung waren Branching und Sub-Tree-Splits: Verbesserungen aus einem Projekt landen seither wieder in der gemeinsamen Basis.
Ein zweiter Umweg waren die Templates. Zu Beginn nutzten wir viele verschiedene, was Verwaltung und Gestaltung unnötig aufwendig machte. Mit dem Entscheid für eine feste Template-Library wurden Entwicklung und Design einheitlich. Anpassen an Corporate Design und Kundenwünsche lässt sich weiterhin alles. Gleichzeitig haben wir die Applikationssprache von Deutsch auf Englisch umgestellt.
Auch der Deployment-Prozess wurde Schritt für Schritt vereinheitlicht. Die Ausfallzeit während eines Deployments liegt seither bei höchstens rund 20 Sekunden. Server- und Datenbankkonfiguration sowie das File-System-Management überarbeiten wir laufend. Weil der Stack von der Infrastruktur bis zur Software durchgeht, ist die Installation zu einem grossen Teil standardisiert. Das senkt die Komplexität einer Plattform und vereinfacht ihren Betrieb.
Die Ebenen des Stacks
Bei der Auswahl von Technologien, Frameworks und Sprachen gilt ein Grundsatz: Open Source. Solche Komponenten werden laufend weiterentwickelt, lassen sich tief anpassen und binden uns nicht an einen Hersteller.
Der Stack ist in vier Ebenen aufgeteilt:
- Der Infrastruktur-Layer stellt die technische Basis bereit, auf der alles läuft.
- Der Plattform-Layer liefert die Frameworks und die wiederkehrenden Funktionen einer Online-Plattform.
- Der Software-Layer ist die Individualentwicklung je Kunde.
- Der Security-Layer legt sich mit Monitoring, Fehlererkennung und ausgelagerten Backups über die anderen drei.
Der Infrastruktur-Layer
Ohne ihn läuft keine Applikation. Wir haben uns für eine einheitliche Umgebung mit Docker entschieden: Sie muss nicht mehr pro Projekt eingerichtet werden, mit je eigener PHP-Version und eigenem Betriebssystem. Lokal entsteht ein Abbild der Produktivumgebung mit denselben Konfigurationen. Das macht Einrichtung und Entwicklung schnell und die Fehlersuche berechenbar.
Docker trennt die Applikation von der Infrastruktur. Das Betriebssystem wird containerisiert und abstrahiert. So stellen wir auch Hilfsdienste wie Virenscanner und PDF-Indexierung bereit, die lokal mit den Projekt-Containern sprechen.
Dazu kommt Portainer als Container-Management: Container zentral verwalten, konfigurieren, orchestrieren und absichern, mit einer Weboberfläche für den Alltag.
Hosting, Container und virtuelles Rechenzentrum (und damit sämtliche Projektdaten) bleiben bei uns. Wir betreiben die Server und verantworten die Versionierung. Kundendaten liegen isoliert in einem eigenen Container und können sich nicht vermischen.
Zwei weitere Bestandteile dieser Ebene sind Security und DevOps. Über DevOps ist ein Grossteil der Deployment-Prozesse automatisiert. Auf der Sicherheitsseite stehen Firewall und Web Application Firewall, Netzwerksegmentierung sowie automatisierte Prüfungen im Build-Prozess.
Der Plattform-Layer
Die Basis bilden Symfony und Sylius, beide auf PHP und beliebig erweiterbar. Symfony stellt wiederverwendbare Komponenten für Webanwendungen, APIs und Microservices bereit.
Für Symfony haben wir uns entschieden, weil es genau das nicht mitbringt, was andere Frameworks aufdrängen, ein fertiges CMS zum Beispiel. Sylius setzt darauf auf und liefert die Funktionen und APIs für den Betrieb eines Webshops.
Auf dieser Basis haben wir ergänzt, was eine Online-Plattform üblicherweise braucht: Grid-Mechanismen, Filter, Benutzerverwaltung und den Unterbau für Messaging. RabbitMQ kommt dazu, damit Schnittstellen transaktionssicher angebunden werden können, und API Platform für REST- und GraphQL-Endpunkte.
Der Software-Layer
Hier trifft der Stack auf die Individualentwicklung. Er wird nach den Anforderungen des Projekts erweitert und angepasst: Oberfläche, kundenspezifische Module, Rollen und Zugriffe.
Technisch sind die Grenzen weit; die Frage ist meist eine andere. Rechtfertigt der Nutzen einer Sonderlösung ihren Aufwand, im Bau und in jedem späteren Update? Wenn nicht, ist die Standardvariante die bessere Antwort.
Was der Stack uns bringt
- Viele Geschäftsapplikationen haben ähnliche Anforderungen: Listen, Filter, Benutzerverwaltung, Workflows.
- Ein neues Projekt startet nicht bei null.
- Wer in ein bestehendes Projekt einsteigt, kennt den Aufbau bereits.
- Wiederkehrende Funktionen sind einmal gebaut und mehrfach im Einsatz.
- Die Basiskomponenten sind umfassend getestet, das kommt jedem Projekt zugute.
- Weniger Eigenbau heisst weniger technisches Risiko.
Der Stack ist kein fertiges Produkt, sondern wächst mit jedem Projekt weiter. Was sich einmal bewährt hat, steht beim nächsten Mal allen zur Verfügung.