Добавьте *новый* DestinationBinding для сайта в пакет с помощью MSDeploy

Я использую промежуточную модель с 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-адрес с балансировкой нагрузки существующего сайта (.com, .us, .ca, .com.au). На данный момент это работает, потому что веб-сервер не заботится о заголовке хоста, но когда новый сайт перейдет на тот же IP, он будет, а другие доменные имена больше не будут работать.

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

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

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

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


person Andras Zoltan    schedule 17.02.2010    source источник
comment
Я думал спросить об этом на ServerFault, но последний вопрос, который я задал, не получил никакой активности и реальных ответов. Я полагал, что до сих пор больше разработчиков использовали msdeploy, и поэтому у меня больше шансов получить здесь какие-то действия!   -  person Andras Zoltan    schedule 17.02.2010


Ответы (1)


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

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

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

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

person Andras Zoltan    schedule 11.03.2010
comment
Я поражен тем, насколько негибок msdeploy — нет поддержки FTP и возможности отменить привязку SSL (что требуется для балансировки нагрузки). - person Chris S; 25.01.2012
comment
Я потратил на это несколько дней и пришел к такому же выводу. Привязки могут быть созданы только с помощью синхронизации пакета appHostConfig (происходит во время сборки), для которой требуется реальный сайт для ссылки. Невозможно предоставить MSDeploy поддельный сайт для ссылки во время сборки или каким-либо образом ввести значения. - person David Peters; 14.06.2012
comment
Здравствуйте товарищи головорезы. Я пришел к такому же выводу. Я унаследовал процесс msdeploy для сайтов, которые никогда не использовали ssl, и теперь мы начинаем его использовать. Я нахожу разрывы msdepoy, тогда исходный сайт использует ssl и думаю, что это из-за того, что сертификат не может быть передан целевому сайту. Теперь я использую app.cmd для удаления привязок перед созданием пакета, а затем добавляю обратно после этого, и у меня есть скрипт, который добавляет привязки на целевой сайт. Это ужасно.... - person JoeT; 12.03.2019