Как развернуть веб-сайт на IIS 6.0 с помощью msdeploy

У меня есть zip-файл на исходном сервере в общем месте, и с помощью msdeploy я хотел бы скопировать его на целевой сервер. Однако, если в первый раз сайт не существует на целевом сервере, он также должен создать веб-сайт. И исходный, и конечный серверы — это IIS 6.0 на Windows Server 2003.

Я пробовал использовать разные комбинации поставщиков, например.

msdeploy.exe -verb:sync -source:package="\\SourceServer\WebSites\Site1.zip" -dest:metakey="Site1"

Я получаю следующее сообщение:

Ошибка: источник (contentPath) и место назначения (metaKey) несовместимы для данной операции.

Я также попытался сначала создать веб-сайт в месте назначения с веб-сайта по умолчанию, а затем скопировать файлы, но тогда я не знаю, как сделать так, чтобы новый веб-сайт Site1 указывал на этот новый каталог:

  1. msdeploy.exe -verb:sync -source:metakey="Default Web Site" -dest:metakey="Site1"
  2. msdeploy.exe -verb:sync -source:package="\\SourceServer\WebSites\Site1.zip" -dest:contentpath="\\DesitnationServer\WebSites\Site1"
  3. Как сделать так, чтобы новый веб-сайт Site1 указывал на новый каталог «\DesitnationServer\WebSites\Site1»?

Даже если я выполню описанные выше шаги, я не хочу выполнять шаги 1 и 2 каждый раз при развертывании Site1.

Я уверен, что должен быть простой способ сделать это? Любая идея?


person nabeelfarid    schedule 22.03.2011    source источник


Ответы (2)


Проблемы!

  • Ваш исходный пакет представляет собой резервную копию только содержимого (а не настроек (я предполагаю, что это «контентный путь»)) — вы не можете смешивать резервную копию от одного поставщика с восстановлением от другого поставщика (за исключением особых случаев).
  • Ваш синтаксис «метакея» не является расположением ключа метабазы, которое я видел раньше — это должен быть идентификатор сайта, основанный на местоположении сайта в метабазе (например, веб-сайт по умолчанию будет «/lm/w3svc/1» )

здесь. Попробуйте!

(Перейдите к самому нижнему разделу для фрагмента, который наиболее похож на то, что вы пытаетесь сделать: «Необязательно — синхронизируйте свой сайт с целью с помощью файла пакета»)

person TristanK    schedule 22.03.2011
comment
Спасибо за ответ, Тристан, я действительно прошел через учебник, который вы упомянули. Единственная разница в том, что источником в моем случае является резервная копия только содержимого. На самом деле это простой zip-файл вывода, созданный после компиляции решения для веб-сайта. Я попытался создать пакет с помощью msdeploy из папки содержимого, используя: msdeploy -verb:sync -source:contentpath=\\server\websitecontentfolder\ -dest:package=c:\Site1.zip, и он создает пакет. Однако, когда я попытался восстановить его, я получаю ту же ошибку совместимости. - person nabeelfarid; 22.03.2011
comment
поэтому, если исходный поставщик (который в моем случае представляет собой простую папку содержимого) не совпадает с папкой назначения (метаключ веб-сайта iis 6.0), то как мне это сделать? - person nabeelfarid; 22.03.2011
comment
Я могу сделать простое копирование, но опять же, весь смысл использования msdeploy заключался в том, чтобы убедиться, что я могу делать что-то чисто как часть моего сценария развертывания, например, если веб-сайт вообще не существует в месте назначения, msdeploy также должен создать его, какой пул приложений использовать, какой физический каталог указать, настроить заголовки хоста и т. д. - person nabeelfarid; 22.03.2011
comment
Таким образом, вы фактически синхронизируете веб-сайт, а не только контент, поэтому я предлагаю выполнить резервное копирование и восстановление из местоположения метаключа. Выполнение операций на уровне сайта, включая настройки, где это необходимо, — это то, для чего предназначен MSDeploy. В случае, когда ничего не изменилось, ничего не меняется. Вы пробовали сделать резервную копию всего сайта? (это будет включать как контент, так и настройки, описывающие сайт, тогда как контент не описывает это) - person TristanK; 22.03.2011
comment
И вы можете восстановить его с помощью target:contentpath=blah; это было бы похоже на выполнение XCOPY. Если xcopy не то, что вам нужно, не используйте поставщика только контента? - person TristanK; 22.03.2011
comment
Нет, я не синхронизирую сайт с одного IIS на другой. Как я уже упоминал, исходный код — это просто папка, содержащая скомпилированный вывод решения веб-сайта Visual Studio. Эта папка не подключена ни к какому веб-сайту iis. - person nabeelfarid; 22.03.2011
comment
Теперь я хотел бы развернуть эту исходную папку на целевом сервере (2003) с IIS6. Я должен иметь возможность указать msdeploy скопировать эту исходную папку на целевой сервер в определенном месте, создать для нее веб-сайт с определенным именем, если он еще не существует, создать заголовок хоста, создать пул приложений и т. д. В следующий раз, когда я разверните ту же исходную папку, она не должна воссоздавать веб-сайт и все такое, а только синхронизировать содержимое (файлы и папки). Имеет ли это смысл сейчас? - person nabeelfarid; 22.03.2011
comment
Да, извините, я немного неправильно понял о решении для веб-сайта. Я думаю, вам нужно будет использовать какой-то шаблон веб-сайта, чтобы сделать это изначально; MSDeploy не поддерживает передачу параметров веб-сайта через командную строку (AFAIK). Таким образом, у вас будет резервная копия сайта только с настройками, которые вы хотите развернуть, а затем резервная копия контента, которую можно будет развернуть на произвольном сайте. резервную копию контента можно восстановить как есть, просто вокруг нее нет никакой информации о сайте. - person TristanK; 23.03.2011

Вы должны использовать поставщика iisApp MSDeploy с назначением. Поставщик iisApp совместим как с IIS 6, так и с 7, тогда как appHostConfig совместим только с IIS 7. Так что попробуйте следующее

msdeploy.exe -verb:sync -source:package="\\SourceServer\WebSites\Site1.zip" -dest:iisApp="Site1"
person DotNetInfo    schedule 20.06.2011