Deployment eines Themes für WordPress

Dieses Wochenende steht unter dem Motto der Vereinfachung von Prozessen. Während ich meine Arbeit schon lange mit Git versioniere, hatte ich für das Deployment bisher noch den umständlichen Weg über den direkten Upload der aktualisierten Dateien gewählt. Dieser Umstand störte mich schon eine Weile, und so war heute Abend die Zeit gekommen auch diesen Prozess zu vereinfachen. Gestern habe ich darüber geschrieben wie ich WordPress mit einer Eingabe im Terminal für die Installation vorbereite, heute soll es nun darum gehen, wie sich Änderungen am Theme ganz einfach mit einem git push in der Produktion anwenden lassen.

Voraussetzungen

  • Etwas Vertrautheit im Umgang mit git
  • Ein Hosting das SSH und git unterstützt

Was haben wir vor?

Für das Deployment des Codes legen wir ein zusätzliches Verzeichnis (Repository) auf dem Server an, auf dem die Seite betrieben wird für die die Änderungen bestimmt sind. Diesem Repository ordnen wir eine Funktion zu, die ausgeführt wird, sobald das Verzeichnis aktualisiert wurde. Nachdem wir diese Schritte durchgeführt haben, kann das Deployment durch ein einfaches git push live master ausgeführt werden.

In diesem Artikel gehe ich davon aus, dass du dein Projekt bereits mit git versionierst, und beschriebe daher nur die Aspekte, die für den Deploy notwendig sind.

Repository vorbereiten

Das Verzeichnis für die Repositories (kurz repos) legen wir im Home-Verzeichnis an. Das Home-Verzeichnis ist nicht das öffentliche Verzeichnis in dem sich die Seite befindet und die über den Browser erreicht wird. Diese Seite ist bei Uberspace gehostet, ich verwende für die Beispiele Pfade wie sie dort üblich sind, das musst du für deinen Hoster anpassen.

Als erstes Legen wir ein Verzeichnis mit dem Namen repos an und wechseln in dieses Verzeichnis:

mkdir repos && cd repos

In unserem eben angelegten Verzeichnis sollen die Repositories angelegt werden. Da Themes und Plugins am Besten in unterschiedlichen Repositories verwaltet werden, gibt uns dieses Vorgehen die Möglichkeit unterschiedliche Projekte direkt mit unserer Seite zu verbinden. Wir bereiten nun das Repository für unser Theme vor und wechseln direkt in das neue Verzeichnis. Da es sich hierbei um ein Bare-Repository handelt, bekommt es gemäß der Konvention die Endung *.git.

mkdir mein-theme.git && cd mein-theme.git

Nachdem die Verzeichnisstruktur korrekt angelegt ist, bereiten wir das Repository dafür vor Inhalte unserer lokalen Entwicklungsumgebung zu empfangen:

git --bare init

Das Repository auf dem Server ist nun vorbereitet und wartet darauf mit Inhalten gefüllt zu werden. Bevor wir die Funktion anlegen über die wir die Änderungen direkt nach Eintreffen auf dem Server in unsere WordPress-Installation übertragen, weise ich noch auf die RAM-Nutzung hin. Bei Uberspace kam es bei der Verwendung von git auf den Servern schon zu Problemen mit der RAM-Auslastung. Im Uberspace-Wiki werden ein paar einfache Einstellungen erwähnt, die ein gutes Zusammenspiel von Server und git gewährleisten.

Deployment Funktion anlegen

In der Shell befinden wir uns noch im eben angelegten Repository mein-thema.git, und in diesem Repository legen wir auch die Deployment-Funktion an. Um die Änderungen anzuwenden verwenden wir den servierseitigen Hook post-receive, der beginnt wenn der erste Prozess abgeschlossen ist und mit den erhaltenen Informationen einen anderen Dienst aktualisieren kann.

vi hooks/post-receive

Die Datei post-receive öffnet sich nun im visuellen Editor der Shell. Den Bearbeitungsmodus aktivierst du mit i, worauf sich die eigentliche Funktion einfügen lässt. Bitte achte darauf, dass du den Pfad zum Theme auf das du die Änderungen anwenden möchtest für deine Gegebenheiten anpasst:

#!/bin/sh
GIT_WORK_TREE=/var/www/virtual/user/wp-content/themes/mein-theme git checkout -f

Den Bearbeitungsmodus des visuellen Editors verlässt du mit esc, danach gibst du :wq ein um die Änderungen zu speichern und den Editor zu verlassen.

Die eben angelegte Funktion muss ausführbar sein, weshalb wir ihre Rechte entsprechend setzen:

chmod +x hooks/post-receive

Wir haben nun unser Repository auf dem Server angelegt und vorbereitet, die Funktion um die eingecheckten Änderungen auf die Produktion anzuwenden haben wir ebenfalls erstellt. Dem Deploy steht nichts mehr im Wege.

Remote hinzufügen

Im Terminal öffnen wir ein neues Tab und wechseln in das Verzeichnis unseres Themes. Dort sehen wir zunächst nach mit welchem entfernten Repository wir bereits verbunden sind:

git remote -v

Hier wird dir sehr wahrscheinlich dein Repository bei GitHub oder BitBucket ausgegeben. Unsere Entwicklungsumgebung verbinden wir nun noch mit dem Repository das wir eben auf unserem Server angelegt haben:

git remote add live ssh://user@server.net/home/user/repos/mein-theme.git/

Mit git remote -v kannst du nun noch schnell überprüfen ob deine Eingabe geklappt hat und dein live-Repository ebenfalls verbunden ist.

Deployment, oder Änderungen anwenden

Nun haben wir alles vorbereitet um Änderungen an unserem Theme in der Entwicklungsumgebung ganz einfach auf das Theme in der Produktion anzuwenden. Diesen Vorgang nennt man Deployment, und dieser besteht nun nicht mehr in der händischen Auswahl und Übertragung der geänderten Dateien, sondern wird durch einen einfachen git push angestossen:

git push live master

Fazit

Ich habe mich dazu entschieden das Deployment nicht über einen Dienst zu machen, da ich keine Lust hatte meine Zugangsdaten irgendwo einzutragen. Mit dieser Methode melde ich mich mit einem SSH-Schlüssel auf dem Server an. Die Verknüpfung meines Rechners und dem Server über den erwähnten SSH-Schlüssel war bereits angelegt, und ist – soweit ich das beurteilen kann – ziemlich sicher.

Die Möglichkeiten Änderungen an einem Theme genauso einfach in der Produktion anzuwenden und nicht mehr nach den geänderten Dateien suchen zu müssen und diese in das korrekte Verzeichnis auf dem Server zu kopieren gefiel mir so gut, dass ich direkt zwei Änderungen durchführte.

Verwendete Quellen:

10 Reaktionen

Reagiere darauf

*