Frage

Ich beginne ein neues Projekt in PHP und ich würde es lieben, einige zu bekommen feedback von anderen Entwicklern auf Ihre bevorzugte Strategie für die PHP-Implementierung.Ich würde gerne automatisieren, die Dinge ein wenig, so dass, wenn änderungen können Sie schnell migriert, um eine Entwicklungs-oder Produktions-server.

Ich habe Erfahrung mit Implementierungen, die mit Capistrano mit Ruby sowie einige grundlegende shell-scripting.

Bevor ich Tauchen Kopf zuerst auf meine eigene, wäre es toll zu hören, wie andere, haben sich diese in Ihre Projekte.

Weitere Informationen

Derzeit arbeiten die Entwickler auf lokale Installationen der Website und übernehmen Sie die änderungen für ein subversion-repository.Erste Implementierungen sind durch exportieren von eine tagged Version aus dem svn und hochladen, die auf dem server.

Weitere änderungen sind in der Regel schrittweise durch manuelles hochladen von Dateien geändert.

War es hilfreich?

Lösung

Für PHP, SVN mit Phing Build-Skripte sind der Weg zu gehen. Phing ist ähnlich wie ANT aber ist in PHP geschrieben, die es für PHP-Entwickler zu ändern viel einfacher macht ihre muss.

Unser Einsatz Routine ist wie folgt:

  • Jeder auf dem gleichen lokalen Server bei der Arbeit entwickelt, jeder Entwickler eine Kasse auf seiner Maschine hat und auch zu Hause zurück.
  • Verpflichtet auslösen einen Haken post-commit, die einen Staging-Server aktualisiert.
  • Tests werden auf Staging-Server läuft, wenn sie passieren - fortsetzen
  • .
  • Phing Build-Skript ist RAN:
  • nimmt nach unten Produktionsserver, die Domain zu einer "Under construction" -Seite Schalt
  • Läuft SVN-Update auf die Produktion Kasse
  • Führt Schema Deltas Skript
  • Führt Tests
  • Wenn die Tests fehlschlagen - Lauf Rollback-Skript
  • Wenn Tests bestehen, Server leitet zurück zur Produktion Kasse

Es gibt auch phpUnderControl , das ist ein Continuous Integration Server ist. Ich fand es nicht sehr nützlich für Web-Projekte um ehrlich zu sein.

Andere Tipps

Ich bin die Bereitstellung von derzeit PHP mit Git . Eine einfache git Push-Produktion ist alles, was nötig ist meinen Produktionsserver mit der neuesten Kopie von Git zu aktualisieren. Es ist einfach und schnell, weil Git intelligent genug, um nur die Differentiale und nicht das ganze Projekt immer wieder zu senden. Es hilft auch, auf dem Web-Server im Fall eines Hardware-Fehler an meinem Ende eine redundante Kopie des Repository zu halten (obwohl ich auch auf GitHub drücke um sicher zu sein).

Wir verwenden Webistrano , ein Web-Frontend für Capistrano, und sind sehr zufrieden damit.

Webistrano ermöglicht mehrstufige, Multi-environment-Installationen von SVN, GIT und andere. Es hat eine eingebaute in Rollback-Unterstützung, Unterstützung für separate Serverrollen wie Web, db, App, etc. und setzt parallel. Es ermöglicht Ihnen, Konfigurationsparameter auf mehreren Ebenen, wie pro Stufe außer Kraft zu setzen, und protokolliert die Ergebnisse jedes deploy, es optional Mailing.

Auch wenn Capistrano und Webistrano sind Ruby-Anwendungen, ist die Syntax der Bereitstellung ‚Rezepte‘ einfach und leistungsfähig genug für jeden PHP-Programmierer zu verstehen. Ursprünglich war Capistrano für Ruby on Rails-Projekte gebaut, aber bequem Platz PHP-Projekte.

konfigurierte Sobald es ist auch leicht genug, um von Nicht-Programmierern verwendet werden, wie Tester eine Staging-Version bereitstellen.

die schnellste bereitstellen möglich zu gestalten wir die fast_remote_cache Methode installiert, die eine svn aktualisiert Arbeitskopie-Cache auf dem Remote-Server, und dann Hardlinks das Ergebnis aus.

