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

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

Промежуточный блок размещает сайт на любом 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 выше, так что кто-нибудь знает, как мне поступить?

Любая помощь с благодарностью.

2 ответа

Решение

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

Используя эту ссылку, я смог выяснить формат файла XML, который должен использоваться с setParamFile Переключатель для msdeploy. В прошлом я также выяснял формат для XML-файла DeclareParamFile, используя встроенный графический интерфейс в IIS после установки Web Deployment Tool.

Итак, для сайта под названием "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 =' в двух внутренних записях параметров. Это гарантирует, что правильная привязка будет заменена. Это Regex (как описано в этой статье Technet), который выбирает существующие значения привязки, которые должны быть изменены, со значением параметра, которое будет передано в данный момент.

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

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

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

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

Теперь мы объявляем 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:

Другие вопросы по тегам