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.
fuente
Respuestas:
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
setParamFile
conmutador 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:
(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:
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):
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:
Y lo guardamos como
(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:
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.
fuente
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:
fuente