Ich benutze Apache Ant zu verschiedenen Zielen (dev, QA und leben) zu implementieren. Ant ist für Java-Bereitstellung arbeiten, aber es bietet eine recht nützliche allgemeine Fall Lösung für beliebige Dateien bereitstellen.

Die Syntax der build.xml-Datei ist recht einfach zu lernen -. Sie verschiedene Ziele und deren Abhängigkeiten definieren, die ausgeführt werden, wenn Sie die Ameise Programm auf der Kommandozeile aufrufen

Zum Beispiel, ich habe Ziele für die Entwickler, QA und leben, von denen jeder auf der cvsbuild Ziel abhängt, die die neueste Revision, von unserem CVS-Server auscheckt, kopiert die entsprechenden Dateien auf dem Build-Verzeichnis (mit dem fileset-Tag) und dann rsyncs das Build-Verzeichnis an den entsprechenden Server. Es gibt ein paar Macken zu lernen, und die Lernkurve ist nicht völlig flach, aber ich habe seit Jahren ohne Probleme es auf diese Art und Weise zu tun, damit ich es für Ihre Situation empfehlen würde, obwohl ich neugierig bin, was andere Antworten, die ich ‚auf diesen Thread sehen werden.

Ich mache Sachen manuell mit Git. Ein Repository für die Entwicklung, die zu einer öffentlichen Repo git push --mirror'ed wird, und der Live-Server ist ein drittes Repo aus, dass gezogen. Dieser Teil nehme ich an ist das gleiche wie Ihr eigenes Setup.

Der große Unterschied ist, dass ich Zweige verwenden fast jeder Änderung arbeite ich an (ich habe etwa 5 jetzt bekam), und neigen dazu, hin und her zwischen ihnen zu kippen. Der Master-Zweig bekommt direkt außer für die Zusammenführung andere Branchen nicht verändert.

Ich betreiben der Live-Server aus dem Master-Zweig direkt, und wenn ich mit einem anderen Zweig fertig bin und bereit, es zu fusionieren, drehen Sie den Server auf diesen Zweig für eine Weile. Wenn es bricht, nimmt es wieder auf Master setzen Sekunden. Wenn es funktioniert, wird es in Master verschmolzen und der Live-Code aktualisiert wird. Ich nehme eine Analogie dieses in SVN würde zwei Arbeitskopien und zeigt über einen symbolischen Link zum Live-eines werden zu müssen.

Ich weiß Phing erwähnt wurde ein paar mal hin, aber ich hatte großes Glück mit phpUnderControl.Für uns, die wir

  1. Einzelne Kopien von Filialen zu lokalen Maschinen
  2. Die Zweige sind getestet und dann in den Trunk zusammengeführt
  3. Verpflichtet Stamm werden automatisch gebaut von phpUnderControl, führt tests und baut alle Unterlagen, gilt Datenbank deltas
  4. Stamm läuft durch Qualität Prüfung, und dann verschmolzen unsere Stabilen Zweig
  5. Wieder, phpUnderControl automatisch erstellt Stabil, führt tests und generiert die Dokumentation und Datenbank-updates
  6. Wenn wir bereit sind, die push-Produktion laufen wir ein rsync-Skript, das sichert die Produktion, die Datenbank aktualisiert, und legt dann die Dateien hoch.Der rsync-Befehl aufgerufen wird, von hand, so dass wir sicherstellen, dass jemand Sie beobachtet die Aktion.

eine Alternative zu hausgemachtem Bereitstellungsskripts ist zu einem Plattform-as-a-Service bereitstellen, die für Sie eine Menge dieser Arbeit abstrahiert. Ein PaaS wird sein eigenes Code Deployment-Tool bietet in der Regel, sowie Skalierung, Fehlertoleranz (zB. Going down nicht, wenn die Hardware ausfällt), und in der Regel ein großes Instrumentarium zur Überwachung, lügt Überprüfung usw. Es gibt auch den Nutzen für eine der Bereitstellung von funktionierend bekannte Konfiguration, die up-to-date über die Zeit (ein weniger Kopfschmerzen für Sie) gehalten wird.

