msdeploy
をインストールしてセットアップしようとしています。 Webサーバーにリモートサービスをインストールしましたが、すべてのテストで401 unauthorised error
。サーバーはWindows 2008 R2です。
私は非常に単純なmsdeployコマンドをテストしています:
msdeploy -verb:dump -source:contentPath=c:\inetpub\wwwroot\MyApp,computerName=<IP HERE>,userName=Domain\msdeploy,password=MyPassword
そしてエラー:
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.
Msdeployというユーザーを作成し、それをサーバーのローカル管理者グループに追加しました。
私はチェックしました:
この記事に従って、WebDeploy 2.0用にサーバーを正しく構成したと想定しています。
注:MSは、Web Deploy 2.0および元のリンクはもう有効ではありません。私はこれを更新しましたが、時間の経過とともに動くターゲットになると思います。
また、開発/ビルド/ CIマシンにWeb配置2.0をインストールする必要があります。
まだ1.0を使用している場合は、アップグレードをお勧めします。2.0にはいくつかの大きな改善点があります。
Visual Studio 2010のパブリッシュ機能の使用:
Visual Studioは、サイトを右クリックして[公開]を選択することでサイトを公開できます。これにより、次のダイアログが表示されます。
Visual Studio 2010とWebDeploy 2.0にはいくつかの落とし穴があります。 1つ目は、VS2010がWebDeploy/MSDeploy 2.0に対応していないことです。したがって、公開しようとすると、次のようなエラーが発生します。
エラー1 Web展開タスクが失敗しました。((04/02/2011 12:30:40)要求がリモートコンピューターで処理されたときにエラーが発生しました。)
サーバーのWeb管理サービスの失敗した要求トレースで_C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
_がオンになっていると想定すると、次のエラーも表示されます。
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracingデプロイメントエージェントの例外。リクエストID ''。タイムスタンプのリクエスト:'02/04/2011
System.UnauthorizedAccessException:パス 'D:\'へのアクセスが拒否されました。
ドライブ文字は、IISサイトが配置されているドライブによって異なります。
初期状態では、GUI内公開メカニズムはデフォルトで間違ったバージョンのMSDeploy(1.0)を使用します。 VS2010にMSDeploy 2.0を使用するように伝えます。これは、次の場所にあるVisual Studio 2010の_devenv.exe.config
_ファイルを編集することで実行できます(デフォルトの_c:\
_ドライブのインストールを実行した場合):
64ビットシステムの場合:c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
32ビットシステムの場合:_c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
_
お好きなXMLエディターで_devenv.exe.config
_を開き(Visual Studio 2010自体を使用したばかりです)、次のxmlをコピーします。
_<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
_
これを_/configuration/runtime/assemblyBinding
_セクションに追加します。
これが完了したら、Visual Studio 2010のすべてのインスタンスを閉じて、この変更を有効にします。 VS2010を再起動し、Webプロジェクトを開いてから、もう一度公開してみてください。今回は成功するはずです。
ビルドパッケージを使用した公開:
Visual Studioは、コマンドラインから実行できるビルドパッケージを生成できます。これは_Project -> Build Deployment Package
_を使用して生成されます。継続的な統合などに便利です(パッケージは、_/t:Package
_スイッチを指定したmsbuildを使用して生成することもできます)。
通常、パッケージの出力フォルダーのデフォルトは_obj\Package
_です。
残念ながら、Visual Studio 2010はこれを少し間違っており、1.0をターゲットとし、サーバーレベルではなくサーバーでデプロイメントをターゲットするmsdeployラッパーバッチスクリプトを生成します。
独自のmsdeploy.exeコマンドラインを作成する以外に、これをすばやく修正する方法はありません。これを少し読みやすくするために、これを数行に分割しました。
"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
最初に注意する点は、_msdeploy.exe
_へのパスです。 Visual Studioはバージョン1.0へのパスを生成します。これを2.0を使用するように変更しました。
注目すべきパラメータ:
_-source:archiveDir=
_はmsdeployにパッケージをデプロイしていることを通知し、ローカルの場所を提供します
_computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
_-これは、MSDEPLOYにIIS7の特定のサイトにデプロイするように指示します。 yoursitename
は、IISのサイトの名前と正確に一致する必要があります。
userName
とpassword
は、サイトの委任されたマネージャーユーザーの名前です。これは、サイトレベルで「IISマネージャーのアクセス許可」機能を使用して構成されます。アカウントはローカルのWindowsユーザーアカウントである必要があります。
_-authtype='basic'
_-基本認証を強制します。それ以外の場合は、NTLM認証が試行されます。
_-allowuntrusted
_-組み込みの自己署名SSL証明書を使用する場合、SSL証明書エラーは無視されます。
そのコマンドラインを使用すると、リモートIIS7サーバーに正常に展開できるはずです。
未加工コンテンツの公開:
場合によっては、静的コンテンツ(またはクラシックASPまたはPHP site))をローカルフォルダーから直接公開することもできます。これは、次の_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
ここでも、_-dest:contentPath
_とcomputerName
には以前と同じルールが適用されます。
MSDeployバージョンの問題はSP1で解決されると思います(まだ確認する機会がありませんでした)。
最終的なVS2010の1つの結論:
Visual Studio 2010を使用して公開する場合、「公開」ビルドパッケージにより、サイトの匿名アカウントのACLが、読み取りと書き込みに変更された_App_Data
_フォルダーを除くすべてのファイルとフォルダーに対して読み取り専用に変更されます。
これは、各<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
の下の_.csproj
_ファイルに次の設定を追加することで回避できます。
_<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
_
または、msbuildを使用している場合:
_msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
_
私はここからその便利なナゲットを見つけました:
Visual Studio 2010展開パッケージでACLの設定をスキップ (元のコンテンツが利用できなくなったため、WayBackMachineリンク)
私にとって、パブリッシングはVisual Studioで機能しましたが、.deploy.cmd
スクリプトを実行したときに機能しませんでした。
<UseMsdeployExe>true</UseMsdeployExe>
を.csproj
に設定すると、VSにMSBuildタスクの代わりにmsdeploy.exeを使用するように強制できます。次に、ログレベルを上げると([ツール]> [オプション]> [プロジェクトとソリューション]> [ビルドと実行]> [MSBuildプロジェクトビルド出力の詳細度])、VSが使用するコマンドラインを確認できます。
私の.deploy.cmd
に関する問題は次のとおりです。
computerName
に?site=<SITENAME>
が必要でした。AuthType='Basic'
パラメータに-dest:
が必要でした。私たちはあなたと同じような問題に直面していました。
このためには、サービスでリモートエージェントサービスを開始する必要があります。 IPアドレスでエラーが発生したため、PC名を使用しました。したがって、PC名、ユーザー名、パスワードを使用してみてください。
結局私は自分のデプロイユーザーアカウントでどの権限が欠けているかを確認したことはありませんでしたが、マシン管理者アカウントを使用した場合、デプロイは成功することがわかりました。ここでは、adminアカウントを使用して展開を行っています。
Ms deploy 2のセットアップに関する素晴らしい情報をまとめたKevへの称賛:)
それが価値があるもののために。公開は私のために働いていて、それからある日私はこれと全く同じ問題(401承認されていないエラー)を経験しました。VS2012を再起動すると問題が解決しました。他のすべての解決策を試す前に、それを試してみたかったです。