в настоящее время мы используем Инструмент веб-развертывания 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: