Deploying Progress Sitefinity CMS in Azure using Bicep

7 mins read

Quickly deploy a flexible CMS platform using Infrastructure-As-Code with Azure Bicep.

Deploying Progress Sitefinity CMS in Azure using Bicep

Progress Sitefinity is a modern CMS in a PaaS model that delivers intuitive web content management for business professionals, a robust CMS development environment, and a rich end-user experience.

This article will review how we can deploy this platform in Azure using Bicep, the new domain-specific language (DSL) that uses declarative syntax to deploy Azure resources.


An active Azure SubscriptionA user with the owner/contributor roleA resource group in the Azure subscriptionBicep installed in your local machineAzure PowerShell installed in your local machine

So what can we do with Progress Sitefinity? Progress Sitefinity is a CMS that you can deploy in Azure and create personalized websites, customer and partner portals, e-commerce shops, and enable cross-channel campaign management.

Progress Sitefinity Architecture Reference.

The diagram below shows a high-level overview of Progress Sitefinity in Azure:

Progress Sitefinity — Azure Reference Architecture

This article aims to show you how to deploy the essential components of this solution in Azure using Bicep. So let’s work on the Bicep file.

Azure Bicep file for deploying Progress Sitefinity.

We will define the following parameters in the Bicep file

siteName: This is the name of the websitelocation: The location for all the resourceshostingPlanName: This is the App Service PlanappServicePlanInstances: This is the App Service Plan instance countappServicePlanTier: This is the pricing tier for the App Service PlansqlServerName: The SQL Azure DB server nameadministratorLogin: the user admin for the SQL Server instanceadministratorLoginPassword: The passworddatabaseName: The SQL database name

The code below shows the definition of the parameters in the Bicep file:

@description(‘Name of Azure Website’)
param siteName string@description(‘Location for all resources.’)
param location string = resourceGroup().location@description(‘Name of Azure App Service Plan’)
param hostingPlanName string@minValue(1)
@description(‘App Service Plan’s instance count’)
param appServicePlanInstances int = 1@description(‘App Service Plan’s pricing tier.’)
param appServicePlanTier string = ‘S3’@description(‘SQL Azure DB Server name’)
param sqlServerName string@description(‘SQL Azure DB administrator username’)
param administratorLogin string@description(‘SQL Azure DB administrator password’)
param administratorLoginPassword string@description(‘Database name’)
param databaseName string

Now we will define the database resources, including the SQL Server, the SQL database, and the firewall rules:

resource sqlServerName_resource ‘Microsoft.Sql/servers@2014-04-01’ = {
name: sqlServerName
location: location
properties: {
administratorLogin: administratorLogin
administratorLoginPassword: administratorLoginPassword
}resource sqlServerName_databaseName ‘Microsoft.Sql/servers/databases@2014-04-01’ = {
parent: sqlServerName_resource
name: databaseName
location: location
properties: {
edition: ‘Standard’
collation: ‘SQL_Latin1_General_CP1_CI_AS’
maxSizeBytes: ‘21474836480’
requestedServiceObjectiveId: ‘455330e1-00cd-488b-b5fa-177c226f28b7’
}resource sqlServerName_AllowAllWindowsAzureIps ‘Microsoft.Sql/servers/firewallrules@2014-04-01’ = {
parent: sqlServerName_resource
name: ‘AllowAllWindowsAzureIps’

properties: {
endIpAddress: ‘’
startIpAddress: ‘’

The next step is to define the web components, including the server farm and the website:

resource hostingPlanName_resource ‘Microsoft.Web/serverfarms@2021-01-01’ = {
name: hostingPlanName
location: location
sku: {
name: appServicePlanTier
capacity: appServicePlanInstances
}resource siteName_resource ‘Microsoft.Web/sites@2021-01-01’ = {
name: siteName
location: resourceGroup().location
tags: {
‘hidden-related:/subscriptions/${subscription().subscriptionId}/resourcegroups/${resourceGroup().name}/providers/Microsoft.Web/serverfarms/${hostingPlanName}’: ’empty’
properties: {

serverFarmId: ‘/subscriptions/${subscription().subscriptionId}/resourcegroups/${resourceGroup().name}/providers/Microsoft.Web/serverfarms/${hostingPlanName}’
dependsOn: [

Lastly, we will define the source control and the configuration for the site:

resource siteName_web ‘Microsoft.Web/Sites/sourcecontrols@2015-08-01’ = {
parent: siteName_resource
location: location
name: ‘web’
properties: {
repoUrl: ‘’
branch: ‘master’
isManualIntegration: true
}resource siteName_connectionstrings ‘Microsoft.Web/sites/config@2021-01-01’ = {
parent: siteName_resource
name: ‘connectionstrings’
properties: {
defaultConnection: {

value: ‘Data Source=tcp:${},1433;Initial Catalog=${databaseName};User Id=${administratorLogin}@${sqlServerName};Password=${administratorLoginPassword};’
type: ‘SQLAzure’
dependsOn: [
}resource siteName_appsettings ‘Microsoft.Web/sites/config@2021-01-01’ = {
parent: siteName_resource
name: ‘appsettings’

properties: {
‘sf-env:ConnectionStringParams:defaultConnection’: ‘Backend=azure’
‘sf-env:ConnectionStringName’: ‘defaultConnection’

Here’s the complete Bicep file that deploys a Progress Sitefinity CMS in Azure:

Deploying Sitefinity CMS in Azure

We will use the code below to deploy the above Bicep template:

$date = Get-Date -Format “MM-dd-yyyy”
$deploymentName = “AzInsiderDeployment”+”$date”New-AzResourceGroupDeployment -Name $deploymentName -ResourceGroupName progress-sitefinity -TemplateFile .main.bicep -c

Note you can optionally create a parameters file and pass them on during deployment time. In this case, we will manually pass the parameters during deployment time, as shown below:

Progress Sitefinity — Deployment Preview

Then we will have a preview of the deployment as shown below:

Progress Sitefinity — Deployment Preview

Once the validation is complete, we can execute the deployment. The deployment takes a few minutes to complete.

The figure below shows the output of the deployment:

Progress Sitefinity — Deployment output

We can now go to the Azure Portal and grab the URL of the website.

Progress Sitefinity — Website URL

Once you navigate to the URL of the App Service, you should see the screen below:

Note: it can take a few seconds to load for the first time.Progress Sitefinity screen

Then you can apply for your license and start working on the platform.

You can find the GitHub repository with samples to customize your solution here:

Join the AzInsider email list here.

-Dave R.

💪Deploying Progress Sitefinity CMS in Azure using Bicep was originally published in CodeX on Medium, where people are continuing the conversation by highlighting and responding to this story.

Leave a Reply

Your email address will not be published.

Follow Us