IIS7 - Web Deployment Tool - SetParam / SetParamFile zum Festlegen von http- und https-Bindungen + Cert


8

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.


1
Vielleicht sollten Sie msdeply als Tag hinzufügen. könnte auch zu stackoverflow.com springen, da es eine Reihe von msdeploy gibt
MikeJ

Jetzt gibt es einen guten Punkt :)
Andras Zoltan

Ja - ich habe zuerst an StackOverflow gedacht; stellten fest, dass Operationen auf niedrigerer Ebene von msdeploy eher für den technischen Support / Administratoren von Nutzen sind als für Entwickler. Wenn ich hier nicht weiterkomme, werde ich diese Frage vielleicht zurückziehen und stattdessen dort posten, wie Sie vorschlagen. Könnte immer argumentieren, dass ich ein Entwickler und kein Analyst bin, und wenn ich es wissen muss, dann tun es wahrscheinlich auch andere Entwickler!
Andras Zoltan

Antworten:


7

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 setParamFileSwitch 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:

<bindings>
  <binding protocol="http" bindingInformation="*:80:" />
  <binding protocol="https" bindingInformation="*:443:" />
</bindings>

(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:

<parameters>
  <!-- declare parameter for Http Binding -->
  <parameter name="SiteA-http" description="SiteA Http Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":80:" />
  </parameter>
  <!-- declare parameter for Https Binding -->
  <parameter name="SiteA-https" description="SiteA Https Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":443:" />
  </parameter>
</parameters>

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):

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="parameterised.zip"
  -declareParamFile:declareparameters.xml

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 :

<parameters>
  <setParameter name="SiteA-http" value="[fixedIPAddress]:80:"/>
  <setParameter name="SiteA-https" value="[fixedIPAddress]:443:"/>
</parameters>

Und das speichern wir als

[targetServerName]parameters.xml

(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:

msdeploy -verb:sync 
  -source:package="parameterised.zip"
  -dest:WebServer,computerName="[targetServerName]"
  -setParamFile=[targetServerName]parameters.xml

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.


Dies scheint eine Einschränkung des msdeploy-Tools zu sein - und die einzige Lösung besteht darin, ein zusätzliches iis-Skript zu schreiben, das msdeploy ausführen kann. Dieses Skript würde die zusätzlichen Bindungen mit SSL-Zertifizierungsmaterial abschließen. Das ist eine unglaubliche Schande.
Andras Zoltan

0

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:

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.