Thursday, July 16, 2020

Sitecore XP 9.3 (Scaled) environment installation with XC 9.3 (Diff roles).

The third time, I got a requirement to set up the infrastructure for my current project, this time the requirement was to go with in-house VMs.


Here are the installation steps and road blockers.

First of all, just wanted to let you know there is no OOTB script available for the XC scaled environment which can mitigate this requirement.

Now, we have two options.

1. Install complete XC setup on CM, CD1 and CD2 and remove all roles other than shop from the CD1 and CD2.

2. Install all roles on CM and only install required roles on CD1 and CD2.

We had a discussion with the Sitecore team and found there is no OOTB script but after some time we got below link for the reference.

https://github.com/CommerceMinion/Sitecore-Commerce-v9.3-Distributed-Installation

If you see the above link, basically it's installing all the modules and removing a few roles based on the roles explicitly.

After checking the above script, and based on my understanding, I have decided to go with the full installation and remove the roles accordingly.

here is my journey now :)

1. Install CM (XP and XC) -  I pointed DB to a diff server and Solr to a diff server as mention in the above diagram.

Install SSL certificate of your company ( in my case it was wild card certificate) get the thumbprint and all update all scaled environment script.

Add Solr host entity to your CM server so that you can access it.

Here are quick steps -


# Change the TLS version

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12


# Install Nuget provider(if not installed Visual Studio)

Install-PackageProvider -Name NuGet


# Trust the PSGallery (Skip this)

# Set-PSRepository PSGallery -InstallationPolicy Trusted


# Register the SitecoreGallery

Register-PSRepository -Name SitecoreGallery -SourceLocation https://sitecore.myget.org/F/sc-powershell/api/v2


# Install the SIF

Install-Module -Name SitecoreInstallFramework -Repository SitecoreGallery -RequiredVersion 2.2.0


# Run Prerequisites

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\Prerequisites.json"


# Download .net framework 4.7.1 developer pack

# Download .net framework 4.7.2 developer pack

# Restart server


# Run the query on DB server

EXEC sp_configure 'contained', 1;

RECONFIGURE;

# Run the Sitecore installation for CM/CD

# Identity Server

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\IdentityServer.json"


# Only for CM Server

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\sitecore-XP1-cm.json"


# Only for CD Server

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\sitecore-XP1-cd.json"


# Common

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\sitecore-XP1-prc.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\sitecore-XP1-rep.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-collection.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-collectionsearch.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-MarketingAutomationReporting.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-MarketingAutomation.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-ReferenceData.json"

Install-SitecoreConfiguration –Path "D:\Sitecore\SitecoreInstaller\xconnect-xp1-CortexProcessing.json"


========================

POints CORS in identity Server

*XConnectEnvironment in xp1-collection

"DefaultValue": "Development",


XConnectEnvironment in xp1-collectionsearch

"DefaultValue": "Development",


XConnectEnvironment in xp1-marketing

"DefaultValue": "Development",

All the above steps will install the XP on the CM server,  now to install the XC, I have followed below steps.

Download the XC 9.3 script and update all required parameters, Make sure to point to Solr URL and SQL credential appropriately.

As the SQL is on remote (diff) machine we have to explicitly change the SIF script.

  • SIF\Configuration\Commerce\SitecoreBizFx\SitecoreBizFx.Install.json
  • SIF\Configuration\Commerce\CommerceEngine\CommerceEngine.Instance.Deploy.json 

      {

              "Name": "GlobalDatabaseUserName",

              "Value": "[concat(parameter('UserDomain'), concat('\\\\', parameter('UserName')))]"

            },


        {

              "Name": "SharedDatabaseUserName",

              "Value": "[concat(parameter('UserDomain'), concat('\\\\', parameter('UserName')))]"

            },

   "UserName": "[concat(parameter('UserDomain'), concat('\\', parameter('UserName')))]"


Install the self-signed certificate to the trusted root,  otherwise, you will get below errors 



 Install-SitecoreConfiguration : Cannot validate argument on parameter 'Signer'. The argument is null, empty, or an element of the argument collection contains a null  
 value. Supply a collection that does not contain any null values and then try the command again.  
 At D:\InstallationMaster\Sitecore\SitecoreCommerce\SIF\installProd.ps1:295 char:5  
 +   Install-SitecoreConfiguration @deployCommerceParams -Verbose *>&1 ...  
 +   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
   + CategoryInfo     : NotSpecified: (:) [Write-Error], WriteErrorException  
   + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Install-SitecoreConfiguration  
 [TIME] 00:00:47  
 Invoke-NewSignedCertificateTask : Cannot validate argument on parameter 'Signer'. The argument is null, empty, or an element of the argument collection contains a null  
 value. Supply a collection that does not contain any null values and then try the command again.  
 At C:\Program Files\WindowsPowerShell\Modules\SitecoreInstallFramework\2.2.0\Public\Install-SitecoreConfiguration.ps1:641 char:47  
 +             & $entry.Task.Command @paramSet | Out-Default  
 +                        ~~~~~~~~~  
   + CategoryInfo     : InvalidData: (:) [Invoke-NewSignedCertificateTask], ParentContainsErrorRecordException  
   + FullyQualifiedErrorId : ParameterArgumentValidationError,Invoke-NewSignedCertificateTask  
 PS D:\InstallationMaster\Sitecore\SitecoreCommerce\SIF>  

