Automatisation von Multisites mit "Para"

Multiply your shell . Automatisation von Multisites mit "Para"

Die Idee hinter Multisites besteht darin, mehrere Websites mit einer gemeinsamen Code-Base betreiben zu können und den Wartungsaufwand auf diese Weise zu reduzieren.

Mit Drupal lassen sich Multisites auf verschiedene Weisen realisieren. Mit dem Domain-Modul lassen sich zum Beispiel mehrere Websites in einer gemeinsamen Installation betreiben.

Aus unserer Erfahrung ist es jedoch in aller Regel empfehlenswert, dass jede Website ihre eigene Installation besitzt: im Bedarfsfall lässt sich jede Website unterschiedlich von ihren Geschwisterseiten skalieren. Betrieben werden alle Projekte über eine – möglichst große – gemeinsame Code-Base. Der jeweils individuelle Anteil an Konfiguration lässt sich mit Hilfe von Modulen wie Nimbus oder Config Split behandeln.

In dieser Konstellation muss beim Deployment dafür gesorgt werden, dass viele einzelne Schritte – wie Import der Konfiguration, Löschen der Caches oder anderes – auf jeder Geschwisterseite einzeln ausgeführt werden. Obwohl sich die Befehle bequem per Terminal abfeuern lassen, sind diese Arbeiten in der Summe zeitaufwändig und potentiell fehleranfällig.

Um dieser Herausforderung zu begegnen haben wir "Para" erschaffen, welches die gleichzeitige Ausführung von Terminal Commands an mehreren Orten ermöglicht. Para vermittelt dabei das Gefühl, nur an einer einzigen Seite zu arbeiten, obwohl sämtliche Befehle gleichzeitig auf allen Geschwisterseiten ausgeführt werden. Der Zeitaufwand für die Wartung aller Seiten reduziert sich mit Para insgesamt nur auf den Aufwand, den eine einzige Seite auslösen würde.

Besondere technische Herausforderungen bei der Erstellung von Para bestanden darin,

  • eine eigene Shell zu implementieren, bei der sämtliche Tastatureingaben des Benutzers abgefangen und diese nicht vom Betriebssystem, sondern von der Shell verarbeiten zu lassen sowie
  • die parallelen PHP-Prozesse zu erstellen und zu überwachen, die bei Ausführung eines Befehls aus der Para-Shell gestartet und anschließend wieder beendet werden.
Gleichzeitige Ausführung von Terminal Commands an mehreren Orten mit Para.
Gleichzeitige Ausführung von Terminal Commands an mehreren Orten mit Para: Ab Version 2.0 besitzt jedes Projekt seine eigene Vorder- und Hintergrundfarbe, in der die Statusmeldungen dargestellt werden.

Einrichtung und Arbeiten mit Para

Um mit Para arbeiten zu können, müssen die gewünschten Projekte erstellt und einer Gruppe zugewiesen werden:

para add:project <project_name> <project_path> [<group_name>]

Allgemeine Voraussetzung für die Verwendung von Para ist die Installation von Git und Composer auf dem System.

Das Tool haben wir generisch entwickelt, sodass es sich auch unabhängig von Drupal einsetzen lässt.

Die Konfiguration wird in einer YAML-Datei gespeichert, die sich mit dem Befehl

para config

einsehen lässt.

Befehle und Features von Para

Der Befehl

para shell [groupname]

öffnet eine neue Shell für die Gruppe mit eigener Historie. Sämtliche in dieser Shell ausgeführten Befehle werden auf alle Projekte der Gruppe gleichzeitig angewandt.

Um die Statusmeldungen eines einzelnen Projekts nachverfolgen zu können, lässt sich das gesamte Log mit dem Befehl

para show:log <project>

auf ein Projekt filtern.

Interaktive Dialoge müssen vorauseilend mit "-y" bestätigt werden.

Per Exclude lassen sich einzelne Projekte im Bedarfsfall von der Ausführung der Befehle ausschließen.

Verwendung von Docker mit Para

Beim Arbeiten mit parallelen Docker-Containern lässt sich mit dem Befehl

docker-compose -p

