Назад | Перейти на главную страницу

IIS7 - Инструмент веб-развертывания - SetParam / SetParamFile для установки привязок http и https + Cert

в настоящее время мы используем Инструмент веб-развертывания MS для синхронизации действующего веб-сайта и некоторых веб-сервисов из промежуточной коробки с двумя действующими серверами.

В промежуточном блоке сайт размещается на любом IP-адресе на порту 17000, тогда как два действующих сервера сбалансированы по нагрузке и имеют разные IP-адреса для каждого из них.

В настоящее время я создаю два отдельных пакета для развертывания - по одному для каждой машины - с помощью операции синхронизации и указания параметра DestinationBinding следующим образом:

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

(Разделите на несколько строк, чтобы было легче читать!)

Я запускаю это дважды, с другим целевым именем файла и IP-адресом для каждой из двух машин. Когда дело доходит до развертывания, я просто выполняю синхронизацию каждого пакета с соответствующим действующим сайтом.

Я знаю, я знаю - я смогу сделать это, сгенерировав один параметризованный пакет, а затем, возможно, используя переключатель SetParamFile для каждого из двух серверов - поверьте мне, я бы хотел, но документация по этому поводу откровенно не- существует.

Теперь мне нужно настроить и развернуть оба HTTP и HTTPS привязка к этому сайту; включая также сертификат ssl, который будет использоваться.

Я добавил привязку SSL для сайта в промежуточном блоке, который использует сертификат разработки (который необходимо будет заменить - или должен ли промежуточный блок использовать живой сертификат?), И теперь приведенная выше командная строка имеет эффект замены целевого IP в записях http и https.

Похоже, что я не могу указать несколько привязок плюс информацию о сертификате в значении DestinationBinding в -setParam выше, поэтому кто-нибудь знает, как я могу это сделать?

Любая помощь очень ценится.

Хорошо, я зашел так далеко - я не публикую это как редактирование вопроса, потому что, хотя это кажется правильным, может быть способ лучше, чем то, над чем я работал . Я бы позволил демократии решать!

С помощью этот ссылка Мне удалось выяснить формат XML-файла, который следует использовать с setParamFile переключатель для msdeploy. Раньше я также выяснял формат XML declareParamFile с помощью встроенного графического интерфейса в IIS после установки инструмента веб-развертывания.

Итак, для сайта с именем «SiteA» с двумя привязками в файле applicationHost.config, как показано ниже:

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

(Что означает, в частности, любой IP-адрес на порту 80 и любой IP-адрес на порту 443)

Фактически используемый сертификат хранится не в applicationHost.Config, а в конфигурации для Http.sys (согласно Эта статья). Когда msdeploy подготавливает пакет для сайта, он встраивает эту информацию - что, возможно, не является благословением, о чем я упоминал в конце.

Первый шаг - объявить XML-файл параметров, который мы будем использовать для параметризации отдельного пакета для целевых действующих серверов:

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

Обратите внимание на значения атрибута match = в двух записях внутренних параметров. Это гарантирует замену правильной привязки. Это регулярное выражение (как описано в эта статья в технике), который выбирает существующие значения привязки, которые должны быть изменены на значение параметра, которое будет передано через мгновение.

Мы сохраняем это как declareparameters.xml.

Имея это на месте, мы теперь можем сгенерировать параметризованный пакет из нашего промежуточного блока, из которого мы можем затем развернуть его, используя эту командную строку (это для `` образа '' всего IIS, в котором присутствует наш SiteA):

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

Если веб-сайт находится на другом веб-сервере, замените «localhost» на имя этого веб-сервера. Для этого на целевом компьютере должна быть запущена служба агента веб-развертывания.

Теперь мы объявляем XML-файл параметров, который на самом деле предоставлять значения параметров для развертывания на активном сервере:

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

И мы сохраняем это как

[targetServerName]parameters.xml

(в моем случае у меня есть два целевых сервера, поэтому каждый получает свои собственные параметры xml с другим именем файла и немного разными IP-адресами в каждом).

Наконец, мы можем выполнить параметризованное развертывание на целевом сервере (ах) с помощью этой командной строки:

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

Итак, теперь мы можем изменить IP-адреса привязки Http или Https, и, если оригиналы достаточно разные, мы можем параметризовать любое количество отдельных привязок, которые могут потребоваться для этого сайта.

Пока у этого есть один недостаток - поэтому любые альтернативные ответы приветствуются - конфигурация SSL копируется с исходного компьютера в пакет - это означает, что для того, чтобы конфигурация SSL на действующем сайте была правильной при развертывании, как промежуточная машина, так и Живые серверы должны использовать точно такие же сертификаты SSL.

Было бы здорово, если бы промежуточный блок мог использовать самозаверяющий или внутренний сертификат для проверки работоспособности, а затем применить настоящий сертификат SSL к фактическому развертыванию - опять же, параметризованный из файлов XML.

Вы можете заменить номер порта, добавив ключ командной строки -replace

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