Die PaaS ich empfehlen würde, ist dotCloud , zusätzlich zu PHP (

Ich bin Art und Weise spät zur Party, aber ich dachte, ich würde unsere Methoden teilen. Wir verwenden Phing mit Phingistrano , die über vorgefertigte Build-Dateien Capistrano-ähnliche Funktionalität zu Phing bietet. Es ist sehr cool, aber nur funktioniert, wenn Sie Git zur Zeit verwenden.

Ich habe eine Arbeitskopie eines SVN Release-Zweig auf dem Server. Aktualisierung der Website (wenn es nicht Schemaänderungen) ist so einfach wie die Ausgabe eines SVN-Update-Befehl. Ich weiß nicht einmal die Seite offline nehmen.

Phing ist wahrscheinlich die beste Wahl, wenn Sie den Schmerz der XML-Konfigurationsdateien stehen können. Das Symfony Framework verfügt über einen eigenen Hafen von Rechen (pake), die recht gut funktioniert, ist aber ziemlich eng gekoppelt an den Rest von Symfony (Obwohl Sie wahrscheinlich sie könnten trennen).

Eine weitere Option ist Capistrano zu verwenden. Offensichtlich ist es nicht so gut mit PHP integrieren, wie es mit Ruby-Fall ist, aber man kann es immer noch eine Menge Sachen verwenden.

Schließlich können Sie immer Shell-Skripte schreiben. So weit, das ist, was ich getan habe.

http://controltier.org/wiki/Main_Page

Wir werden es nutzen für Multi-Server-Installationen und Wartung.

Ein Jahr spät, aber ... In meinem Fall ist Einsatz nicht automatisch. Ich finde es gefährlich automatisch Skripte Code und führen Datenbank-Migration zu implementieren.

Stattdessen werden Subversion Haken verwendet nur Tests zu implementieren / Staging-Server. Code befindet sich am Ende einer Iteration zur Produktion eingesetzt werden, nachdem verschiedene Tests mit und sorgte dafür, dass die Dinge funktionieren. Für den Einsatz selbst verwende ich eine maßgeschneiderte Makefile, die rsync für die Übertragung von Dateien verwendet. Das Makefile kann auch die Migrationsskripte auf dem Remote-Server, Pause / Resume Web- und Datenbankserver ausgeführt werden.

Bei meiner Arbeit mich und mein Team haben eine Phing orientierte Ersatz für Capistrano deploy entwickelt und wir haben auch einige der Leckereien in phing wie PHPUnit Tests, phpcs und PHPDocumentor eingebaut. Wir haben es eine Git-Repo gemacht, das ein Projekt als Submodul in git hinzugefügt werden kann, und es funktioniert sehr gut. Ich habe es auf eine Handvoll von Projekten angebracht und es ist modular genug, dass es einfach ist, um es mit jedem Projekt auf unsere verschiedenen Umgebungen (Inszenierung, Erprobung, Produktion, etc ...) zu arbeiten.

Mit der phing Build-Skripte können Sie diese über die Befehlszeile manuell ausführen, und ich hatte auch Erfolg Automatisierung die Build / deploy-Routinen mit Hudson und jetzt Jenkins ci.

Ich kann keine Links posten jetzt, weil die Repo nicht öffentlich ist noch nicht, aber ich habe gesagt, wir gehen Quelle es manchmal bald zu öffnen, so zögern Sie nicht mich zu kontaktieren, wenn Sie interessiert sind oder wenn Sie Fragen haben, auf Ihre Bereitstellung mit phing und git automatisieren.

Ich denke, SVN bereitstellen Art und Weise ist nicht sehr gut. Denn:

Sie müssen den SVN Zugang für die ganze Welt öffnen

haben viele .svn in der Produktion Web-Server

ich glaube, Phing einen Zweig zu erzeugen + kombinieren alle js / css + ersetzen Stufe Config + ssh Upload auf allen WWW-Servern ist besser Art und Weise.

ssh bis 10 WWW-Server und SVN-up ist auch Schwierigkeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top