Setup the SMO - otherwise you will get this error -


Sometime, You may need to update the SIF scrip to replace https instead of HTTP explicitly.

And the final steps to remove the unnecessary role and add the correct URL, I go the reference from above scripts, Here are the details for each role.

  { "id", "xc_ma" } {  
     Remove-Item "C:\inetpub\wwwroot\XP1.sc\XConnectFiles" -Recurse -Force -ErrorAction SilentlyContinue  
   }  
   "cd" {  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.XConnect" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\Program Files\Redis" -Recurse -Force -ErrorAction SilentlyContinue  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cd\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<shopsServiceUrl>https://localhost:5000/api/</shopsServiceUrl>" -replace "<shopsServiceUrl>https://commerceshops.sc9.com/api/</shopsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cd\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<commerceOpsServiceUrl>https://localhost:5000/commerceops/</commerceOpsServiceUrl>" -replace "<commerceOpsServiceUrl>https://commerceops.sc9.com/commerceops/</commerceOpsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cd\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<commerceMinionsServiceUrl>https://localhost:5000/commerceops/</commerceMinionsServiceUrl>" -replace "<commerceMinionsServiceUrl>https://commerceminions.sc9.com/commerceops/</commerceMinionsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cd\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<sitecoreIdentityServerUrl>https://sxastorefront-identityserver/</sitecoreIdentityServerUrl>" -replace "<sitecoreIdentityServerUrl>https://xp1.identityserver/</sitecoreIdentityServerUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cd\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<enforceSsl>true</enforceSsl>" -replace "<enforceSsl>false</enforceSsl>"  
   }  
   "cm1" {  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.XConnect" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\Program Files\Redis" -Recurse -Force -ErrorAction SilentlyContinue  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<configuration>localhost,defaultDatabase=1,allowAdmin=true,syncTimeout=3600000</configuration>" -replace "<configuration>localhost,defaultDatabase=1,allowAdmin=true,abortConnect=false,syncTimeout=3600000</configuration>"  
   }  
   "cm2" {  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.XConnect" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\Program Files\Redis" -Recurse -Force -ErrorAction SilentlyContinue  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<shopsServiceUrl>https://localhost:5000/api/</shopsServiceUrl>" -replace "<shopsServiceUrl>https://commerceshops.sc9.com/api/</shopsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<commerceOpsServiceUrl>https://localhost:5000/commerceops/</commerceOpsServiceUrl>" -replace "<commerceOpsServiceUrl>https://commerceops.sc9.com/commerceops/</commerceOpsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<commerceMinionsServiceUrl>https://localhost:5000/commerceops/</commerceMinionsServiceUrl>" -replace "<commerceMinionsServiceUrl>https://commerceminions.sc9.com/commerceops/</commerceMinionsServiceUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<sitecoreIdentityServerUrl>https://sxastorefront-identityserver/</sitecoreIdentityServerUrl>" -replace "<sitecoreIdentityServerUrl>https://xp1.identityserver/</sitecoreIdentityServerUrl>"  
     WorkAround-Replace-In-File -filePath "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.cm\App_Config\Include\Y.Commerce.Engine\Sitecore.Commerce.Engine.Connect.config" -find "<enforceSsl>true</enforceSsl>" -replace "<enforceSsl>false</enforceSsl>"  
   }  
   "prc" {  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.XConnect" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\Program Files\Redis" -Recurse -Force -ErrorAction SilentlyContinue  
   }  
   { "ce_post", "bizfx", "sf" } {  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.sc" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\inetpub\wwwroot\XP1.xconnect" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\solr-8.1.1" -Recurse -Force -ErrorAction SilentlyContinue  
     Remove-Item "$($Env:SYSTEMDRIVE)\Program Files\Redis" -Recurse -Force -ErrorAction SilentlyContinue  
   }  
After that, I changed the Redis under the LB for the HA.

Let me know if you have any questions. 

Happy Sitecore XP + XC installation on the production.