msdeploy (Web Deploy) błąd z 401 AUTH problemy
Próbuję zainstalować msdeploy
i skonfigurować. Zainstalowałem zdalną usługę na serwerze WWW, ale wszystkie moje testy dają mi 401 unauthorised error
. Serwerem jest Windows 2008 R2.
Testuję bardzo proste polecenie msdeploy:
msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword
I błąd:
Error: Object of type 'contentPath' and path 'c:\inetpub\wwwroot\MonApp' cannot be created.
Error: Remote agent (URL http://<IP HERE>/MSDEPLOYAGENTSERVICE) could not be contacted. Make sure the remote agent service is installed and started on the target computer.
Error: An unsupported response was received. The response header 'MSDeploy.Response' was '' but 'v1' was expected.
Error: The remote server returned an error: (401) Unauthorized.
Error count: 1.
Stworzyłem użytkownika o nazwie msdeploy i dodałem go do Lokalnej Grupy adminów na serwerze.
Sprawdziłem:
- że serwis zainstalowany poprawnie i uruchomiłem go
- różne nazwa użytkownika nie jest używana, a authType=Basic
- pełne uprawnienia do tego folderu dla wszystkich
- in IIS allow remote connections
- Dodano zasady delegowania usług zarządzania dla mojego użytkownika "msdeploy" dla contentPath i iisApp (luźno oparte na odczycie this)
- próbowałem z innym kontem administratora, którego używam do RDC na serwerze...
- próbowałem z różnymi treściami i różnymi msdeploy komendy
- utworzył określone konto i dodał je do IIS_Users. Dodano tego użytkownika na mojej stronie internetowej "uprawnienia menedżera usług IIS" i skonfigurować "delegowanie usług zarządzania" dla wszystkich dostawców.
5 answers
Zakładam, że skonfigurowałeś swój serwer poprawnie dla WebDeploy 2.0 zgodnie z tym artykułem:
Uwaga: MS wydało odświeżenie Web Deploy 2.0 i oryginalny link nie jest już tak naprawdę poprawny. Zaktualizowałem to, ale myślę, że z czasem będzie to ruchomy cel.
Musisz również zainstalować Web Deploy 2.0 na swojej maszynie development/build/CI.
If you ' re still korzystanie z 1.0 to polecam Upgrade, jest kilka ogromnych ulepszeń w 2.0.
Korzystanie z funkcji publikowania w Visual Studio 2010:
Visual Studio może opublikować witrynę, klikając ją prawym przyciskiem myszy i wybierając opcję "Publikuj". To wywołuje następujący dialog:
Jest kilka momentów z Visual Studio 2010 i WebDeploy 2.0. Po pierwsze, VS2010 nie jest świadomy WebDeploy/MSDeploy 2.0. Więc jeśli spróbujesz opublikować, otrzymasz błąd taki jak:
Error 1 Web deployment task nie udało się.((04/02/2011 12: 30: 40) wystąpił, gdy wniosek został przetwarzane na zdalnym komputerze.)
Zobaczysz również następujący błąd w nieudanym śledzeniu żądań dla usługi zarządzania siecią na serwerze w C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
zakładając, że masz to włączone:
AspNetModuleDiagErrorEvent
Uri / msdeploy.axd
śledzenie eventData wdrożenie Agent exception. Identyfikator żądania ''. Znacznik Czasu Żądania: '02/04/2011
System.Nieautoryzowanyaccessexception: dostęp do ścieżki 'd:\' jest zabroniony.
Litera dysku będzie się różnić w zależności od tego, na którym dysku znajduje się Twoja witryna IIS.
Po wyjęciu z pudełka mechanizm publikowania w GUI domyślnie używa niewłaściwej wersji MSDeploy (1.0). Chcemy powiedzieć VS2010, aby korzystał z MSDeploy 2.0. Można to zrobić edytując plik devenv.exe.config
Visual Studio 2010, który znajduje się w (zakładając, że wykonałeś domyślną instalację dysku c:\
):
Dla Systemów 64-bitowych: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
Dla systemów 32-bitowych: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
Otwórz devenv.exe.config
w swoim ulubionym edytorze XML (właśnie użyłem samego Visual Studio 2010) i skopiuj następujący xml:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
Dodaj to do sekcji /configuration/runtime/assemblyBinding
:
Gdy już to zrobisz, Zamknij wszystkie instancje Visual Studio 2010, aby umożliwić wprowadzenie tej zmiany. Uruchom ponownie VS2010, Otwórz projekt internetowy, a następnie spróbuj opublikować jeszcze raz. Tym razem powinno się udać.
Publikowanie za pomocą pakietu kompilacji:
Visual Studio może stworzyć pakiet kompilacyjny, który można wykonać z wiersza poleceń. Jest to generowane za pomocą Project -> Build Deployment Package
. Przydatne do ciągłej integracji i tym podobnych (pakiet można również wygenerować za pomocą msbuild za pomocą przełącznika /t:Package
).
Folder wyjściowy pakietu zwykle domyślnie wynosi obj\Package
.
Niestety Visual Studio 2010 trochę się myli i generuje skrypt wsadowy MSDeploy wrapper targeting 1.0 i targeting deploy na serwerze, a nie na poziomie witryny.
Nie ma szybkiego rozwiązania dla tego innego niż stworzenie własnego msdeploy.wiersz poleceń exe. Podzieliłem to na kilka linii, aby było bardziej czytelne.:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" -source:archiveDir='d:\sites\DemoApp\obj\Package\Archive' -dest: auto, computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', userName='demosite', password='somepassword', authtype='basic', includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml" -allowuntrusted
Pierwszą rzeczą, którą należy zwrócić uwagę, jest ścieżka do msdeploy.exe
. Visual Studio generuje ścieżkę do wersji 1.0. Zmieniłem to na 2.0.
godne uwagi parametry:
-source:archiveDir=
informuje msdeploy, że wdrażamy pakiet i podaje lokalną lokalizację
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- to mówi MSDEPLOY wdrożyć do określonej witryny na IIS7. yoursitename
powinien dokładnie pasować do nazwy witryny w IIS.
userName
i password
are to nazwa użytkownika delegowanego menedżera dla witryny. Jest to skonfigurowane przy użyciu funkcji" Uprawnienia Menedżera usług IIS " na poziomie witryny. Konto musi być lokalnym kontem użytkownika systemu Windows.
-authtype='basic'
- wymusza to uwierzytelnianie podstawowe w przeciwnym razie próba uwierzytelniania NTLM.
-allowuntrusted
- ignoruje to wszelkie błędy certyfikatu SSL, Jeśli używasz wbudowanego certyfikatu SSL z własnym podpisem.
Jeśli używasz tej linii poleceń, powinieneś być w stanie wdrożyć zdalny serwer IIS7 z powodzeniem.
Publikowanie Surowej Treści:
Czasami chcemy po prostu opublikować statyczną zawartość (a może nawet klasyczną stronę ASP lub PHP) bezpośrednio z folderu lokalnego. Możemy zrobić to za pomocą następującego wiersza poleceń msdeploy.exe
:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe" -source:contentPath='d:\websites\mysite' -dest: contentPath='yoursitename', computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename', userName='demosite', password='somepassword', authtype='basic', includeAcls='False' -verb:sync -allowuntrusted
Ponownie obowiązują te same zasady co poprzednio dla -dest:contentPath
i computerName
.
Wierzę, że problemy z wersją MSDeploy zostaną rozwiązane w SP1(na które jeszcze nie miałem okazji się przyjrzeć).
One Final VS2010 Gotcha:
Podczas publikowania za pomocą Visual Studio 2010, pakiet kompilacji "Publikuj" powoduje, że ACL konta anonimowego witryny zmienia się na Tylko do odczytu dla wszystkich plików i folderów z wyjątkiem folderu App_Data
, który został zmieniony na odczyt i zapis.
Można to obejść, dodając następujące ustawienie do pliku .csproj
pod każdym <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
Lub jeśli używasz msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
Znalazłem ten przydatny samorodek stąd:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 13:05:28
Dla mnie publikowanie działało w Visual Studio, ale nie działało, gdy uruchomiłem skrypt .deploy.cmd
.
Ustawiając <UseMsdeployExe>true</UseMsdeployExe>
w swoim .csproj
, możesz wymusić użycie msdeploy.exe zamiast zadania MSBuild. Następnie poprzez podkręcenie poziomu logowania (Narzędzia > Opcje > projekty i rozwiązania > Build and Run > MSBuild project build output verbosity) możesz zobaczyć wiersz poleceń, którego używa VS.
Problemy z moim .deploy.cmd
były:
- mój użytkownik IIS miał tylko uprawnienia na tej stronie więc potrzebowałem {[4] } w
computerName
. - potrzebowałem
AuthType='Basic'
w parametrze-dest:
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-22 10:47:18
Mieliśmy podobny problem jak Twój.
W tym celu należy uruchomić usługę agenta zdalnego w usłudze. Użyliśmy nazwy komputera, ponieważ adres IP dawał błąd. Spróbuj więc użyć nazwy komputera, nazwy użytkownika i hasła.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 06:53:55
W końcu nigdy nie sprawdzałem, jakich uprawnień mi brakowało w Moim Koncie Użytkownika deploy - ale okazało się, że jeśli użyję konta administratora maszyny, wdrożenie się powiedzie. Na razie używam konta administratora do wdrożenia.
Wyrazy uznania dla Kev za fantastyczne i pouczające podsumowanie konfiguracji ms deploy 2:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-02 07:31:58
Jeśli to coś znaczy. Publikowanie działało dla mnie i pewnego dnia miałem ten sam problem (błąd nieautoryzowanego 401) ponowne uruchomienie VS2012 rozwiązało problem. Żałuję, że nie próbowałem tego przed wypróbowaniem każdego innego rozwiązania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-17 19:05:35