Optimizely DXP checklist for developers

This blog post is about going from OnPrem hosting to Optimizely DXP hosting, what steps to consider and in what order you as a developer needs to take action.

Published 31st March 2022
CMS 11 and 12, Commerce 13 and 14. netFramework 4 and .net core 5 and 6

There is a lot of documentation out there how to do actions, but if you do the process for the first time it is not obvious what needs to be done, and in which order.

Action Checklist

  • Watch DXP Cloud Hosting Technical Review on academy.optimizely.com (FREE)
    • Watch the Cloud (DXP) Common Troubleshooting Tools for Optimizely (FREE)
  • Prepare your solution for the cloud (LINK)
    • Migration of search platform to Search & Navigation
  • On boarding meeting with your success enabler at Optimizely
  • Register your user to get access to DXP PAAS portal, Azure Portal (LINK)
    • You get an email with access to Integration initially (since prep and prod is not provisioned yet)
  • Ask support for a blob container (to upload the blobs) and a bacpac (database) container
  • Upload the blobs from production server (LINK)
    • Let support know you are done
  • Upload .bacpac file to azure blob container
    • Let support know you are done
  • Add release pipeline to devops (LINK)
    • Add config transforms (LINK)
    • Release your code to Integration
  • Change email config (LINK)
    • Add SFP your email
  • Add custom DNS name to integration (contact support)
  • Config Application Insights
    • config logging
  • (Optional) Add maintenancepage (LINK)
  • Release to preproduction the first time
    • Use paasportal, make sure to tick copy blobs and database
  • Release to production the first time
    • Use paasportal, make sure to tick copy blobs and database
  • Add custom DNS name to PREP and PROD (contact support)
  • Ask for access (if not automatic) to AppInsights in azure for PREP and PROD
  • Ask support to activate profiling in AppInsights
  • (Optional) Add ip-restriction to INTE and PREP
  • (Optional, solution specific) Add VPN if needed for integrations to work

!Important! If you have heavy scheduled jobs, you can ask for a complimentary Azure WebApp (single instance) to only run jobs. This is included in the Commerce DXP package. The scheduler will be deactivated on the public facing instances. The scheduler app can also be used as your integration endpoint as it gets its own name and address.

DXP Go Live checklist:

It is recommended to do load testing. This is done by the partner. Together with Optimizely you monitor how well the application performs, and can take actions together if the performance is not enough.

Have a discussion about scaling with the onboarding team to find the best balance between instance size (should be Premium tier for Commerce) and database scale. The default isn’t necessarily good enough for your traffic and peaks. You don’t need to do performance testing to ask for scaled up environments, you can base this on experience from your existing hosting. The onboarding team will help you find the right balance here – and it can be tweaked later on.

Ask support to enable Application Insight profiler

Azure Application Insights Profiler provides performance traces for applications that are running in production in Azure. Profiler captures the data automatically at scale without negatively affecting your users. Profiler helps you identify the “hot” code path that takes the longest time when it’s handling a particular web request.

If on .NET 4.x you can ask support to activate profiling in Application Insights to get detailed profiling of your code. If on .NET 5/6 you can add this yourself in your ConfigureServices method: services.AddServiceProfiler();”

Steps Go Live

[will update post with this asap]

  • Upload new blobs to INTE
  • Upload latest database – ask support to update db in INTE
  • release blobs and database from INTE to PROD
  • Point DNS to DXP PROD

DXP Managemant Portal

DXP paas portal
DXP paas portal deployment UI

