WordPress, Varying Vagrant Vagrants (VVV) & Wordmove

Auch wenn ich Euch einen WordPress-Workflow mittels Trellis + Co. empfehle so gibt es doch durchaus Situationen, in denen ein ‚einfacheres‘ Setup gefragt ist und deshalb hier jetzt eine kleine Übersicht zu den notwendigen Schritten mit VVV & Wordmove.

Intro

Neben der relativ hohen Komplexität von Trellis war bei einer Kundenanfrage auch der „Developer-Fokus“ ein Hindernis, konkret: Die Plugins werden im Roots-Universum sämtlich per Composer verwaltet und ein Update zieht einen kompletten ‚Push-Vorgang‘ (git, deploy) nach sich. Da man aber kleinere Anpassungen und Updates gerne auch eigenständig durchführen möchte gibt es den modernen WordPress-Workflow auch eine Nummer kleiner…

WICHTIG: Windows-User müssen sich u.U. selbst helfen bzw. sind einige Tools nicht ‚out of the box‘ kompatibel (z.B. Wordmove), das nur vorweg damit keine Missverständnisse oder Frustrationen entstehen.

Vorgehen

Ich beschreibe hier ein Setup für WordPress mit folgenden Features:

  • Lokale Entwicklungsumgebung mittels VVV
  • WP-Projekt-Automatisierung via Variable VVV
  • Server-Setup bei DigitalOcean (* via Link gibts 10,- USD Gratis-Guthaben)
  • Deployment durch Wordmove

Varying Vagrant Vagrants (VVV)

Für einige von Euch vermutlich eine bekannte Größe, das Projekt wurde schon 2014 von 10up aus der Taufe gehoben – aktuell in Version 2.0 und eine solide Basis für unsere lokale Entwicklungsumgebung. Einfach nach Anleitung installieren und Ihr habt quasi eine kommandozeilen-basierte MAMP-Variante zu Eurer Verfügung.

Innerhalb von VVV lassen sich dann die einzelnen Unterseiten / Projekte anlegen, d.h. einzelne (lokale) Domains ansteueren, über ein (anpassbares) Dashboard verwalten etc.

Variable VVV

Um das Management (konkret: das Anlegen) neuer WordPress-Projekte zu optimieren wird als Nächstes Variable VVV installiert, nach eigenen Angaben der „einfachste Weg um WordPress-Seiten mit VVV einzurichten“. Auch hier einfach den Installationsanweisungen folgen.

Bevor Ihr mittels vv create via Installations-Skript ein neues Projekt ’spinnen‘ könnt müssen wir vorher noch ein paar Einstellungen bzgl. VVV vornehmen:

1) Im Root-Verzeichnis Eurer VVV-Installation dupliziert Ihr die vvv-config.yml-Datei und benennt die Kopie in vvv-custom.yml um.

2) In dieser neuen Config-Datei werden die lokalen Projekte bzw. Webseiten referenziert / eingetragen:

---
sites:
  wordpress-default:
    repo: https://github.com/Varying-Vagrant-Vagrants/vvv-wordpress-default.git
    hosts:
      - local.wordpress.dev

  PROJECT:
    hosts:
      - PROJECT.dev

Den Rest der Datei bitte nicht löschen oder verändern, die vvv-custom.yml ersetzt nämlich die vvv-config.yml, d.h. ohne die übrigen Direktiven funktioniert das nicht mehr…

3) Jetzt feuert vv create richtig!

WICHTIG: Das Procedere mit dem Eintragen der Domains (2) muss für jedes neue Projekt wiederholt werden, also nicht vergessen…

Digital Ocean

Dieser Schritt ist natürlich abhängig davon, welchen Hoster Ihr bevorzugt – in meinem Fall ist das DigitalOcean aufgrund der hohen Performance, der einfachen Skalierbarkeit, dem fairen Preis-Leistungs-Verhältnis und den ständig neu entwickelten Features, die so manchen anderen Provider alt aussehen lassen…!

