IIS7 - Outil de déploiement Web - SetParam / SetParamFile pour définir les liaisons http et https + Cert


8

nous utilisons actuellement l' outil de déploiement Web MS pour synchroniser un site Web en direct et certains WebServices d'une boîte de transfert vers deux serveurs en direct.

Le boîtier de transfert héberge le site sur n'importe quelle IP sur le port 17000, tandis que les deux serveurs en direct sont à charge équilibrée et ont une IP différente pour chacun d'eux.

À l'heure actuelle, je génère deux packages distincts pour le déploiement - un pour chaque machine - à l'aide de l'opération de synchronisation et en spécifiant un paramètre DestinationBinding comme suit:

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="machinename.zip"
  -setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".

(Répartissez-le sur plusieurs lignes pour en faciliter la lecture!)

Je l'exécute deux fois, avec un nom de fichier cible et une adresse IP différents pour chacune des deux machines. En ce qui concerne le déploiement, je fais simplement une synchronisation de chaque package vers son site en direct respectif.

Je sais, je sais - je devrais être capable de le faire en générant un package paramétré puis en utilisant peut-être le commutateur SetParamFile pour chacun des deux serveurs - croyez-moi, j'aimerais bien, mais la documentation sur la façon de procéder est franchement non existant.

Maintenant, je dois configurer et déployer la liaison HTTP et HTTPS pour ce site; y compris également le certificat ssl qui doit être utilisé.

J'ai ajouté une liaison SSL pour le site sur la boîte de transfert - qui utilise un certificat de développement (qui devra être remplacé - ou la boîte de transfert doit-elle utiliser le certificat en direct?), Et maintenant la ligne de commande ci-dessus a l'effet de remplacer l'adresse IP cible sur les entrées http et https.

Il semble que je ne puisse pas spécifier plusieurs liaisons plus les informations de cert dans la valeur DestinationBinding dans le -setParam ci-dessus, donc quelqu'un sait comment pourrais-je procéder?

Toute aide grandement appréciée.


1
vous devriez peut-être ajouter msdeply comme balise. pourrait également passer à stackoverflow.com car il existe un certain nombre de msdeploy
MikeJ

il y a maintenant un bon point :)
Andras Zoltan

Oui - j'ai d'abord pensé à StackOverflow; ont pensé que les opérations de niveau inférieur de msdeploy sont plus susceptibles d'être utiles au support technique / aux administrateurs qu'aux développeurs. Si je n'arrive nulle part ici, je retirerai peut-être cette question et posterai là-bas comme vous le suggérez. Je pourrais toujours affirmer que je suis un développeur et non un analyste, et si j'ai besoin de le savoir, d'autres développeurs le feront probablement aussi!
Andras Zoltan

Réponses:


7

Ok donc je suis arrivé jusqu'ici - je ne poste pas ceci comme une modification à la question, au cas où, bien que cela semble être sur la bonne voie, il pourrait y avoir un meilleur moyen que celui sur lequel j'ai travaillé . Je laisserais la démocratie décider!

En utilisant ce lien, j'ai pu déterminer le format du fichier XML qui devrait être utilisé avec le setParamFilecommutateur pour msdeploy. J'avais également, par le passé, trouvé le format du XML declareParamFile en utilisant l'interface graphique intégrée dans IIS après l'installation de l'outil de déploiement Web.

Donc, étant donné un site appelé «SiteA», avec deux entrées de liaison dans le fichier applicationHost.config comme suit:

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

(Ce qui signifie, spécifiquement - toute adresse IP sur le port 80 et toute adresse IP sur le port 443)

Le certificat réel utilisé n'est pas stocké dans applicationHost.Config, mais à la place dans la configuration pour Http.sys (selon cet article ). Lorsque msdeploy prépare un package pour le site, il intègre ces informations - ce qui pourrait ne pas être une bénédiction comme je le mentionne à la fin.

La première étape consiste à déclarer un fichier xml de paramètres que nous utiliserons pour paramétrer un seul package pour les serveurs live cibles:

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

Notez les valeurs d'attribut 'match =' sur les deux entrées de paramètres internes. Cela garantit que la liaison correcte est remplacée. Il s'agit d'une expression régulière (comme décrit dans cet article technet ) qui sélectionne les valeurs de liaison existantes qui doivent être modifiées avec la valeur de paramètre qui sera transmise dans un instant.

Nous l'enregistrons sous declareparameters.xml.

Avec cela en place, nous pouvons maintenant générer un package paramétré, à partir de notre boîte de transfert, à partir duquel nous pouvons ensuite déployer, à l'aide de cette ligne de commande (c'est pour «l'image» d'un IIS entier dans lequel notre SiteA est présent):

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

Si le site Web se trouve sur un autre serveur Web, remplacez «localhost» par le nom de ce serveur Web. Le service Web Deploy Agent doit être exécuté sur la machine cible pour que cela fonctionne.

Maintenant, nous déclarons un fichier xml de paramètres qui fournira réellement des valeurs de paramètres pour un déploiement sur un serveur en direct:

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

Et nous enregistrons cela comme

[targetServerName]parameters.xml

(dans mon cas, j'ai deux serveurs cibles, donc chacun obtient ses propres paramètres xml avec un nom de fichier différent et des adresses IP légèrement différentes dans chacun).

Enfin, nous pouvons effectuer le déploiement paramétré sur le (s) serveur (s) cible (s) avec cette ligne de commande:

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

Alors maintenant, nous pouvons changer les adresses IP de la liaison Http ou Https et, si les originaux sont suffisamment différents, nous pouvons paramétrer n'importe quel nombre de liaisons individuelles qui pourraient être nécessaires pour ce site.

Cela a un inconvénient jusqu'à présent - donc toutes les réponses alternatives sont appréciées s'il vous plaît - la configuration SSL est copiée de la machine source dans le package - ce qui signifie que pour que la configuration SSL sur le site en direct soit correcte lors du déploiement, à la fois la machine intermédiaire et le ou les serveurs en direct doivent utiliser exactement les mêmes certificats SSL.

Ce qui serait génial, c'est que la boîte de transfert puisse utiliser un certificat auto-signé ou interne pour la vérification de l'intégrité, puis que le véritable certificat SSL soit appliqué sur le déploiement réel - encore une fois, paramétré à partir des fichiers XML.


Cela semble être une limitation de l'outil msdeploy - et la seule solution est d'écrire un script iis supplémentaire que msdeploy peut exécuter. Ce script emballerait les liaisons supplémentaires, avec des trucs de cert SSL. C'est une honte incroyable.
Andras Zoltan

0

Vous pouvez remplacer le numéro de port en ajoutant le commutateur de ligne de commande -replace

msdeploy -verb: sync -source: WebServer, computerName = localhost -dest: package = "machinename.zip" -replace: objectName = binding, targetAttributeName = bindingInformation, match =: 443:, replace =: 445:

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.