Frage

Ich habe die Formulierung „die Bereitstellung von Anwendungen“ gehört, die viel besser / leichter / zuverlässiger klingt als einzelne Dateien geändert auf einen Server hochladen, aber ich weiß nicht, wo man anfangen soll.

Ich habe eine Zend Framework-Anwendung, die (in einer Subversion-Repository) unter Versionskontrolle ist. Wie gehe ich über die „Bereitstellung“ meine Anwendung? Was soll ich tun, wenn ich ein „uploads“ Verzeichnis, das will ich nicht überschrieben werden?

I-Host meiner Anwendung durch einen Dritten, so dass ich weiß nicht viel anders als FTP. Wenn eines dieser Anmeldung in meinem Server beinhaltet, erklären Sie bitte den Vorgang.

War es hilfreich?

Lösung

Automatische deploy + Lauf der Tests auf einem Testserver wird als kontinuierliche Integration bekannt. Die Idee ist, dass, wenn Sie in etwas überprüfen, die die Tests durchbrechen, würden Sie sofort benachrichtigt,. Für PHP, können Sie Xinc oder phpUnderControl

Sie würden im Allgemeinen nicht wollen, obwohl die Produktion automatisch zu implementieren. Die normale Sache zu tun ist, einige Skripte zu schreiben, die die Aufgabe automatisiert, sondern dass Sie immer noch manuell einleiten müssen. Sie können Frameworks wie Phing oder anderen Build-Tools für diese (Eine beliebte Wahl ist Capistrano ), aber Sie können auch wischen nur ein paar Shell-Skripte zusammen. Mir persönlich gefällt diese.

Die Skripte können sich verschiedene Dinge tun, je nach Anwendung und Setup, aber ein typischer Prozess sei:

  • ssh auf dem Produktionsserver. Der Rest der Befehle werden auf dem Produktionsserver laufen, durch ssh.
  • laufen svn export svn://path/to/repository/tags/RELEASE_VERSION /usr/local/application/releases/TIMESTAMP
  • Stop-Service (Apache, Daemons)
  • laufen unlink /usr/local/application/current && ln -s /usr/local/application/releases/TIMESTAMP /usr/local/application/current
  • laufen ln -s /usr/local/application/var /usr/local/application/releases/TIMESTAMP/var
  • laufen /usr/local/application/current/scripts/migrate.php
  • starten Dienste

(Angenommen, Sie haben Ihre Anwendung in /usr/local/application/current)

Andere Tipps

Ich würde die automatische Aktualisierung nicht empfehlen. Nur weil Ihr Gerät Tests bestehen, bedeutet nicht, Ihre Anwendung Funktion 100% ist. Was passiert, wenn jemand ohne neue Unit-Tests in einer zufälligen neuen Funktion überprüft, und das Feature nicht funktioniert? Ihre bestehenden Unit-Tests könnten passieren, aber die Funktion sowieso gebrochen werden kann. Die Benutzer können sehen etwas, das ist halb fertig. Mit der automatischen Bereitstellung von einem Check-in, können Sie nicht für ein paar Stunden bemerken, wenn etwas gemacht leben, dass nicht haben sollte.

Wie auch immer, es wäre nicht so schwierig sein, eine automatische Bereitstellung zu erhalten gehen, wenn Sie wirklich wollte. Sie müssen einen Post-Check-in-Haken, und wirklich die Schritte wären:

1) Sie einen Export aus dem aktuellen Check-in 2) Upload Export nach Produktionsserver 3) auspacken / config den neu hochgeladen Export

Ich habe ausgeführt immer die letzten Schritte manuell. Im Allgemeinen ist es so einfach wie SVN Export, zip, hoch zu laden, entpacken, konfigurieren und die letzten beiden Schritte, die ich gerade alias ein paar bash-Befehle zusammen auszuführen. Dann tausche ich das Root-App-Verzeichnis mit dem neuen aus, um sicherzustellen, ich die alten behalten um als Backup, und es ist gut zu gehen.

Wenn Sie in Ihrer Fähigkeit, sicher sind, Fehler zu fangen, bevor sie automatisch online gehen würden, dann könnte man sich dieses Verfahren zu automatisieren. Es gibt mir die jibbly-jibblies though.

Hier ist ein ausgezeichneter Artikel ist Subversion zur Verwendung von Web-Projekten zu implementieren -. Es Antworten auf viele Ihrer Fragen