Leider wird die hohe Performance & Flexibilität mit größerem (initialen) Aufwand unsererseits aufgewogen, d.h. man muss erstmal alles frisch aufsetzen – den LEMP-Stack (= Linux, Nginx, MySQL, PHP), den zusätzlichen SSH-User, z.T. Security-relevante Dinge u.a. ABER: Nicht nur lernt man bei dem Procedere eine Menge (zumindest habe ich das getan), am Schluss steht ein sehr performantes System auf das wir Vollzugriff haben.

Am besten hangelt Ihr Euch an den Tutorials von DO entlang, dort wird alles sehr gut erklärt und illustriert – zuerst kümmern wir uns um das initiale Server-Setup mit Ubuntu 16.04., sobald das erledigt ist wird der LEMP-Stack installiert.

UPDATE

Das geht alles auch ein wenig schneller! Wir können den Setup-Prozess bei DO nämlich größtenteils automatisieren…

Anhand der Option Droplet Metadata lässt sich beim Anlegen des Droplets einfach ein Setup-Skript einspeisen, welches die Basics (= den LEMP-Stack und einige Configs) übernimmt.

Hier gehts direkt zu meinem DO-Setup, das Ganze natürlich ohne Gewähr bzw. nur als eine Möglichkeit von vielen, dürfte aber den Basis-Bedarf abdecken.

Wordmove

Jetzt haben wir die lokale Entwicklungsumgebung sowie den Remote-Server aufgesetzt und einem ersten Deploy steht nichts mehr im Wege! Der Push von Dateien und Datenbank wird mittels Wordmove bewerkstelligt, das Tool wird als „Capistrano für WordPress“ betitelt und tut letztlich nichts anderes als die vorher definierten Systeme (development, staging, production) zu synchronisieren bzw. zu pushen/pullen.

Die Dokumentation bzw. die Readme im Repo führt m.E. selbsterklärend durch die Installation, die Screencast sind auch super um das Ding in der Anwendung zu erleben. Eine funktionierende Movefile für das Zusammenspiel mit Digital Ocean findet Ihr hier, die Platzhalter „PROJECT(_*)“ und „xxx“ mit Euren entsprechenden Infos bestücken und natürlich auf die eigenen (lokalen) Pfade hin zurechtschneiden.

WICHTIG: Bzgl. der Datenbank-Verbindung gilt es zu unterscheiden, ob Ihr das wordmove-Skript ausserhalb von Vagrant oder nach einem vagrant ssh verwendet weil sich dahingehend auch die Logindaten bzw. der Host unterscheiden. Konkret geht es darum, ob man sich in der VM (Virtual Machine) befindet und dort dann direkt verbindet oder die MySQL-Datenbank von ausserhalb anspricht.

Im Beispiel gehe ich von einer externen Verbindung aus, das VVV-Wiki stellt beide Varianten vor.

Verfügbare Commands:

wordmove help [TASK]  # Describe available tasks or one specific task
wordmove init  # Generates a brand new Movefile
wordmove pull  # Pulls WP data from remote host to the local machine
wordmove push  # Pushes WP data from local machine to remote host

Hier gibt es eine Übersicht über die verfügbaren Flags, z.B. könnt Ihr mit wordmove push --all das komplette Projekt mit DB & Dateien hochladen oder Ihr wollt nur die DB pullen dann geht das via wordmove push --db usw.

Falls Ihr verschiedene environments verwaltet dann lassen sich diese gezielt über -e=production ansprechen.

Outro

Zu guter Letzt verweise ich noch auf die Anleitung von joeguilmette die die hier besprochenen Punkte in ähnlicher Form behandelt und noch den ein oder anderen zusätzlichen Hinweis bereit hält.

Viel Erfolg bei Euren Projekten und hoffentlich konnte der WordPress-Workflow so noch etwas optimiert werden!