IIS7 - Ferramenta de Implantação da Web - SetParam / SetParamFile para definir ligações http e https + Cert

8

Atualmente, estamos usando a Ferramenta de implantação da Web do MS para sincronizar um site ao vivo e alguns WebServices de uma caixa de teste para dois servidores ativos.

A caixa de teste hospeda o site em qualquer IP na porta 17000, enquanto os dois servidores ativos têm balanceamento de carga e um IP diferente para cada um deles.

Atualmente, gero dois pacotes separados para implantação - um para cada máquina - usando a operação de sincronização e especificando um parâmetro DestinationBinding da seguinte forma:

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

(divida em várias linhas para facilitar a leitura!)

Eu corro isso duas vezes, com um nome de arquivo de destino e endereço IP diferentes para cada uma das duas máquinas. Quando se trata de implantação, eu simplesmente faço uma sincronização de cada pacote para o respectivo site ao vivo.

Eu sei, eu sei - eu deveria ser capaz de fazer isso gerando um pacote parametrizado e então talvez usando o switch SetParamFile para cada um dos dois servidores - acredite em mim, mas a documentação fazer isso é francamente inexistente.

Agora, preciso configurar e implantar a ligação HTTP e HTTPS para este site. incluindo também o certificado ssl que deve ser usado.

Eu adicionei uma ligação SSL para o site na caixa de preparação - que usa um certificado de desenvolvimento (que precisará ser substituído - ou a caixa de preparação deve estar usando o certificado ao vivo?) e agora a linha de comando acima tem o efeito de substituir o IP de destino nas entradas http e https.

Parece que não é possível especificar várias ligações mais as informações do certificado no valor DestinationBinding no -setParam acima, para que alguém saiba como eu faria isso?

Qualquer ajuda muito apreciada.

    
por Andras Zoltan 08.02.2010 / 15:21

2 respostas

7

Ok, então cheguei até aqui - não estou postando isso como uma edição da pergunta, na chance de que, embora isso pareça estar no caminho certo, pode haver uma maneira melhor do que está trabalhando. Figura eu deixaria a democracia decidir!

Usando setParamFile do msdeploy. . Eu também, no passado, descobri o formato para o XML declareParamFile usando a GUI incorporada no IIS depois de instalar a Ferramenta de Implantação da Web.

Assim, dado um site chamado 'SiteA', com duas entradas de ligação no arquivo applicationHost.config da seguinte forma:

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

(O que significa, especificamente - qualquer endereço IP na porta 80 e qualquer endereço IP na porta 443)

O certificado real que está sendo usado não é armazenado no applicationHost.Config, mas na configuração do Http.sys (de acordo com este artigo ). Quando o msdeploy prepara um pacote para o site, ele incorpora essas informações - o que pode não ser uma bênção, como eu mencionei no final.

O primeiro passo é declarar um arquivo xml de parâmetros que usaremos para parametrizar um único pacote para os servidores ativos 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>

Observe os valores do atributo 'match =' nas duas entradas do parâmetro interno. Isso garante que a ligação correta seja substituída. Este é um Regex (como descrito em este artigo de technet ) que seleciona o valores de ligação existentes que devem ser alterados com o valor do parâmetro que será passado em um momento.

Nós salvamos isso como declareparameters.xml .

Com isso, agora podemos gerar um pacote parametrizado, a partir de nossa caixa de preparo, a partir do qual podemos implantar usando essa linha de comando (isso é 'image' um IIS inteiro no qual nosso SiteA está presente):

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

Se o site estiver em um servidor da Web diferente, substitua "localhost" pelo nome desse servidor da web. O serviço do Web Deploy Agent deve estar em execução na máquina de destino para que isso funcione.

Agora, declaramos um arquivo xml de parâmetros que, na verdade, fornecerá valores de parâmetro para uma implantação em um servidor ativo:

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

E nós salvamos isso como

[targetServerName]parameters.xml

(no meu caso eu tenho dois servidores de destino, então cada um recebe seus próprios parâmetros xml com um nome de arquivo diferente e IPs ligeiramente diferentes em cada um).

Finalmente, podemos executar a implantação parametrizada para o (s) servidor (es) de destino com esta linha de comando:

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

Agora, podemos alterar os IPs do Http ou Https Binding e, se os originais forem suficientemente diferentes, podemos parametrizar qualquer número de ligações individuais que possam ser necessárias para esse site.

Isso tem uma desvantagem até agora - então qualquer resposta alternativa apreciada por favor - a configuração SSL é copiada da máquina de origem para o pacote - o que significa que para que a configuração SSL no site ao vivo esteja correta na implantação, A máquina temporária e os servidores ativos devem usar exatamente os mesmos certificados SSL.

O que seria ótimo se a caixa de teste pudesse usar um certificado autoassinado ou interno para verificação de integridade e, em seguida, ter o certificado SSL real aplicado na implantação real - novamente, parametrizado a partir dos arquivos XML.

    
por 08.02.2010 / 19:07
0

Você pode substituir o número da porta adicionando a opção de linha de comando -replace

msdeploy -verb: sync   -source: WebServer, nome_do_computador = localhost   -dest: package="machinename.zip" -replace: objectName = binding, targetAttributeName = bindingInformation, correspondência =: 443:, replace =: 445:

    
por 05.06.2017 / 23:00