http://athleticsnyc.com/blog/entry/ on-using-Subversion-for-Web-Projekte

Bei meinem webdev Unternehmen vor kurzem begannen wir mit Webistrano , die ein Web-GUI zu dem beliebten Capistrano ist Werkzeug.

Wir wollten ein einfach zu bedienendes, schnelles Deployment-Tool mit einer zentralen Schnittstelle, Rechenschaftspflicht gegenüber früheren Versionen (die, welche Version implementiert), Rollback und vorzugsweise frei. Capistrano ist bekannt als Deployment-Tool für Ruby on Rails-Anwendungen, aber nicht zentral und gezielt vor allem auf Rails-Anwendungen. Webistrano erhöht sie mit einer grafischen Benutzeroberfläche, Verantwortlichkeit und fügt grundlegende Unterstützung für PHP-Bereitstellung (verwenden Sie den ‚reine Datei‘ Projekt-Typen).

Webistrano ist selbst eine Ruby on Rails-Anwendung, die Sie auf einem Entwicklungs- oder Staging-Server installieren. Sie fügen ein Projekt für jede Ihrer Websites. Zu jedem Projekt hinzufügen Sie Stufen, wie Prod und Dev.

können Jede Stufe verschiedene Server haben zu implementieren, und verschiedene Einstellungen. Schreiben (oder modifizieren) ein ‚Rezept‘, das ein Ruby-Skript, das Capistrano sagt, was zu tun ist. In unserem Fall habe ich nur mit dem mitgelieferten Rezept und hinzugefügt einen Befehl einen symbolischen Link zu einem gemeinsamen Uploads dir zu schaffen, so wie du erwähnt.

Wenn Sie auf Bereitstellen, Webistrano SSHS in Ihrer Remote-Server (n), tut ein svn checkout des Codes und alle anderen Aufgaben, die Sie wie Datenbankmigrationen benötigen, symbolische Links oder Bereinigung von früheren Versionen. All dies kann natürlich gezwickt werden, immerhin ist es einfach scripted.

Wir sind sehr glücklich mit ihm, aber es hat mich ein paar Tage zu erlernen und zu gründen, zumal ich nicht vertraut mit Ruby und Rails war. Trotzdem kann ich es sehr in kleinen und mittleren Unternehmen für den produktiven Einsatz empfehlen, da bewiesen ist es sehr zuverlässig, flexibel und hat uns viele Male die anfängliche Investition gespeichert. Nicht nur durch Implementierungen zu beschleunigen, sondern auch durch Fehler / Unfälle zu reduzieren.

So etwas ist, was Sie würden „Kontinuierliche Integration“ nennen. Atlassian Bamboo (Kosten), Sun Hudson (kostenlos) und Cruise Control (kostenlos) sind alle gängigen Optionen (in der Reihenfolge meiner Präferenz) und hat Unterstützung PHPUnit Ausgang (weil PHPUnit Unterstützung JUnit-Ausgabe) zu handhaben.

Der Einsatz Sachen kann mit einer nach Build-Trigger erfolgen. Wie einige andere Leute in diesem Thread möchte ich große Vorsicht walten lassen, bevor automatisierte Installationen tun auf checkin (und Test passing).

überprüfen fredistrano, es ist ein Klon Capistrano (Verwirrende Installation litle wenig, aber immerhin läuft gut) funktioniert super

http://code.google.com/p/fredistrano/

Uploads zu handhaben, die klassische Lösung ist das aktuelle Verzeichnis aus dem Haupt Webspaces zu bewegen, ist es so dass nur noch für eine frische Version ausgecheckt wird (wie ich im Skript tue unten) und dann Apache ‚Alias‘ mit sie wieder an ihrem Platz als Teil der Website.

Alias /uploads /home/user/uploads/

Es gibt weniger Möglichkeiten für Sie, wenn Sie aber nicht so viel Kontrolle über den Server haben.

Ich habe ein Skript bekam ich einen bestimmten Skript an die dev / Live-Sites (sie laufen beide auf demselben Server) zu implementieren.

#!/bin/sh

REV=2410
REVDIR=$REV.20090602-1027

REPOSITORY=svn+ssh://topbit@svn.example.com/var/svn/website.com/trunk
IMAGES=$REVDIR/php/i
STATIC1=$REVDIR/anothersite.co.uk

svn export --revision $REV  $REPOSITORY $REVDIR

