comm-press: Your Drupal agency in Hamburg, Germany: Consulting, training, programming, service, webdesign and hosting

Deployment-Workshop mit Johannes von undpaul . Website-Deployment - was kann daran so schwer sein?

von John Heaven
am

Am 4. September hatten wir bei comm-press einen Workshop zum Thema "Deployment" mit Johannes Haseitl von undpaul, einer befreundeten Drupal-Agentur aus Hannover. Hier versuche ich zu erklären, was Deployment ist, warum es wichtig ist, und warum Drupal - meines Wissens - gegenüber einigen anderen Systemen hier deutliche Vorteile bietet.

Es gibt eine Vielzahl von Systemen, die mittels PHP und einer MySQL-Datenbank dynamische Inhalte erzeugen: beispielsweise WordPress, Joomla, Typo3 oder auch Drupal. MySQL und PHP sind weit verbreitet und sind einigermaßen einfach aufzusetzen: Wer sich einen virtuellen Server oder - noch einfacher - etwas Webspace bei einem Hosting-Provider holt, kann sich ein CMS aussuchen, PHP-Dateien hochladen, Datenbank-Zugangsdaten eingeben und - vielleicht nach etwas Konfiguration und ein paar CSS-Anpassungen - den Content einpflegen. Fertig! (Probiert es doch mal, es ist wirklich nicht schwer.)

Spätestens wenn das erste Software-Update kommt, muss man sich mit dem Thema Deployment auseinandersetzen. Wie bekomme ich die aktuelle Version der Software auf den Server, ohne meine ganzen Inhalte zu zerstören? Ganz einfach: die Datenbank kopieren (mit mysqldump oder phpMyAdmin), den Quellcode herunterladen und sicher aufheben, falls beim Update etwas schiefläuft. Dann die neue Version des PHP-Codes einspielen. Für kleine Änderungen in der Konfiguration gilt das Gleiche: ein Backup der Datenbank erstellen, die Änderungen auf der Live-Site vornehmen und hoffen, dass nichts schiefläuft. Oder noch besser, um Downtime der Website zu minimieren: eine Entwicklungsumgebung mit einer Kopie der Datenbank aufsetzen, dort die Änderungen vornehmen, und die Datenbank anschließend auf die Live-Site kopieren.

Für kleinere Websites, etwa ein persönliches Blog, oder Websites, die wenige Besucher haben, ist das alles kein Problem. Aber was ist, wenn man auf gut besuchten Websites Änderungen vornehmen muss? Dann muss man die Änderungen auf jeden Fall in einer Entwicklungsumgebung testen, bevor man sie ausrollt. Hier ergibt sich gleich ein großes Problem: Die Datenbank beinhaltet sowohl Content (Blog-Artikel, Seiten und mehr) als auch Konfiguration (Name der Website, in manchen Systemen auch Layout, Farben, Positionierung von Blöcken etc.). Das heißt, wenn man mit einer Kopie der Datenbank arbeitet und diese dann auf die Live-Site rüberkopiert, verliert man alle Inhalte, die in der Zwischenzeit erstellt wurden. Das macht den Kunden nicht glücklich ...

Also entweder sagt man dem Kunden, er darf keinerlei Inhalte erstellen, während man die Änderungen macht, oder man muss einen Weg finden, die Änderungen an der Konfiguration ohne Auswirkungen auf die Inhalte auszurollen. Und die Lösung dieses Problems ist der Grund, weswegen wir uns komplexe Deployment-Prozesse antun: Konfiguration ausrollen, ohne die Inhalte anzufassen.

Die Drupal-Community hat zwei Tools entwickelt, die zusammengenommen eine gute Lösung des genannten Problems bieten: Features und Drush. Das Modul Features bringt die Möglichkeit, die Konfiguration aus der Datenbank in Programmiercode zu transponieren und hin- und her zu schieben zwischen Entwicklungsumgebung, Stage und Live-Site. Das heißt, wir können gezielt Teile der Konfiguration als Module abspeichern und ganz unabhängig von dem Inhalt auf einer anderen Website implementieren. Noch besser: Zusammen mit Git, einem Tool zur Versionierung und Synchronisierung von Dateien, können wir besser nachvollziehen, was wann und von wem geändert wurde, und Änderungen problemlos rückgängig machen.

Ein weiteres Tool, Drush ("DRUpal SHell") ermöglicht es einem Administrator, über die Kommandozeile Befehle auszuführen - den Cache leeren, Module installieren, Features aktivieren und zurücksetzen und vieles mehr. Die meisten Nutzer haben sich spätestens Mitte der 90er mit großer Freude von der lästigen Kommandozeile verabschiedet, aber für die schnelle Ausführung von sich wiederholenden Aufgaben ist sie unentbehrlich.

Da Git und Drush über die Kommandozeile angesprochen werden, hat man die Möglichkeit, Bash-Skripte zu erstellen - d.h. eine Abfolge von Befehlen automatisch auszuführen. Darum ging es in unserem Workshop: Johannes' Update Script, das Teile des Deployments automatisiert und die Dokumentation des Deployment-Vorgangs ermöglicht. Wie Johannes gleicht am Anfang erzählt hat: Automatisierung macht Deployment defined, reproducible und traceable - definierbar, reproduzierbar und nachverfolgbar. So werden möglichst viele Fehlerquellen - allen voran der menschliche Faktor - eliminiert.

Sicherlich ist es lästig, wenn man einfach losbauen möchte, diese zusätzliche Hürden nehmen zu müssen. Aber bei großen, professionellen Websites geht es nicht anders und ich würde sagen, die Deployment-Tools, die Drupal bietet, sind eine deutliche Stärke unseres Lieblings-CMS. In Drupal 8 wird es sogar noch bequemer: Hier werden alle Einstellungen gleich in Dateien gespeichert, und damit braucht man keine Features mehr, sondern kann einfach mit Git die Änderungen zwischen Entwicklungsumgebung und Live-Site synchronisieren.