⚙️ Installation & Configuration
Configuration Files
📖 Docs

Configuration Files - Optimizely CMS 12

Exam Area: Content Area 2 – Installation, Operation & Configuration (20%)
Reference: https://docs.developers.optimizely.com/content-management-system/docs/configuration


1. appsettings.json - Main Configuration

{
  "ConnectionStrings": {
    "EPiServerDB": "Server=.;Database=MyCMSDb;Trusted_Connection=True;TrustServerCertificate=True"
  },
  "EPiServer": {
    "CMS": {
      "DefaultLanguage": "en",
      "UIUrl": "~/episerver/cms/",
      "AdminUIUrl": "~/episerver/cms/admin/"
    },
    "Framework": {
      "AutoUpdateDatabaseSchema": true,
      "AppDataPath": "App_Data"
    }
  }
}

2. Database Configuration (Data Access)

{
  "EPiServer": {
    "Framework": {
      "DataAccess": {
        "ConnectionString": "EPiServerDB",
        "CommandTimeout": "60"
      }
    }
  }
}

3. CMS Section Configuration

// In Program.cs - detailed configuration
builder.Services.Configure<CmsOptions>(options =>
{
    options.DefaultLanguage = "en";
    options.EnableInlineBlockEditing = true;
});

4. module.config

Configuration file for CMS modules:

<!-- module.config in module folder or embedded in assembly -->
<?xml version="1.0" encoding="utf-8"?>
<module>
  <assemblies>
    <add assembly="MyOptimizelySite" />
  </assemblies>
  <clientResources>
    <add name="MyCustomScript" path="ClientResources/Scripts/myScript.js" resourceType="Script" />
  </clientResources>
  <requiredResources>
    <add name="MyCustomScript" />
  </requiredResources>
</module>

5. CMS UI Configuration

// Change URLs for Edit and Admin views
builder.Services.Configure<UIOptions>(options =>
{
    options.EditUrl = new Uri("/cms/edit", UriKind.Relative);
});
{
  "EPiServer": {
    "CMS": {
      "UIUrl": "~/myedit/",
      "AdminUIUrl": "~/myadmin/"
    }
  }
}

6. Blob Storage Configuration

// Azure Blob Storage
builder.Services.AddAzureBlobProvider(options =>
{
    options.ConnectionString = "DefaultEndpointsProtocol=https;AccountName=...";
    options.ContainerName = "my-cms-blobs";
});

// File system (default)
builder.Services.Configure<FileBlobOptions>(options =>
{
    options.Path = Path.Combine(builder.Environment.ContentRootPath, "App_Data/blobs");
});

7. Caching Configuration

{
  "EPiServer": {
    "Framework": {
      "Cache": {
        "LocalCacheSize": 10000,
        "RemoteCacheEnabled": true
      }
    }
  }
}
// Object cache configuration
builder.Services.Configure<CacheManagerOptions>(options =>
{
    options.Enabled = true;
    options.MemoryCacheEntryOptions = new MemoryCacheEntryOptions
    {
        SlidingExpiration = TimeSpan.FromMinutes(10)
    };
});

8. Scheduled Jobs Configuration

{
  "EPiServer": {
    "CMS": {
      "ScheduledJobsEnabled": true
    }
  }
}

9. Search Configuration

{
  "EPiServer": {
    "Find": {
      "ServiceUrl": "https://es-api.episerver.net",
      "DefaultIndex": "mysite_index"
    }
  }
}

10. Logging Configuration

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "EPiServer": "Information"
    }
  },
  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "Logs/cms-.log",
          "rollingInterval": "Day"
        }
      }
    ]
  }
}

11. Environments (Development vs Production)

appsettings.json              → Base configuration
appsettings.Development.json  → Development overrides
appsettings.Production.json   → Production overrides
appsettings.Staging.json      → Staging overrides
// appsettings.Development.json
{
  "EPiServer": {
    "Framework": {
      "AutoUpdateDatabaseSchema": true
    }
  }
}

// appsettings.Production.json
{
  "EPiServer": {
    "Framework": {
      "AutoUpdateDatabaseSchema": false
    }
  }
}

Review Questions

  1. What is the connection string name for the CMS database? (EPiServerDB)
  2. In which environment should AutoUpdateDatabaseSchema be enabled? (Development; disabled in Production)
  3. What is module.config used for? (Configuring CMS modules and client resources)
  4. How do you change the URL of the Edit View? (Configure UIOptions.EditUrl)
  5. Which service is used to configure Azure Blob Storage? (AddAzureBlobProvider())