mkdir -p $REVDIR/tmp/templates_c
chown -R username: $REVDIR
chmod -R 777       $REVDIR/tmp $REVDIR/php/cache/
chown -R nobody:   $REVDIR/tmp $REVDIR/php/cache/ $IMAGES
dos2unix $REVDIR/bin/*sh  $REVDIR/bin/*php
chmod 755 $REVDIR/bin/*sh $REVDIR/bin/*php

# chmod -x all the non-directories in images
find $IMAGES -type f -perm -a+x | xargs -r chmod --quiet -x
find $STATIC1 -type f -perm -a+x | xargs -r chmod --quiet -x

ls -l $IMAGES/* | grep -- "-x"

rm dev && ln -s $REVDIR dev

Ich habe die Revison Nummer und Datum / Uhrzeit, die für den abgemeldeten Verzeichnisnamen verwendet wird. Die chmod ist in der Mitte macht auch sre die Berechtigungen für die Bilder OK werden, wie sie auch unseren engagierten Bildserver symlinked werden.

Das letzte, was ... / website / dev / ist neu gebunden an das neu ausgecheckt Verzeichnis ist ein altes Symlink passiert. Die Apache-Konfigurations hat dann eine doc-Wurzel ... / website / dev / htdocs /

Es gibt auch eine passende ... / website / live / htdocs / docroot, und wieder 'live' ist ein weiterer symbolischer Link. Das ist mein anderes Skript, das den Live-Symlink entfernen, und ersetzen Sie es mit dem, was dev Punkten zu.

#!/bin/sh
# remove live, and copy the dir pointed to by dev, to be the live symlink
rm live && cp -d dev live

Ich bin nur eine neue Version der Website alle paar dats drängen, so dass Sie nicht einen Tag (meine APC-Cache möchten nicht als ein paar Versionen der Website mehr um) unter Verwendung dies mehrmals werden mögen, aber für mich, finde ich das für meinen eigenen Einsatz sehr problemfrei sein.

Nach 3 Jahren habe ich ein wenig über Deployment Best Practices gelernt. Ich zur Zeit ein Tool namens Capistrano weil es einfach einzurichten und zu verwenden, und es Griffe schön viele Ausfälle.

Die Grundlagen eines automatisierten Deployment-Prozess geht wie folgt aus:

  1. Ihr Code ist bereit für die Produktion, so ist es mit der Version des Release markiert: v1.0.0
  2. Angenommen, Sie bereits Ihren Deployment-Skript konfiguriert haben, führen Sie das Skript, den Tag spezifizieren, welches Sie gerade erstellt hat.
  3. Das Skript SSH vorbei auf dem Produktionsserver, die die folgende Verzeichnisstruktur hat:

    /your-application
        /shared/
            /logs
            /uploads
        /releases/
            /20120917120000
            /20120918120000  <-- latest release of your app
                /app
                /config
                /public
                ...etc
        /current --> symlink to latest release
    
    Your Apache document root should be set to /your-application/current/public
    
  4. Das Skript erstellt ein neues Verzeichnis im Verzeichnis releases Verzeichnis mit dem aktuellen Datetime. In diesem Verzeichnis wird der Code mit dem Tag aktualisiert Sie angegeben haben.

  5. Dann wird die ursprüngliche Symlink entfernt und ein neuer symbolischer Link erstellt wird, auf die neueste Version zeigt.

Dinge, die zwischen den Versionen gehalten werden müssen gehen in dem freigegebenen Verzeichnis, und Symlinks ist auf diese freigegebenen Verzeichnisse erstellt.

Es hängt von Ihrer Anwendung und wie fest die Tests sind.

Wo ich alles funktionieren wird in das Repository für die Überprüfung geprüft und dann freigegeben wird.

Automatische Aktualisierung aus einem Repository wäre für uns nicht klug sein, wie es manchmal einchecken wir einfach so, dass andere Entwickler eine höhere Version ziehen und dort Änderungen zusammenführen.

Zu tun, was Sie sprechen würde in irgendeine Art von Sekundärprüfung muß und aus der Zusammenarbeit zwischen den Entwicklern in der primären Check-in Bereich zu ermöglichen. Obwohl ich weiß nichts über das, oder wenn sie sogar möglich.

Es gibt auch Fragen mit Verzweigungen und anderen ähnlichen Funktionen, die behandelt werden müßten.

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