一般的な MSDeploy の問題のトラブルシューティング
[Kateryna’s Blog Troubleshooting Common MSDeploy Issues ]の翻訳です。
この記事では、潜在的な問題や質問の解決に役立つクイック リファレンス トラブルシューティング ガイドを提供します。すべての問題が掲載されているわけではありませんが、必要に応じて更新され、最新の問題や回避策が示される予定です。
この記事で説明されている問題:
- 接続の問題とリモート処理
- ログ記録
- スキップ/置換規則
- リンク拡張機能の有効化/無効化
- 権限の不足 (401)
- IIS6 の操作
- 前述の回避策が機能しない場合
接続の問題とリモート処理
MSDeploy エージェント
MSDeploy エージェントを介して同期処理を行う場合、対応する MSDeploy サービスがリモート コンピューター上で開始されていることを確認します。
net start msdepsvc
ハンドラー
(Web 管理サービス)
エージェントの場合と同様に、ハンドラーを介して同期処理を行う場合、対応するサービスが開始されていることを確認します。
net start wmsvc
既定の TCP ポート
MSDeploy は、既定では、ポート 8172 で動作します。ファイアウォールでポート 8172 を有効にするには、次のコマンドを実行します。
netsh firewall add portopening TCP 8172 WdeployAgent
ログ記録
致命的なエラーは %TEMP%\Web_Deployment_Agent_Service.log に記録されます。%TEMP% は、既定では Windows\ServiceProfiles\NetworkService\AppData\Local\Temp\MSDepSvc で、サービス ID の一時フォルダーです。
スキップ/置換規則
展開先の設定が展開元の設定と異なる場合 (ファイル パスのシステム ドライブが異なるなど)、スキップ/置換規則を作成して設定を変更できます。コンテンツが c:\wwwroot\inetpub にある IIS6 サイトを、d:\wwwroot\inetpub にマップされている別のサイトに同期する場合、次のような置換規則を作成して、一行で同期を実現できます。
msdeploy.exe -verb:sync -source:metaKey=/lm/w3svc/2 -dest:metaKey=/lm/w3svc/3 -replace:objectName=metaProperty,scopeAttributeName=name,scopeAttributeValue=path,targetAttributeName=value,match="e:",replace="d:"
置換のスキップ規則の作成に関するリソースについては、「MSDeploy 用のスキップ規則と置換規則を作成する方法 (英語)」を参照してください。
リンク拡張機能の有効化/無効化
Web サーバー/サイトのコンテンツをMSDeploy の同期操作ではなく、個別にコピーしたい場合は、コマンド ライン オプション -disableLink:ContentExtension を使用してください。
例 (コンテンツを含めずにサーバーを別のサーバーに同期する) :
msdeploy -verb:sync -source:webserver -dest:webserver,computerName=URLtoRemoteAgent
サイトを同期するときに、そのアプリケーション プールがプルされない場合 (既定の動作)、 –enableLink:AppPoolExtension スイッチを使用することによってアプリケーション プールのプルを有効にすることができます。
例 (アプリケーション プールを含むサイトのバックアップを作成する):
msdeploy -verb:sync -source:appHostConfig="MySite" -dest:package="c:\BackupUpOfSiteWithAppPool.zip" -enableLink:AppPoolExtension
権限の不足 (401)
チェックする項目 :
ACL
IIS ユーザーとして同期している場合、アクセスしようとしているコンテンツ パスについて、ACL で NT Service\WMSvc ID に読み取り/書き込みアクセスが許可されている必要があります。
AppPoolIndentity
アプリケーション プールの ID に問題があると考えられる場合は、管理者特権でアプリケーション プールを実行し、問題が発生するかどうかを確認し、必要に応じてアクセス許可の問題を修正して、アプリケーション プールを元の ID に設定します。
委任規則
管理者以外のアカウントで同期処理を実行している場合、リモート サーバー上で委任規則が正しく設定されていることを確認します。たとえば、すべてのユーザーに iisApp パッケージのインポートを許可し、ユーザー接続スコープ内で ACL を設定するには、以下の規則を administration.config ファイルの "system.webServer/management" セクションに追加します。
<!-- 委任規則のバイパスを管理者に許可しない場合は、allowAdministrators を "false" に設定する -->
<delegation allowAdministrators="false">
<!--
現在のユーザーとして操作の実行を試行する。
これらの操作を特定のユーザーとして実行する場合は、以下の "runAs" のコメントを解除する
-->
<rule providers="iisapp,createapp,contentpath,setAcl" actions="*" path="{userScope}">
<permissions>
<user name="*" isRole="false" accessType="Allow" />
</permissions>
<!-- <runAs identityType="SpecificUser" userName="iisAppUser" password="iis6!dfu" /> -->
</rule>
</delegation>
C# での委任規則の作成を自動化する方法については、IIS.NET の記事「Web Deployment Handler の構成 (英語)」を参照してください。
サーバー証明書
クライアントでどのようにサーバー証明書が検証されていますか。
- コマンド ラインを実行してサーバーを信頼している場合は、-allowUntrusted スイッチを指定して、信頼されていない証明書を受理します。
- MSDeploy API のインターフェイスとなる独自のクライアントを作成し、リモート コンピューターと同期する場合は、証明書の検証を委任し、サーバー証明書を検証します。
証明書検証の委任の詳細については、MSDN の記事「知っていますか: 自己発行証明書を使用した、IIS サーバーへのリモート接続の確立には、証明書の検証を委任する必要があることを (英語)」も参照してください。
IIS6 の操作
MSDeploy を使用して IIS を操作したり、IIS6 から IIS7 にサイトを移行したりすることができます。サイトを IIS6 から IIS7 に移行する方法については、「IIS 6.0 から IIS 7.0 への移行 (英語)」の記事を参照してください。以下に、一般的な問題を回避するためのいくつかの重要なヒントやテクニックを示します。
Webserver プロバイダー
IIS6 サーバー全体を同期するには、IIS7 サーバー用に予約されている webserver ではなく、webserver60 プロバイダーを使用してください。
特定のメタベース パス
特定のメタベース パス (サイトまたはアプリケーション) を同期するには、metakey プロバイダーを使用してください。
サイト識別子
メタベース パスの siteId を指定するには、サイト/アプリケーションの ID を識別してください。メタベース パスの一覧を出力するには、次のコマンドを実行します。
adsutil enum /p w3svc
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation.All rights reserved.[/w3svc/Info]
[/w3svc/Filters]
前述の回避策が機能しない場合
-debug スイッチを指定してコマンドを実行し、MSDeploy フォーラム (英語) に質問とスタック トレースを投稿してください。
解決策が見つかることを祈っています。