IIS7 - Herramienta de implementación web - SetParam / SetParamFile para establecer enlaces http y https + Cert

8

Actualmente estamos utilizando la herramienta de implementación web de MS para sincronizar un sitio web en vivo y algunos servicios web desde un cuadro intermedio a dos servidores en vivo.

El cuadro de ensayo aloja el sitio en cualquier IP en el puerto 17000, mientras que los dos servidores en vivo tienen equilibrio de carga y tienen una IP diferente para cada uno de ellos.

En la actualidad, genero dos paquetes separados para la implementación, uno para cada máquina, utilizando la operación de sincronización y especificando un parámetro DestinationBinding de la siguiente manera:

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

(Dividir en varias líneas para que sea más fácil de leer!)

Ejecuto esto dos veces, con un nombre de archivo de destino y una dirección IP diferentes para cada una de las dos máquinas. Cuando se trata de la implementación, simplemente hago una sincronización de cada paquete a su respectivo sitio en vivo.

Lo sé, lo sé. Debería poder hacerlo generando un paquete parametrizado y luego quizás usando el conmutador SetParamFile para cada uno de los dos servidores. Créanme que me gustaría, pero la documentación sobre esto es francamente existente.

Ahora necesito configurar e implementar enlaces HTTP y HTTPS para este sitio; incluyendo también el certificado SSL que se utilizará.

Agregué un enlace SSL para el sitio en el cuadro de ensayo, que usa un certificado de desarrollo (que tendrá que ser reemplazado, o ¿debería el cuadro de ensayo usar el certificado en vivo?), Y ahora la línea de comando anterior tiene el efecto de reemplazar la IP de destino en las entradas http y https.

Parece que no puedo especificar enlaces múltiples más la información del certificado en el valor de DestinationBinding en el -setParam anterior, así que ¿alguien sabe cómo haría esto?

Cualquier ayuda muy apreciada.

Andras Zoltan
fuente
1
tal vez deberías agregar msdeply como etiqueta. también podría saltar a stackoverflow.com ya que hay una serie de msdeploy
MikeJ
ahora hay un buen punto :)
Andras Zoltan
Sí, primero pensé en StackOverflow; se dio cuenta de que las operaciones de nivel inferior de msdeploy tienen más probabilidades de ser útiles para el soporte técnico / administradores que los desarrolladores. Si no llego a ninguna parte aquí, entonces tal vez retire esta pregunta y publique allí, como sugiere. Siempre podría argumentar que soy un desarrollador, y no un analista, y si necesito saberlo, ¡probablemente otros desarrolladores también lo hagan!
Andras Zoltan

Respuestas:

7

Ok, así que llegué hasta aquí: no estoy publicando esto como una edición de la pregunta, en el caso de que, aunque parezca estar en el camino correcto, podría haber una mejor manera de lo que he estado trabajando. . ¡Creo que dejaría que la democracia decidiera!

Usando este enlace pude averiguar el formato del archivo XML que debería usarse con el setParamFileconmutador para msdeploy. También, en el pasado, descubrí el formato para declareParamFile XML utilizando la GUI incrustada dentro de IIS después de instalar la herramienta de implementación web.

Entonces, dado un sitio llamado 'SiteA', con dos entradas vinculantes en el archivo applicationHost.config de la siguiente manera:

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

(Lo que significa, específicamente, cualquier dirección IP en el puerto 80 y cualquier dirección IP en el puerto 443)

El certificado real que se utiliza no se almacena en applicationHost.Config, sino en la configuración de Http.sys (de acuerdo con este artículo ). Cuando msdeploy prepara un paquete para el sitio, incorporará esa información, lo que podría no ser una bendición como menciono al final.

El primer paso es declarar un archivo xml de parámetros que usaremos para parametrizar un solo paquete para los servidores en vivo de destino:

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

Tenga en cuenta los valores de atributo 'match =' en las dos entradas de parámetros internos. Esto asegura que se reemplaza la unión correcta. Este es un Regex (como se describe en este artículo de Technet ) que selecciona los valores de enlace existentes que se cambiarán con el valor del parámetro que se pasará en un momento.

Guardamos esto como declareparameters.xml.

Con esto en su lugar, ahora podemos generar un paquete parametrizado, desde nuestro cuadro de etapas, desde el cual podemos implementarlo, usando esta línea de comando (esto es para 'crear imágenes' de un IIS completo dentro del cual está presente nuestro SiteA):

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

Si el sitio web está en un servidor web diferente, reemplace 'localhost' con el nombre de ese servidor web. El servicio del Agente de implementación web debe ejecutarse en la máquina de destino para que esto funcione.

Ahora, declaramos un archivo xml de parámetros que realmente proporcionará valores de parámetros para una implementación en un servidor en vivo:

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

Y lo guardamos como

[targetServerName]parameters.xml

(en mi caso, tengo dos servidores de destino, por lo que cada uno tiene sus propios parámetros xml con un nombre de archivo diferente e IP ligeramente diferentes en cada uno).

Finalmente, podemos realizar la implementación parametrizada en los servidores de destino con esta línea de comando:

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

Así que ahora podemos cambiar las direcciones IP de los enlaces Http o Https y, si los originales son lo suficientemente diferentes, podemos parametrizar cualquier número de enlaces individuales que puedan ser necesarios para ese sitio.

Esto tiene un inconveniente hasta el momento, por lo que se agradece cualquier respuesta alternativa, la configuración de SSL se copia de la máquina de origen en el paquete, lo que significa que para que la configuración de SSL en el sitio en vivo sea correcta en la implementación, tanto la máquina de preparación como la los servidores en vivo deben usar exactamente los mismos certificados SSL.

Lo que sería genial es que el cuadro de ensayo pudiera usar un certificado autofirmado o interno para la verificación de la cordura, y luego aplicar el certificado SSL real en la implementación real, nuevamente, parametrizado a partir de los archivos XML.

Andras Zoltan
fuente
Esto parece ser una limitación de la herramienta msdeploy, y la única solución es escribir un script iis adicional que msdeploy pueda ejecutar. Este script envolvería los enlaces adicionales, con material de certificación SSL. Esta es una pena increíble.
Andras Zoltan
0

Puede reemplazar el número de puerto agregando el interruptor de línea de comando -replace

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

Mariusz
fuente