Wie machen Sie die Produktion von IIS-Website-Depoys?
15
Sie sind sich also nicht sicher, ob es sich um eine Stapelüberlauf- oder eine Serverfehlerfrage handelt. Wenn ich eine .NET-Website habe, die ich in der Produktionsumgebung bereitstellen möchte, wie gehe ich am besten vor? Sollte ich es als MSI verpacken und installieren? Verwenden Sie nant, um die benötigten Dateien nach oben zu verschieben. FTPen Sie die Dateien einfach mit Beyond Compare?
Wie stellen Sie Produktionscode bereit? Dies ist ein Windows-spezifischer Fall, den ich hier betrachte.
IIS unterstützt die xcopy-Bereitstellung, sodass Sie nur die Dateien kopieren müssen, es sei denn, Sie haben spezielle Anforderungen.
Eine Möglichkeit ist ein einfaches Skript, das ROBOCOPY verwendet, um die neuen Dateien auf den Server zu kopieren.
Wenn die Site groß ist und dies zu lange dauert, verwenden Sie ein Versionskontrollsystem. Ich mag Mercurial für diesen Zweck, obwohl Sie darauf achten müssen, dass die Konfigurationsdateien des Versionskontrollsystems nicht der Öffentlichkeit zugänglich gemacht werden. Bei der Bereitstellung müssen Sie lediglich die Änderungen festschreiben und anschließend die neueste Version auf dem Server auschecken. Dies ist nicht nur effizient, sondern ermöglicht auch schnelle Rollbacks (wenn Sie die letzte gute Version markiert haben), falls Ihre neueste und beste Version einen Showstopper-Fehler aufweist.
Um Ausfallzeiten zu minimieren, kann das Skript die Dateien in ein neues Verzeichnis kopieren und die Verzeichnisse dann schnell umbenennen oder die Position ändern, an der IIS auf das neue Verzeichnis verweist.
Das Versionskontrollsystem ist ansprechend, aber für Websites, die kompiliert werden müssen, funktioniert es möglicherweise nicht so gut. Sofern eine kompilierte Version nicht unter Versionskontrolle bleibt, natürlich.
Jonathon Watney
1
Ich hätte nie gedacht, ein Quellcodeverwaltungssystem in die Produktion aufzunehmen. Interessant ist sicher, dass Sie Tonnen von zusätzlichen Zip-Dateien aufbewahren müssen.
JoshBerke
Ich mache das die ganze Zeit mit Subversion. In Apache würden Sie mod_rewrite verwenden, um sicherzustellen, dass Benutzer nicht auf die .svn-Verzeichnisse zugreifen können. Die Verwendung der Versionskontrolle für die Bereitstellung ist definitiv der richtige Weg.
Luke
13
Ziehen Sie die Verwendung des Webbereitstellungstools von Microsoft in Betracht . Es wurde speziell für die Bereitstellung von Webanwendungen und Aktualisierungen dieser Webanwendungen auf IIS 6- und IIS 7-Produktionswebservern entwickelt und erfüllt diese Aufgabe besser als MSI (Windows Installer), IMHO.
Normalerweise verwenden Sie es, indem Sie irgendwo eine "Gold Master" -Site einrichten und dann dem Tool anweisen, die Änderungen von dort aus zu packen. Anschließend wird ein Zielserver für die Bereitstellung überprüft und alle erforderlichen Änderungen vorgenommen, damit er wie der Gold Master aussieht (was für spätere Aktualisierungen hilfreich ist). Dies ist besonders nützlich, wenn Sie auf mehreren Webservern (z. B. einer Farm) bereitstellen und die Bereitstellung von mehr als nur Dateien unterstützt wird (auch das Vornehmen von Registrierungsänderungen, das Bereitstellen von Zertifikaten, SQL-Datenbanken usw. ist möglich).
+ unendlich. Dieses Tool ist ein Lebensretter und macht ganze Abteilungen (a la tsilb) frei, um an interessanteren Problemen zu arbeiten.
Portman
4
Ich würde Joels Antwort durch den Vorschlag eines Continuous Integration-Servers ergänzen, der Ihre Änderungen von Ihrem Versionsverwaltungssystem übernimmt. Es wird dann das Projekt erstellen. Lassen Sie es dann die Ausgabe des Builds in einen neuen Ordner kopieren. Sie können dann einige schnelle Konfigurationsänderungen vornehmen (web.config und app.config). Voila, bereit für Xcopy!
Was ich bei meinem früheren Arbeitgeber getan habe, bei dem es sich im Grunde um eine Auktions- / E-Commerce-Site handelte, bei der wir nicht viel Ausfallzeit zulassen konnten:
Nehmen Sie eine gezippte Build-Version des Releases / der Version, die auf dem Build-Server bereitgestellt werden soll
Testen Sie es auf einem Staging-Server, der eine Kopie der Produktionsdatenbank und dieselbe Softwareversion wie die Produktionssoftware hat. Testen Sie, dass alles reibungslos lief. Wenn nicht, starten Sie die Bereitstellung des Staging-Servers neu (stellen Sie jedoch zuerst eine Sicherung wieder her).
Wenn alles geklappt hat: Kopieren Sie Build- und Datenbank-Upgrade-Skripts auf den Produktionsserver in einen lokalen Ordner. Erstellen Sie eine spezifische Sicherung der Datenbank und der ASP.NET-Dateien (falls immer noch etwas schief geht). Bereite dann alles so vor, dass ich nur noch die Eingabetaste drücken muss, um das Upgrade-Skript und das Kopieren der Datenbankdateien zu starten (beachte, dass ich ein Skript dafür erstellen könnte). Dann starte alles. Dies ist normalerweise eine Frage von Sekunden, und die Benutzer werden kaum bemerken, dass Ausfallzeiten aufgetreten sind.
Es gibt eine Menge lustigerer Dinge, die man als Webentwickler tun kann. Dies war jedoch der wichtigste Teil meiner Arbeit.
oh jeeez, bei der arbeit haben wir ein ganzes team dafür. Sie verfügen über ein internes Tool, mit dem ein Server aus dem Cluster / der Farm entfernt, die Dateien veröffentlicht, die NUnits ausgeführt und wieder in den Cluster / die Farm eingefügt werden. Sie tun dies für jeden von 16 Servern. Es dauert Stunden. Der Rest von uns hat noch nicht einmal einen "Rundumzugang".
Für meine persönlichen Projekte veröffentliche ich ab VS2005 direkt auf meinem Webserver. Ein bisschen hat weniger strenge Sicherheit.
Ziehen Sie die Verwendung des Webbereitstellungstools von Microsoft in Betracht . Es wurde speziell für die Bereitstellung von Webanwendungen und Aktualisierungen dieser Webanwendungen auf IIS 6- und IIS 7-Produktionswebservern entwickelt und erfüllt diese Aufgabe besser als MSI (Windows Installer), IMHO.
Normalerweise verwenden Sie es, indem Sie irgendwo eine "Gold Master" -Site einrichten und dann dem Tool anweisen, die Änderungen von dort aus zu packen. Anschließend wird ein Zielserver für die Bereitstellung überprüft und alle erforderlichen Änderungen vorgenommen, damit er wie der Gold Master aussieht (was für spätere Aktualisierungen hilfreich ist). Dies ist besonders nützlich, wenn Sie auf mehreren Webservern (z. B. einer Farm) bereitstellen und die Bereitstellung von mehr als nur Dateien unterstützt wird (auch das Vornehmen von Registrierungsänderungen, das Bereitstellen von Zertifikaten, SQL-Datenbanken usw. ist möglich).
quelle
Ich würde Joels Antwort durch den Vorschlag eines Continuous Integration-Servers ergänzen, der Ihre Änderungen von Ihrem Versionsverwaltungssystem übernimmt. Es wird dann das Projekt erstellen. Lassen Sie es dann die Ausgabe des Builds in einen neuen Ordner kopieren. Sie können dann einige schnelle Konfigurationsänderungen vornehmen (web.config und app.config). Voila, bereit für Xcopy!
Schauen Sie sich CruiseControl.NET an
quelle
Was ich bei meinem früheren Arbeitgeber getan habe, bei dem es sich im Grunde um eine Auktions- / E-Commerce-Site handelte, bei der wir nicht viel Ausfallzeit zulassen konnten:
Es gibt eine Menge lustigerer Dinge, die man als Webentwickler tun kann. Dies war jedoch der wichtigste Teil meiner Arbeit.
quelle
oh jeeez, bei der arbeit haben wir ein ganzes team dafür. Sie verfügen über ein internes Tool, mit dem ein Server aus dem Cluster / der Farm entfernt, die Dateien veröffentlicht, die NUnits ausgeführt und wieder in den Cluster / die Farm eingefügt werden. Sie tun dies für jeden von 16 Servern. Es dauert Stunden. Der Rest von uns hat noch nicht einmal einen "Rundumzugang".
Für meine persönlichen Projekte veröffentliche ich ab VS2005 direkt auf meinem Webserver. Ein bisschen hat weniger strenge Sicherheit.
quelle