Derzeit verwenden wir das MS Web Deployment Tool, um eine Live-Website und einige WebServices von einer Staging-Box mit zwei Live-Servern zu synchronisieren.
Die Staging-Box hostet die Site auf einer beliebigen IP an Port 17000, während die beiden Live-Server einen Lastenausgleich aufweisen und für jeden eine andere IP haben.
Derzeit generiere ich zwei separate Pakete für die Bereitstellung - eines für jeden Computer - mithilfe der Synchronisierungsoperation und unter Angabe eines DestinationBinding-Parameters wie folgt:
msdeploy -verb:sync
-source:WebServer,computerName=localhost
-dest:package="machinename.zip"
-setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".
(Auf mehrere Zeilen aufgeteilt, um das Lesen zu erleichtern!)
Ich führe dies zweimal aus, mit einem anderen Zieldateinamen und einer anderen IP-Adresse für jeden der beiden Computer. Wenn es um die Bereitstellung geht, synchronisiere ich einfach jedes Paket mit seiner jeweiligen Live-Site.
Ich weiß, ich weiß - ich sollte es tun können, indem ich ein parametrisiertes Paket generiere und dann vielleicht den SetParamFile-Schalter für jeden der beiden Server verwende - glauben Sie mir, ich würde es gerne tun, aber die Dokumentation dazu ist offen gesagt nicht existent.
Jetzt muss ich sowohl die HTTP- als auch die HTTPS- Bindung für diese Site konfigurieren und bereitstellen . einschließlich auch des zu verwendenden ssl-zertifikats.
Ich habe eine SSL-Bindung für die Site auf der Staging-Box hinzugefügt - die ein Entwicklungszertifikat verwendet (das ersetzt werden muss - oder sollte die Staging-Box das Live-Zertifikat verwenden?), Und jetzt hat die obige Befehlszeile den Effekt zum Ersetzen der Ziel-IP sowohl für http- als auch für https-Einträge.
Es scheint, dass ich nicht mehrere Bindungen plus die Zertifizierungsinformationen im DestinationBinding-Wert im obigen -setParam angeben kann. Weiß also jemand, wie ich das machen soll?
Jede Hilfe sehr geschätzt.
quelle
Antworten:
Ok, also bin ich so weit gekommen - ich poste dies nicht als Bearbeitung der Frage, da es nicht möglich ist, dass es einen besseren Weg gibt als das, woran ich gearbeitet habe, obwohl dies auf dem richtigen Weg zu sein scheint . Ich würde die Demokratie entscheiden lassen!
Über diesen Link konnte ich das Format der XML-Datei ermitteln, die mit dem
setParamFile
Switch für msdeploy verwendet werden soll. In der Vergangenheit hatte ich auch das Format für das DeklarationsparamFile-XML mithilfe der eingebetteten GUI in IIS nach der Installation des Web Deployment Tools ermittelt.Bei einer Site namens 'SiteA' mit zwei verbindlichen Einträgen in der Datei applicationHost.config wie folgt:
(Was speziell bedeutet - jede IP-Adresse an Port 80 und jede IP-Adresse an Port 443)
Das tatsächlich verwendete Zertifikat wird nicht in applicationHost.Config gespeichert, sondern in der Konfiguration für Http.sys (gemäß diesem Artikel ). Wenn msdeploy ein Paket für die Site vorbereitet, werden diese Informationen eingebettet - was möglicherweise kein Segen ist, wie ich am Ende erwähne.
Der erste Schritt besteht darin, eine Parameter-XML-Datei zu deklarieren, mit der ein einzelnes Paket für die Live-Zielserver parametrisiert wird:
Beachten Sie die Attributwerte 'match =' für die beiden inneren Parametereinträge. Dies stellt sicher, dass die korrekte Bindung ersetzt wird. Dies ist ein Regex (wie in diesem Technet-Artikel beschrieben ), der die vorhandenen Bindungswerte auswählt, die mit dem Parameterwert geändert werden sollen, der in einem Moment übergeben wird.
Wir speichern dies als
declareparameters.xml
.Mit dieser Funktion können wir jetzt aus unserer Staging-Box ein parametrisiertes Paket generieren, aus dem wir dann über diese Befehlszeile bereitstellen können (dies dient dazu, einen gesamten IIS abzubilden, in dem unsere SiteA vorhanden ist):
Wenn sich die Website auf einem anderen Webserver befindet, ersetzen Sie 'localhost' durch den Namen dieses Webservers. Der Web Deploy Agent-Dienst muss auf dem Zielcomputer ausgeführt werden, damit dies funktioniert.
Jetzt deklarieren wir eine Parameter-XML-Datei, die tatsächlich Parameterwerte für eine Bereitstellung auf einem Live-Server bereitstellt :
Und das speichern wir als
(In meinem Fall habe ich zwei Zielserver, daher erhält jeder seine eigenen Parameter xml mit einem anderen Dateinamen und leicht unterschiedlichen IPs in jedem).
Schließlich können wir die parametrisierte Bereitstellung auf den Zielservern mit dieser Befehlszeile durchführen:
Jetzt können wir die IPs der HTTP- oder HTTP-Bindung ändern und, wenn die Originale ausreichend unterschiedlich sind, eine beliebige Anzahl einzelner Bindungen parametrisieren, die für diese Site erforderlich sein könnten.
Dies hat bisher einen Nachteil - daher werden alternative Antworten bitte geschätzt - die SSL-Konfiguration wird vom Quellcomputer in das Paket kopiert. Dies bedeutet, dass die SSL-Konfiguration auf der Live-Site bei der Bereitstellung sowohl auf dem Staging-Computer als auch auf dem Staging-Computer korrekt ist Die Live-Server müssen genau dieselben SSL-Zertifikate verwenden.
Es wäre großartig, wenn die Staging-Box ein selbstsigniertes oder internes Zertifikat für die Überprüfung der Integrität verwenden und dann das echte SSL-Zertifikat auf die tatsächliche Bereitstellung anwenden könnte - wiederum parametrisiert aus den XML-Dateien.
quelle
Sie können die Portnummer ersetzen, indem Sie den Befehlszeilenschalter -replace hinzufügen
msdeploy -verb: sync -source: WebServer, computerName = localhost -dest: package = "machinename.zip" -replace: objectName = binding, targetAttributeName = bindingInformation, match =: 443 :, replace =: 445:
quelle