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

8

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

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

Андрас Золтан
источник
1
Может быть, вы должны добавить msdeply в качестве тега. может также перепрыгнуть на stackoverflow.com, так как есть ряд msdeploy
MikeJ
теперь есть хороший момент :)
Андрас Золтан
Да - сначала я подумал о StackOverflow; полагал, что низкоуровневые операции с msdeploy более полезны для технической поддержки / администраторов, чем для разработчиков. Если я нигде не пойду сюда, то, возможно, я удалю этот вопрос и отправлю туда, как вы предлагаете. Всегда могу утверждать, что я разработчик, а не аналитик, и если мне нужно это знать, то другие разработчики, вероятно, тоже!
Андрас Золтан

Ответы:

7

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

Используя эту ссылку, я смог выяснить формат файла 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.

Андрас Золтан
источник
Это может показаться ограничением инструмента msdeploy - и единственное решение - написать дополнительный сценарий iis, который может выполнить msdeploy. Этот сценарий обернул бы дополнительные привязки материалом SSL-сертификата. Это невероятный позор.
Андрас Золтан
0

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

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

Мариуш
источник