Добавьте * новый * DestinationBinding для сайта в пакет, используя MSDeploy - PullRequest
7 голосов
/ 17 февраля 2010

Я использую промежуточную модель с MSDeploy для развертывания нескольких наших сайтов в веб-ферме. Сайты настраиваются в IIS только на промежуточных блоках, а затем MSDeploy используется для создания целевых веб-серверов с нуля.

В промежуточном окне используются собственные привязки (т. Е. Нет записей заголовков, разных IP-адресов / портов и заголовков хостов) для сайтов, которые будут работать. При их развертывании у меня сначала есть xml-файл, используемый для подготовки параметризованного пакета (с использованием переключателя -declareParamFile), который объявляет параметры следующим образом:

<parameters>
  <parameter name="site1">
    <parameterEntry kind="DestinationBinding" scope="Site1" match=":17000:" />
  </parameter>
</parameters>

Таким образом, в приведенном выше XML-коде вы можете видеть, что промежуточный сайт размещен на порту 17000, поскольку атрибут match установлен так, чтобы соответствовать привязке с таким значением.

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

<parameters>
  <setParameter name="site1" value="[ip_addr]:[port]:[host_header]"/>
</parameters>

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

Теперь я хочу развернуть сайт и добавить к нему новые привязки назначения, которые включают в себя различные имеющиеся у нас TLD - то есть site.com, site.co. .uk, site.ca и т. д., все привязаны к одному IP-адресу и порту.

Причины для этого:

  • У нас есть новый сайт, который мы хотим развернуть, для которого потребуется другое имя хоста, но мы не хотим присваивать ему собственный IP-адрес (здесь не хватает IP-адресов!), Но чтобы он разделял IP-адрес с существующим сайт на серверах уже есть.
  • Это означает добавление определенных привязок имени хоста к сайту, который уже там, вместо того, чтобы отвечать на любое имя хоста.
  • У нас есть четыре доменных имени, которые в настоящее время указывают на IP-адрес существующего сайта с балансировкой нагрузки (.com, .us, .ca, .com.au). На данный момент это работает, потому что веб-сервер не заботится о заголовке узла - но когда новый сайт переходит на тот же IP, он будет работать, и другие доменные имена больше не будут работать.

Проблема в том, что я не думаю, что есть какой-либо способ добавить такую ​​информацию. Я попытался добавить несколько элементов setParameter во второй XML, но это просто приводит к многократной перезаписи привязки, при этом последний становится победителем.

Одним из решений для меня является добавление привязок «заполнителей» для каждого из сайтов в промежуточном окне, которые представляют целевые внешние привязки для каждого доменного имени, порта и т. Д .; а затем я изменяю два файла параметров, чтобы заменить эти привязки реальными.

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

Можно ли на самом деле добавить привязки сайта с помощью MSDeploy (если да, как?), Или он поддерживает только замену?

1 Ответ

4 голосов
/ 11 марта 2010

После долгих ударов головой кажется, что нет способа добавить новые привязки, используя операцию DestinationBinding с msdeploy.

Что было бы возможно, это прикрепить скрипт, который будет выполняться после развертывания, который добавляетпривязки каждый раз используют appcmd.

Итак, первоначальная синхронизация через msdeploy удалит эти привязки (потому что они не находятся на промежуточном сервере), но сценарий appcmd добавит их снова.

Хотя на самом деле это не идеальное решение, поскольку это еще один сценарий, который должен постоянно обновляться.

...