Cloud enablement

  • Install FIND package (if not already done), remember Episerver.FIND.Commerce package
  • Remove episerver.search and episerver.search.indexingservice (by config transfor or remove package)
  • Configuration of caching for static and dynamic files for Cloudflare CDN (https://world.optimizely.com/documentation/developer-guides/digital-experience-platform/development-considerations/cdn-recommendations/) I can recommend the Dr. Flare Chrome extension to get a good view of your cache settings.
  • Removal of sessionstate if possible. If you don’t need session state, you can also disable sticky sessions (session affinity) by setting the Arr-Disable-Session-Affinity header to true from code or config. This will remove two ARRAffinity cookies as well. (https://azure.microsoft.com/en-us/blog/disabling-arrs-instance-affinity-in-windows-azure-web-sites/)
  • Rework of any specific configuration related to app_data configuration that’s outside of the package location (such as outside of main web directory of physical hosted)
    • Use Azure File Share instead of traditional shares eg \\myshare\folder1\someimport.json. Here is an example how to use Azure file share [LINK]
  • Add Azure Specific packages and configs
    • https://world.optimizely.com/documentation/developer-guides/archive/dxp-cloud-services/development-considerations/environment-configurations/
    • Add EPiServer.Azure and (if commerce) EPiServer.Commerce.Azure
  • (Optional, later) Add ip-restriction to INTE and PREP

Config transforms

!Important: In Azure App Service (which is used in DXP), app settings are variables passed as environment variables to the application code. For Linux apps and custom containers, App Service passes app settings to the container using the --env flag to set the environment variable in the container. In either case, they’re injected into your app environment at app startup. When you add, remove, or edit app settings, App Service triggers an app restart.

For ASP.NET and ASP.NET Core developers, setting app settings in App Service are like setting them in <appSettings> in Web.config or appsettings.json, but the values in App Service override the ones in Web.config or appsettings.json.

You may find the variables in Azure portal:

Transforms FYI

Config transforms is  not only for web.config, it works and is allowed on all .config
example: <episerver.framework configSource=”Configs\episerver.framework.config” /> is allow

config-transforms example code
Will work as usual
connstr-example transforms in code value not important
This illustrates that the value in attr connectionString can be anything since it is replaced by the azure keyvault value from the App Service variables.

What is released into Integration?

If you need to check what is deployed and the outcome of the config transform, for PREP and PROD, you need to ask the support. For integration you can use Kudo. Generally [provisionedname].scm.azurewebsites.net

Appserver => Advanced tools => Go

Go to Debug console => CMD
Here you may view/edit/upload files which is a great help speeding up the process.

How to upload blobs to DXP

From support you do get a SAS url to use for connecting to the container with Azure Storage Explorer. it looks something like this: https://name01mstr5h3i1inte.blob.core.windows.net/mysitemedia?sp=racwdl&st=2022-03-14T01:07:25Z&se=2022-09-14T09:07:25Z&spr=https&sv=2020-08-04&sr=c&sig=BCQn0BDUKJ36

Connect with Azure Storage Explorer

Download the app from Microsoft official channels

Connect to Azure guide

Connect to Azure guide

Connect to Azure guide

Upload to Azure Container

The gui doesn’t allow to upload multiple folders. So you need to upload all the blobs-folder, when done, you ask the support to move the files to root of mysitemedia.

Should look like this at the end, blobs folders should be in root of mysitemedia

DEVOP SETUP FOR DXP

This part I will let you figure out yourself, but you will be greatly help by the Epinova DXP Deployment Azure Devops Extention: https://github.com/Epinova/epinova-dxp-deployment
Available on Marketplace https://marketplace.visualstudio.com/items?itemName=epinova-sweden.epinova-dxp-deploy-extension

Deployment API Credentials

Will be found in the Paasportal – more documentation: https://world.optimizely.com/documentation/developer-guides/digital-experience-platform/deploying/optimizely-digital-experience-cloud-deployment-api

Azure file share example

Azure Blob storage upload example

About the author

Luc Gosso
– Independent Senior Web Developer
working with Azure and Optimizely

Twitter: @LucGosso
LinkedIn: linkedin.com/in/luc-gosso/
Github: github.com/lucgosso

Leave a Reply

Your email address will not be published. Required fields are marked *