verhindern, dass Docker beim Starten die unterschiedlichen  Container gegenseitig überschreibt.

Special-Feature: Synchronisation von Änderungen mit Para

Ein besonderes Feature stellt die Synchronisation von Änderungen dar, die sich mit Para komfortabel nachvollziehen und freigeben lassen.

Mit dem Befehl

para sync project2 composer.json project3, project1

ermittelt Para per "git diff" die Änderungen innerhalb eines Projekt und überträgt sie auf die anderen Geschwisterprojekte.

Die Herausforderung bei der Übertragung besteht darin, dass die Zeilenanzahl der zu synchronisierenden Projekte üblicherweise unterschiedlich ist: der aus dem "git diff" resultierende Patch lässt in aller Regel nicht direkt auf die anderen Projekte anwenden. Hierfür haben wir einen doppelten Boden eingebaut, indem Para vom Benutzer die Möglichkeit bietet, die Änderungen interaktiv zu bestätigen. Diese Dialoge werden außerhalb der Para-Shell geführt.

Wenn man sich bei Drupal Updates nicht auf Constraints verlassen möchte und stattdessen Wert darauf legt, dass in allen Projekten die identischen Versionen der Module verwendet werden, ist dieses Feature besonders hilfreich: Per Hand ist es extrem unübersichtlich, die Änderungen über die referenzierten Projektversionen in der composer.json zu identifizieren und an die Geschwister-Projekte weiter zu verteilen. Die interaktiven Dialoge von Para helfen enorm, die jeweiligen Änderungen zu prüfen und zu übernehmen.

Weitere typische Anwendungsfälle von Para

Die typischen Aufgaben im Tagesgeschäft der Entwicklung paralleler Projekte sind:

  • Ausführung von Drush-Befehlen innerhalb der Docker-Container wie z.B. "drush status":
docker-compose -p $para_project exec --user drupal drupal bash -c “drush status”
  • Sicherung der Datenbank.

  • Datenbanken zwischen Production- und Staging-Umgebung synchronisieren bzw. zwischen Production- und lokaler Umgebung:

docker-compose -p $para_project exec --user drupal drupal bash -c “drush sql-sync @amazeeio-production @self -y”
  • Import der Konfiguration.

Eine vollständige Auflistung der Befehle von Para bekommt man mit:

para list

Weiterentwicklung von Para

Um Para zukünftig noch flexibler einsetzen zu können, arbeiten wir daran, dass Projekte sowohl unabhängig von Gruppen existieren als auch gleichzeitig in mehreren Gruppen enthalten sein können.

Download und Installation

Para haben wir unter der GPLv3 Lizenz Open Source gestellt und auf Github unter https://github.com/rackberg/para veröffentlicht.

Auf der Einstiegsseite bei Github wird die Einrichtung von Para mit und ohne Verwendung von Composer detailliert beschrieben. Das Changelog befindet sich hier.

Update auf Version 2.0

Bei der Migration von Para-Projekten auf die Version 2.0, die die Konfiguration von Vorder- und Hintergrundfarben je Projekt unterstützt, muss die Konfiguration angepasst werden. Eine Anleitung dazu befindet sich im Wiki.

Im Tools-Ordner befindet sich ein Skript "colortable.sh", mit dem sich die in der Shell verfügbaren Farben anzeigen lassen. Die entsprechenden Farbwerte können in der YAML-Konfiguration des Projekts eingetragen werden.

comm-press-Entwickler erweitern die Funktionalitäten, um Para zukünftig noch flexibler einsetzen zu können.
comm-press-Entwickler erweitern die Funktionalitäten, um Para zukünftig noch flexibler einsetzen zu können.

 

Sprechen Sie uns gern an, wenn Sie weitere Fragen haben oder Unterstützung bei Ihrem Projekt benötigen:

Wir beraten und unterstützen Sie bei Ihren Projekten, bieten Ihnen Workshops und schulen Ihre Mitarbeiter in PHP, Drupal oder agilem Projekt-Management.

Telefonisch, im Chat oder vor Ort: ganz wie Sie es wünschen!

Wir sind für Sie da: