Entwicklungs-, Bühnen- und Produktionsbereitstellung für WordPress-Sites?


41

Daher muss ich in der Lage sein, Entwicklungs- / Bühnen- / Produktionsiterationen (über separate Server) für eine WordPress-Website zu haben. Ich verwende normalerweise Git, aber dies funktioniert offensichtlich nicht mit WordPress-Sites, da die Hauptdatenbank verwendet wird Konfiguration von ... na ja, fast alles.

Meine Frage ist also, wie macht ihr das? Ich hatte ein schnelles Google und sah, dass es ein paar Plugins gab. Ist dies der einzige Weg? Welche machen den Job am besten in Bezug auf Benutzerfreundlichkeit, Geschwindigkeit, Zuverlässigkeit, Benutzeroberfläche usw.?


pantheon.io hat Entwickler, testet und lebt für eine Domain. Sie verwenden Git für die Dateien und übertragen die Datenbank zwischen ihnen mit einem einzigen Klick. Das Ausprobieren ist kostenlos und du
bezahlst

Antworten:


27

Ich bin ziemlich stolz auf mein Setup und es funktioniert sehr gut für mein Team.

Allgemeine Struktur

Ich halte die gesamte Installation unter Kontrolle. Alle Änderungen, sei es ein System-Update, das Hinzufügen / Aktualisieren eines Plugins, das Hinzufügen / Aktualisieren eines Themas, durchlaufen denselben Workflow. Änderungen können jederzeit rückgängig gemacht werden. Ich besitze einen Bereitstellungsserver (einen alten P4-Desktop), auf dem Gitosis ausgeführt wird, aber Sie können auch Github oder Gitolite verwenden . In Git habe ich zwei "spezielle" Zweige masterund develop(weiter unten näher erläutert). Meine Produktions- und Staging-Server sind cloudbasiert.

Entwicklungsumgebungen

Jeder Entwickler betreibt seinen eigenen Entwicklungsserver auf seinem eigenen Computer. In Bezug auf Datenbanken war der Bedarf an Live-Daten selten ein Thema. Wir verwenden hauptsächlich die Testdaten der Themeneinheiten . Ansonsten deckt Export und Import die meisten Dinge ab. Wenn das DB-Teil von entscheidender Bedeutung ist, können Sie die Replikation oder etwas für die On-Demand-Synchronisierung einrichten. Als ich diese Struktur zum ersten Mal einrichtete , dachte ich, dass dies von entscheidender Bedeutung sein würde, und fing an, eine Reihe von Tools zu schreiben , um dies zu tun, aber zu meiner Überraschung waren sie wirklich nicht notwendig. (Anmerkung: da sie nicht notwendig waren, habe ich sie nie aufpoliert, daher gibt es Fehler, z. B. wird die Domain in serialisierten Daten ersetzt).

Staging-Umgebung

Wenn Commits von der developZweigstelle an Gitosis weitergeleitet werden, werden sie automatisch auf unserem Staging-Server bereitgestellt. Die Staging-Datenbank ist ein Slave für die Produktionsdatenbank.

Produktionsumfeld

Wenn Commits in der masterFiliale an gitosis gesendet werden , werden sie automatisch auf dem Produktionsserver bereitgestellt.

Das Problem mit wp-config.php

Sie möchten wp-config.phpvon Server zu Server eindeutig sein, aber auch die Versionskontrolle behalten. Meine Lösung bestand darin , die Staging- und Produktionsversionen .gitignorezu ignorieren wp-config.phpund als Dateien mit unterschiedlichen Namen zu speichern. Dann symlinke ich auf jedem Server zB wp-config.php -> wp-config-production.php. Jeder Benutzer behält dann seine eigene Datenbank mit seinen eigenen Anmeldeinformationen und seinen eigenen (nicht verfolgten) wp-config.php-Einstellungen.

Weitere Hinweise

Ich benutze Rackspace Cloud , was phänomenal und kostengünstig ist. Damit kann ich meine Staging- und Produktionsserver identisch halten. Ich schreibe gerade auch Plugins, die ihre API verwenden, um meine Dienste direkt aus WordPress heraus zu steuern. Es ist wunderbar.

Cache-Verzeichnisse, Verzeichnisse zum Hochladen von Dateien usw. werden zu .gitignore hinzugefügt. Wenn Sie wollten, könnten Sie eine Cron-Task einrichten, um Uploads routinemäßig einzuchecken und zur Gitosis zu verschieben, aber das schien mir nie notwendig zu sein.

Die Master / Develop-Struktur soll das Verzweigungsmodell von Vincent Driessen teilweise imitieren . Ich benutze auch seine Git-Erweiterung Git-Flow und ich würde das auch sehr empfehlen.

Ich habe ungefähr 10 Entwickler, die seit über einem Jahr an dieser Struktur arbeiten, und es war ein Traum, mit ihr zu arbeiten. Zuverlässig, sicher, schnell, funktional und agil - mehr kann man nicht verlangen!


Ich bin dabei, eine wp-Installation auf ähnliche Weise einzurichten (aber wir verwenden svn), und ich wollte Ihren Vorgang zum Aktualisieren von Plugins und wp bestätigen: Schließen Sie das Update ab und überprüfen Sie dev, übertragen Sie die Änderungen, stellen Sie sie beim Staging bereit, überprüfen Sie, auf leben verlassen. Zusammenfassend lässt sich sagen, dass Sie auf dem Live-Server, den Sie über Updates im Repository in die Änderungen einbringen, niemals ein Update der wp-Installation durchführen.
Paullb

1
Was ist mit den Änderungen an der Datenbank, die von der Aktualisierungsroutine vorgenommen wurden? Wie wirken sich diese auf die Produktions-DB aus?
Paullb

Dieser Workflow ist @paullb korrekt, und Sie müssen sich keine Gedanken über DB-Updates machen. So wie WordPress funktioniert, werden die Updates ausgelöst, nachdem die Änderung erkannt wurde. Dies funktioniert also genauso wie ein manuelles Update (auf den Core oder ein Plugin)!
Matthew Boynes

@MatthewBoynes, hallo. Verwenden Sie diesen Workflow noch für Ihre Entwicklung? Wenn ja, werde ich diesen Workflow auf mein Projekt anwenden. Danke :)
khakiout

Das tue ich nicht, aber nur, weil es nicht auf die Projekte zutrifft, an denen ich gerade arbeite und die hauptsächlich auf WordPress.com VIP gehostet werden. Wenn es anwendbar wäre, würde ich es immer noch verwenden (und tatsächlich wird es von der Firma, für die ich zuvor gearbeitet habe, weiterhin verwendet).
Matthew Boynes

4

Zuerst denke ich, es ist wichtig zu überlegen, was Sie zur Versionskontrolle bringen. Ich würde empfehlen , gegen das gesamte WP - Verzeichnis unter VC setzen. Ich denke, es ist am sinnvollsten, wp-content / themes / YourThemeName unter VC zu setzen. Bei einer großen Site mit einer großen Anzahl komplexer Plugins könnte es durchaus vorkommen, dass auch wp-content / plugins einbezogen werden. Wenn Sie unbedingt müssten, könnten Sie wp-Inhalte / Uploads einbinden. Die folgenden Antworten ändern sich ein wenig, je nachdem, welche Versionskontrolle Sie durchführen.

Vor diesem Hintergrund verwende ich Folgendes:

Lokal: Richten Sie einen LAMP-Stack auf Ihrem Computer ein. Verwenden Sie dieselbe URL wie Ihre Entwicklungssite. Verwenden Sie VirtualHosts- und .host-Dateieinträge, um die Entwicklungsumgebung aus URL-Sicht zu simulieren. Wenn Sie gerade Ihr Thema VC'ing, erwägen Sie die Verwendung von SSHFS zum Verknüpfen von wp-Inhalten / Plugins, wp-Inhalten / Uploads. Ziehen Sie in Betracht, die Datenbank für Ihre Entwicklungsinstallation des Projekts zu verwenden, es sei denn, Sie tun wirklich etwas Schweres.

Entwicklung: Checke eine Arbeitskopie deines Repos in deine WP-Umgebung. Richten Sie in SVN einen POST-COMMIT-Hook ein, um dieses Repo bei jedem Commit zu aktualisieren. Dadurch wird die Synchronisierung aufrechterhalten. (Betrachten Sie es als kontinuierliche Integration eines armen Mannes.)

Produktion: Schauen Sie sich ein benanntes Versions-Tag an, das einen endgültigen Kandidaten darstellt. Wenn Sie eine neue Version benötigen, wechseln Sie das Tag und aktualisieren Sie das Repo.


Eine Entwicklungsumgebung ist sehr gut geeignet, um nächtliche Builds zu testen, und das Git-WordPress wird automatisch alle 30 Minuten aktualisiert. Abgesehen davon, dass es dezentralisiert ist und besser für Teams funktioniert, kenne ich niemanden, der zu Git / HG gewechselt ist, der zurückgegangen ist mit svn.
Wyck

1
Nur neugierig auf Ihre Argumentation, nicht das gesamte WP-Verzeichnis unter Versionskontrolle zu stellen. Das scheint ein Engpass im Workflow zu sein. Durch das Einfügen von WP in das Repo erhalten alle Entwickler die gleiche Codebasis und WP-Version. Es ermöglicht auch die Konsistenz über Umgebungen hinweg. Siehe Wycks Link (in seiner Antwort) zu den bedingten wp-config-Dateien.
Brian Fegter

2

Wir haben kürzlich RAMP entdeckt . Hinweis: Dies ist nur ein Teil des gesamten Prozesses, aber das Synchronisieren von Inhaltsdatenbanken zwischen Servern ist wahrscheinlich der schwierigste Teil.


2

Ich mache das mit git und mercurial, stelle nur sicher, dass du ein privates Repo verwendest.

Option 1.

Das einzige Problem ist die config.php, die Sie git per Push oder vor init mitteilen können.

Verwenden Sie .gitignoreoder git update-index --assume-unchanged config.php(lesen Sie etwas über den angenommenen, unveränderten Befehl, bevor Sie ihn verwenden)

Optionen 2.

Verwenden Sie in der config.php eine Bedingung, die die URL überprüft und die korrekten Anmeldeinformationen anwendet, wie unter "Wenn Server-URL = dev, dann Anmeldeinformationen A verwenden, andernfalls Anmeldeinformationen B verwenden" beschrieben.

Mark erklärt das besser, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

ps. Sie können die Dateien auch direkt von einem Remote-Repository aus speichern, anstatt über einen herkömmlichen "Dateiserver" zu verfügen. (Wirklich langweiliges Video, das ich über diese http://www.youtube.com/watch?v=8ZEiFi4thDI gemacht habe )

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.