チュートリアル: 既存の PaaS 環境への Sitecore Connect for Content Hub のデプロイ

Current version: 5.0

Sitecore Connect for Content Hub (SCCH) は、既存の Azure PaaS 環境にデプロイできます。

既存の PaaS 環境にデプロイするには、既存の Sitecore XM または Azure PaaS 環境と Microsoft Web Deploy がインストールされている必要があります。

注記

新しい Sitecore Azure PaaS 環境をデプロイする場合は、代わりに「Sitecore Connect for Content Hub の新しい PaaS 環境へのデプロイ」の手順を使用してください。

[en] You can install SCCH using either dat or dacpac files, depending on which Sitecore version you use. The following table shows which Sitecore versions support which installation types methods.

[en] Sitecore version

[en] Dacpac

[en] Dat

[en] Note

[en] 10.0 or below

[en] Yes

[en] No

10.1

[en] Yes

[en] Yes

[en] The dat file must be placed in the App_Data\items folder.

10.2

[en] No

[en] Yes

このチュートリアルでは、次の方法について説明します。

  • インストール フォルダーの準備

  • スクリプト入力の準備

  • コネクタのインストールと設定

  • インストール エラーのトラブルシューティング

インストール フォルダーの準備

インストール フォルダーを準備するには:

  1. ファイル システムにローカル フォルダー (C:\Temp\SCCHInstallation など) を作成します。

  2. Sitecore のダウンロード ページから Sitecore Connect for Content Hub WDP パッケージをダウンロードし、作成したローカル フォルダーに保存します。

  3. ローカル フォルダーで、新しいファイルを作成して Deploy.ps1 と名前を付けます。

  4. メモ帳や VS Code などのエディターで新しいファイルを開き、次のスクリプトをその中に貼り付けます。

    RequestResponse
    
    [CmdletBinding(DefaultParameterSetName = "no-arguments")]
    param(
        [Parameter(HelpMessage = "Name of the resource group in Azure to target.")]
        [string]$ResourceGroupName,
    
        [Parameter(HelpMessage = "Name of the web app in Azure to target.")]
        [string]$WebAppName,
    
        [Parameter(HelpMessage = "Path to the WDP to deploy to the target.")]
        [string]$WdpPackagePath,
    
        [Parameter(HelpMessage = "Content Hub Client Id.")]
        [string]$CHClientId,
    
        [Parameter(HelpMessage = "Content Hub Client Secret.")]
        [string]$CHClientSecret,
    
        [Parameter(HelpMessage = "Content Hub Username.")]
        [string]$CHUserName,
    
        [Parameter(HelpMessage = "Content Hub Password.")]
        [string]$CHPassword,
    
        [Parameter(HelpMessage = "Content Hub URI.")]
        [string]$CHUri,
    
        [Parameter(HelpMessage = "Content Hub Azure Service Bus connection string path in.")]
        [string]$CHServiceBusEntityPathIn,
    
        [Parameter(HelpMessage = "Content Hub Subscription name. (must be unique per Sitecore CM deployment)")]
        [string]$CHServiceBusSubscription,
    
        [Parameter(HelpMessage = "Content Hub Azure Service Bus connection string path out.")]
        [string]$CHServiceBusEntityPathOut,
    
        [Parameter(HelpMessage = "Content Hub Search Page Uri.")]
        [string]$CHSearchPage,
    
        [Parameter(HelpMessage = "Content Hub External Redirect Key.")]
        [string]$CHExternalRedirectKey = "Sitecore",
    
        [Parameter(HelpMessage = "Path to MSDeploy.")]
        [string]$MsDeployPath = "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe",
    
        [Parameter(HelpMessage = "Skips Azure Login when True.")]
        [switch]$SkipAzureLogin = $False,
    
        [Parameter(HelpMessage = "Amount of retry attempts. 6 by default which with default retryinterval would come down to 1 minute.")]
        [int]$RetryAttempts = 6,
    
        [Parameter(HelpMessage = "Amount of time to wait between retries in milliseconds. 10000 by default which is 10 seconds which adds up to 1 minute with default retry attempts.")]
        [int]$RetryInterval = 10000
    )
    
    Add-Type -AssemblyName "System.IO.Compression.FileSystem"
    
    function PreparePath($path) {
        if(-Not (Test-Path $path)) {
            $result = New-Item -Path $path -Type Directory -Force
        } else {
            $result = Resolve-Path $path
        }
    
        return $result
    }
    
    function UnzipFolder($zipfile, $folder, $dst) {
        [IO.Compression.ZipFile]::OpenRead($zipfile).Entries | Where-Object {
            ($_.FullName -like "$folder/*") -and ($_.Length -gt 0)
        } | ForEach-Object {
            $parent = Split-Path ($_.FullName -replace $folder, '')
            $parent = PreparePath (Join-Path $dst $parent)
            $file = Join-Path $parent $_.Name
            [IO.Compression.ZipFileExtensions]::ExtractToFile($_, $file, $true)
        }
    }
    
    function DownloadWebsiteFile($filePath, $downloadFolderName) {
        $basePath = Split-Path ".\$downloadFolderName\$filePath"
        $fileName = Split-Path $filePath -Leaf
        if(-Not (Test-Path ".\$downloadFolderName\$filePath")) {
            New-Item -Path $basePath -Type Directory -Force
        }
        $outFilePath = Join-Path (Resolve-Path "$basePath") $fileName
        Invoke-WebRequest -Uri "https://$WebAppName.scm.azurewebsites.net/api/vfs/site/wwwroot/$filePath" -Headers @{"Authorization"=("Basic {0}" -f $base64AuthInfo)} -Method GET -OutFile $outFilePath
    }
    
    function UploadWebsiteFile($filePath, $uploadFilePath) {
        Invoke-WebRequest -Uri "https://$WebAppName.scm.azurewebsites.net/api/vfs/site/wwwroot/$filePath" -Headers @{"Authorization"=("Basic {0}" -f $base64AuthInfo);"If-Match"="*"} -Method PUT -InFile $uploadFilePath
    }
    
    function ApplyTransform($filePath, $xdtFilePath) {
        Write-Verbose "Applying XDT transformation '$xdtFilePath' on '$filePath'..."
    
        $target = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument;
        $target.PreserveWhitespace = $true
        $target.Load($filePath);
        
        $transformation = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdtFilePath);
        
        if ($transformation.Apply($target) -eq $false)
        {
            throw "XDT transformation failed."
        }
        
        $target.Save($filePath);
    }
    
    if(-Not (Test-Path $MsDeployPath)) {
        Write-Host "MS Deploy was not found at `"$MsDeployPath`"!" -ForegroundColor Red
        return
    }
    
    if(-Not $SkipAzureLogin) {
        Write-Host "Logging into Azure..." -ForegroundColor Green
        & az login
    }
    
    
    Write-Host "Fetching Publish Profile..." -ForegroundColor Green
    $publishProfile = az webapp deployment list-publishing-profiles --resource-group $ResourceGroupName --name $WebAppName --query "[?publishMethod=='MSDeploy']" | ConvertFrom-Json
    $userName = $publishProfile.userName
    $password = $publishProfile.userPWD
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $userName, $password)))
    
    
    Write-Host "Preparing configuration..." -ForegroundColor Green
    $xdtsPath = (PreparePath ".\xdts")
    UnzipFolder $WdpPackagePath "Content/Website/App_Data/Transforms/scch/xdts" $xdtsPath
    Get-ChildItem $xdtsPath -File -Include "*.xdt" -Recurse | ForEach-Object {
        $targetWebsiteFile = $_.FullName.Replace("$xdtsPath\", "").Replace("\", "/").Replace(".xdt", "")
        DownloadWebsiteFile $targetWebsiteFile "Configuration"
    }
    $configurationPath = (PreparePath ".\Configuration")
    $currentDateTime = (Get-Date).ToString("dd-MM-yyyy-hh-mm-ss")
    $backupPath = (PreparePath ".\Backup-$currentDateTime")
    robocopy $configurationPath $backupPath /s
    
    
    Write-Host "Preparing transformations..." -ForegroundColor Green
    $nupkgPath = Join-Path (Resolve-Path ".") "microsoft.web.xdt.3.1.0.nupkg"
    $xdtDllBinPath = PreparePath ".\bin"
    Invoke-WebRequest -Uri "https://www.nuget.org/api/v2/package/Microsoft.Web.Xdt/3.1.0" -OutFile $nupkgPath
    UnzipFolder $nupkgPath "lib/netstandard2.0" $xdtDllBinPath
    Add-Type -Path (Resolve-Path ".\bin\Microsoft.Web.XmlTransform.dll")
    
    
    Write-Host "Fill ConnectionStrings..." -ForegroundColor Green
    $connectionStringsXdtPath = Join-Path $xdtsPath "App_Config\ConnectionStrings.config.xdt"
    ((Get-Content -Path $connectionStringsXdtPath -Raw).Replace("{client_id}", $CHClientId).Replace("{client_secret}", $CHClientSecret).Replace("{username}", $CHUserName).Replace("{password}", $CHPassword).Replace("{uri}", $CHUri).Replace("{Azure Service Bus connection string with incoming topic}", $CHServiceBusEntityPathIn).Replace("{Subscription name}", $CHServiceBusSubscription).Replace("{Azure Service Bus connection string with outcoming topic}", $CHServiceBusEntityPathOut).Replace("{Content Hub search page URI}", $CHSearchPage).Replace("{External redirect key}", $CHExternalRedirectKey)) | Set-Content -Path $connectionStringsXdtPath
    
    
    Write-Host "Running transformations..." -ForegroundColor Green
    Get-ChildItem $xdtsPath -File -Include "*.xdt" -Recurse | ForEach-Object {
        $targetFilePath = $_.FullName.Replace($xdtsPath, $configurationPath).Replace(".xdt", "")
        if (-not(Test-Path $targetFilePath -PathType Leaf)) {
            Write-Verbose "No matching file '$targetFilePath' for transformation '$($_.FullName)'. Skipping..."
        } else {
            ApplyTransform $targetFilePath $_.FullName
        }
    }
    
    
    Write-Host "Starting MSDeploy..." -ForegroundColor Green
    $verb = "-verb:sync"
    $source = "-source:package=`"$WdpPackagePath`""
    $dest = "-dest:auto,ComputerName=`"https://$WebAppName.scm.azurewebsites.net/msdeploy.axd?site=$WebAppName`",UserName=`"$userName`",Password=`"$password`",AuthType=`"Basic`""
    $iisWebAppParam = "-setParam:name=`"IIS Web Application Name`",value=`"$WebAppName`""
    $coreParam = "-setParam:name=`"Core Admin Connection String`",value=`"notUsed`""
    $masterParam = "-setParam:name=`"Master Admin Connection String`",value=`"notUsed`""
    $skipDbFullSql = "-skip:objectName=dbFullSql"
    $skipDbDacFx = "-skip:objectName=dbDacFx"
    $doNotDeleteRule = "-enableRule:DoNotDeleteRule"
    $appOfflineRule = "-enableRule:AppOffline"
    $retryAttemptsParam = "-retryAttempts:$RetryAttempts"
    $retryIntervalParam = "-retryInterval:$RetryInterval"
    $verboseParam = "-verbose"
    Invoke-Expression "& '$MsDeployPath' --% $verb $source $dest $iisWebAppParam $coreParam $masterParam $skipDbFullSql $skipDbDacFx $doNotDeleteRule $appOfflineRule $retryAttemptsParam $retryIntervalParam $verboseParam"
    
    
    Write-Host "Uploading configuration..." -ForegroundColor Green
    Get-ChildItem $configurationPath -File -Recurse | ForEach-Object {
        $targetWebsiteFile = $_.FullName.Replace("$configurationPath\", "").Replace("\", "/")
        UploadWebsiteFile $targetWebsiteFile $_.FullName
    }
    
    
  5. SCCH をSitecore Experience Platform (SXP) 10.0 以前にインストールする場合は、DACPAC をインストールする必要があります。そのためには、スクリプトの$skipDbFullSql$skipDbDacFx パラメーターを削除します。スクリプトの行は次のようになります。

    RequestResponse
    
    Invoke-Expression "& '$MsDeployPath' --% $verb $source $dest $iisWebAppParam $coreParam $masterParam $doNotDeleteRule $appOfflineRule $retryAttemptsParam $retryIntervalParam $verboseParam"
    

    SXP 10.0 以前に SCCH をインストールする場合は、Core および Master 管理パラメーターの接続文字列を更新する必要があります 。

    RequestResponse
    
    $coreParam = "-setParam:name=`"Core Admin Connection String`",value=`"<core connection string>`""
    $masterParam = "-setParam:name=`"Master Admin Connection String`",value=`"<master connection string>`"
    
    注記

    CM インスタンスに移動すると、接続文字列を見つけることができます。次に例を示します。

  6. ファイルを保存して閉じます。

スクリプト入力の準備

スクリプトを正常に実行し、コネクタをインストールして設定するには、次のパラメーターを準備する必要があります。

  • ResourceGroupName - インストール先の Azure のリソース グループ名。

  • WebAppName - インストール先の Azure の Web アプリ名。

  • CHClientIdCHClientSecret - Content Hub OAuth クライアント ID とクライアント シークレット。(作成方法については、「 OAuth クライアントを作成する」を参照してください)。

  • CHUserNameCHPassword - Content Hub にアクセスするための Sitecore の ID として使用される Content Hub のユーザ名とパスワード。

  • CHUri - Content Hub インスタンスへの URI (例: https://mysandbox.stylelabs.io/)。

  • CHServiceBusEntityPathInCHServiceBusEntityPathOut - これらの接続文字列を見つけるには、Content Hubで、M Azure Service Bus タイプの新しいアクションを作成します。Hub inHub out の接続文字列をメモしておきます。次に例を示します。

    Hub in および Hub out の接続文字列を表示する [アクションの編集] ダイアログボックス
  • CHServiceBusSubscription - Sitecore サブスクリプションの名前。

  • CHSearchPage - DAM アセットを選択するために使用する検索ページへの URI (例: https://mysandbox.stylelabs.io/en-us/sitecore-damconnect/approved-assets)。

コネクタのインストールと設定

コネクタのインストールを実行して構成を適用するには:

  1. 管理者権限で PowerShell ウィンドウを開きます。

  2. ローカルフォルダーに移動します。次に例を示します。

    RequestResponse
    
    cd "C:\Temp\SCCHInstallation"
    
  3. 次のコマンドを実行します。

    RequestResponse
    
    az account set –subscription <subscription name or id>
    
  4. 準備したパラメーターを使用して、次のコマンドを実行します。

    RequestResponse
    
    .\Deploy.ps1 -ResourceGroupName "<MyResourceGroup>" -WebAppName "<MyWebApp>" -WdpPackagePath "C:\Temp\SCCHInstallation\Sitecore.Connector.ContentHub.WDP.5.0.0-r00328.4145.scwdp.zip" -CHClientId "<ClientId>" -CHClientSecret "<ClientSecret>" -CHUserName "<UserName>" -CHPassword "<Password>" -CHUri "https://mysandbox.stylelabs.io/" -CHServiceBusEntityPathIn "<Hub out connectionstring>" -CHServiceBusSubscription "<MySitecoreSubscription>" -CHServiceBusEntityPathOut "<Hub in connectionstring>" -CHSearchPage "https://mysandbox.stylelabs.io/en-us/sitecore-dam-connect/approved-assets"
    
    注記

    このコマンドは、CM と CD Azure PaaS Web アプリケーションの両方に対して実行する必要があります。

  5. SCCH で DAM 機能を使用する場合、コネクタが Content Hub からアセットを選択できるようにするには、すべてのホスト名を Content-Security-Policy タグに追加します

インストール エラーのトラブルシューティング

既存の Azure PaaS 環境に SCCH をインストールすると、次のエラーが発生する可能性があります。

Error: ファイルまたはアセンブリ ‘System.Runtime.CompilerService.Unsafe’を読み込めませんでした

このエラーは、Azure redis Cache を設定している場合に発生する可能性があります。System.Runtime.CompilerService.Unsafe バージョン 4.0.4.1 のバージョン競合エラーが発生した場合は、webconfig ファイルに次のノードを追加してください。

RequestResponse

<dependentAssembly>
    <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.0"/>
</dependentAssembly>

Do you have some feedback for us?

If you have suggestions for improving this article,