Vor kurzem war es mal wieder soweit: Umzug war angesagt – Web Server Umzug und ich durfte es machen.

So irgendwie fühlte ich mich wie im wahren Leben:

Haufenweise unterschiedliche Sachen (Dateien, Konfiguration, Datenbanken) welche von A nach B transportiert werden müssen. Die Türen dabei zu eng (kein FTP möglich) – und weit und breit keiner der helfen will (Website Owner:"Das kannst Du doch schnell für mich kopieren?!")

Nur meist bleibt es nicht allein beim Kopieren. So wollen z.B. Websites angelegt, NTFS Berechtigungen vergeben und Datenbanken importiert werden.

Eigentlich eine Aufgabe die keinen Spaß macht – und für die man gerne bezahlen würde wenn man nur sicherstellen könnte, dass danach alles so funktioniert wie man sich das vorgestellt hat.

 

Die Lösung:

Mit Web Deploy 2.0 (aka Web Deployment Tool) lassen sich Websites oder gar ganze IIS-Server mit allem was dazugehört (NTFS Rechte,GAC Assemblies, SQL Server, MySQL, Zertifikate, COM, Registry, etc.) umziehen bzw. klonen. Und das noch komplett kostenlos.

 

Das Konzept:

Web Deploy 2.0 ist im Wesentlichen eine Reihe von Tools welche sich zum Teil in bestehende Produkte (WebMatrix, VS 2010, IIS) integrieren. Mittels dieser Tools kann man im einfachsten Fall den Inhalt eines Ordners (c:\temp) von Maschine A nach B kopieren:

sync contentpath from A to B

Dazu könnte ein User auf Maschine A über die Web Deploy Command Line eine sync Operation absetzen, die mit dem Deployment Handler im Management Service des IIS kommuniziert:

msdeploy -verb:sync -source:contentPath="C:\temp\" -dest:contentPath="C:\temp\",wmsvc="B(destination)...de",username="admin...",password="••••••"

Übertragen wird nur was anders ist wurde (also die Differenz zwischen A und B) – das schont die Bandbreite und ist schnell. Da Ordner und Datei auf dem Ziel noch nicht existieren könnte das Ergebnis der obigen Operation so o.ä. aussehen:

Info: Using ID '8a1dc0a1-ec96-49e7-b1db-a8b58ecbadc3' for connections to the remote server.
Info: Adding MSDeploy.contentPath (MSDeploy.contentPath).
Info: Adding contentPath (C:\temp\).
Info: Adding dirPath (C:\temp\).
Info: Using ID '818f00c1-8475-4144-bbf8-e7bfa3af1686' for connections to the remote server.
Info: Adding child filePath (C:\temp\test.txt).
Total changes: 4 (4 added, 0 deleted, 0 updated, 0 parameters changed, 0 bytes copied)

Die Kommunikation und Übertragung der Daten erfolgt über eine sichere verschlüsselte https Verbindung und macht diese Art der Übertragung ideal gerade bei Firewalls und wenn FTP nicht möglich ist.

 

Nur ein xcopy über https?

Mit Web Deploy läßt sich aber deutlich mehr übertragen als nur Ordner oder einzelne Dateien. So können z.B. ganze Datenbanken, Datei- und Ordnerberechtigungen, Registry Settings, etc. Web Deploy stellt dazu eine ganze Reihe von Web Deploy Providers zur Verfügung um die einzelnen Datenquellen zu anzusprechen.

Was (welchen Provider) jemand von A nach B synchronisiert (benutzen darf) ist delegierbar, d.h. z.B. ein User muss nicht zwingend Administrator auf dem Zielsystem sein um z.B. seine MySQL Datenbank downzuloaden. Die Integration von Web Deployment in den IIS, erlaubt dem Admin zu regeln, wer was darf:

verwaltungsdiensdelegierung

Ein Erfahrungsbericht:

Web Deploy hat mich persönlich überzeugt, und das schreibe ich nur weil ich bei Microsoft arbeite J.

Im Rahmen eines IIS-Server Umzugs mussten mehr als 40GB an Daten transferiert werden was diverse Stunden gedauert hat. Die Websites wurden manuell auf Funktionalität getestet. Anschließend wurden die Inhalte immer wieder abgeglichen – bevor der DNS Eintrag geändert wurde.

Bestandteil des Umzugs waren diverse Websites mit Einstellungen eine FTP Site, sehr viele kleine Dateien (wenige kB) und einige Große (diverse GB). Bei alldem hat das Tool zuverlässig gearbeitet:

cmd output

Nachdem man sich etwas mit der Toolsyntax und den einzelnen Providern auseinandergesetzt hat kann ein Abgleich 2er Server lediglich durch ein Batch erfolgen.

 

Zeit sich einen Kaffee zu holen und den Maschinen beim Arbeiten zuzuschauen.

Links: