Configure a content management (CM) server

Content management (CM) servers enable content editors to create and publish content to a website. You can configure a single content management server or multiple content management servers, depending on your content editing needs.

Recommendations

Before you configure a CM server:

  • You can enable xDB analytics tracking to track contacts, goals, and campaigns and to enable personalization. It is not, however, a requirement for running a CM server.
  • For session state management you must configure the session connection string unless you use the in process mode. You can use the in process session provider on a CM server because it does not perform the same tasks as a content delivery (CD) server. A CM server should never be a part of a CD cluster.
  • If you run xDB Cloud edition, you must configure your CM environment according to the instructions in this topic and the instructions for configuring xDB Cloud.

Note

You should synchronize all servers to a single reliable time source, such as with the Network Time Protocol (NTP). Engagement automation state aggregation depends on the system time. Inconsistency in time sources can lead to incorrect aggregation results or loss of data.

See also:

Configuration and connections

Before you install a Sitecore server you must read the hardware guidelines for Sitecore Hosting Environment Requirements and Sitecore Client Requirements sections from Installation Guide 9.0. You can download the guide from the Sitecore Downloads page.

You can install a Sitecore server either manually or by using the Sitecore Installation Framework. We recommend you use the Sitecore Installation Framework according to the instructions in the Installation Guide 9.0. The Sitecore Installation Framework automatically configures your Sitecore server for the role you select.

If you install the server manually, you must configure it for the CM role:

  1. Use rule-based configuration to configure the server to fulfill only the ContentManagement role by including this line in the web.config file:

    <add key="role:define" value="ContentManagement" />
    
  2. Ensure the following connection strings are set in the \App_Config\ConnectionStrings.config file:

    Name Type Notes
    core SQL  
    web SQL  
    master SQL  
    messaging SQL 9.0 Update-1 and later.
    xconnect.collection HTTPS  
    xconnect.collection.certificate Certificate  
    reporting SQL  
    reporting.apikey Unique string Required if you use a dedicated Reporting Service or processing server.
    xdb.referencedata SQL  
    xdb.referencedata.client HTTPS  
    xdb.referencedata.client.certificate Certificate  
    xdb.marketingautomation.operations.client HTTPS The same as reporting, unless you have split the operations and reporting roles.
    xdb.marketingautomation.operations.client.certificate Certificate  
    xdb.marketingautomation.reporting.client HTTPS The same as operations, unless you have split the operations and reporting roles.
    xdb.marketingautomation.reporting.client.certificate Certificate  
    ExperienceForms SQL  

    Note

    If you have set up xConnect to use separate collection and search end points, you must configure them separately.

  3. Configure content search. Contact and interaction search is done through the xConnect Search service, as CM servers do not have direct access to the xDB core. Configuration depends on your provider:

    In a scaled environment, you should use Solr or Azure Search. Lucene is only recommended for standalone servers. The Azure Search provider only supports Azure Cloud PAAS deployments.

  4. Disable the robot detection component.

Note

If you use the Federated Experience Manager (FXM) you must specify which CD server the CM server should use. In the Sitecore.FXM.config file, in the FXMHostname setting, use a patch file to specify the CD server. This example sets the hostname to scalingcdservername: <setting name="FXM.Hostname" value="scalingcdservername" />.

Configure reporting

The way you configure reporting depends on whether you use a dedicated Reporting Service server.

Using a CM server as a Reporting Service server

If you do not have a dedicated Reporting Service server, the CM server can perform the reporting role. You enable this by configuring the reporting string in the \App_Config\ConnectionStrings.config file. This allows the CM server to have direct access to the reporting database.

Using a dedicated Reporting Service server

If you have a dedicated Reporting Service server, you must configure the remote client.

To configure the client:

  1. Create a patch file to configure the Reporting Service server end point. This enforces HTTPS by default.

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
         <sitecore>
             <reporting>
                 <remote>
                     <httpTransportFactory>
                         <param desc="serviceUrl">https://reportingInstanceName</param>
                     </httpTransportFactory>
                 </remote>
             </reporting>
         </sitecore>
     </configuration>
    
  2. Open the \App_Config\ConnectionStrings.config file and configure the reporting API key by adding the Reporting Service server’s API key:

    <add name="reporting.apikey" connectionString="a0123456789abcdefghijklmn9876543210z" />
    

    Note

    If you have dedicated servers for the Reporting Service and processing roles, you can use the same reporting.apikey connection string for both servers.

Configure processing

The way you configure processing depends on if you use a dedicated processing server.

Using a CM server as a processing server

If you do not have a dedicated processing server, the CM server can perform the processing role. You enable this by configuring the reporting, xdb.processing.pools, and xdb.processing.tasks connection strings in the \App_Config\ConnectionStrings.config file. This allows the CM server to access the relevant databases directly.

Using a dedicated processing server

If you have a dedicated processing server, you must configure the remote client.

To configure the client:

  1. Create a patch file to configure the processing server end point. This enforces HTTPS by default.

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
        <sitecore>
            <processing>
                <remote>
                    <httpTransportFactory>
                        <param desc="serviceUrl">https://processingInstanceName</param>
                    </httpTransportFactory>
                </remote>
            </reporting>
        </sitecore>
    </configuration>
    
  2. Open the \App_Config\ConnectionStrings.config file and add the Reporting Service server’s API key.

    <add name="reporting.apikey" connectionString="a0123456789abcdefghijklmn9876543210z" />
    

    Note

    If you have dedicated servers for the Reporting Service and processing roles, you can use the same reporting.apikey connection string for both servers.

Configure Path Analyzer

Path Analyzer is enabled by default on the Content Management role. To configure the Path Analyzer:

  1. On the Content Management role, open c:\path\to\CM\App_Config\Sitecore\Marketing.xDB\Sitecore.Xdb.Remote.Client.config.

  2. Set the serviceUrl to the URL of your Reporting role.

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:role="http://www.sitecore.net/xmlconfig/role/">
        <sitecore role:require="ContentManagement">
            <httpTransportFactory type="Sitecore.Analytics.Core.ApiKeyHttpTransportFactory, Sitecore.Analytics.Core" singleInstance="true">
                <param desc="serviceUrl">https://sitecore.net/example</param>
            </httpTransportFactory>
        </sitecore>
    </configuration>
    

Security

Refer to the Security Hardening Guide for comprehensive security hardening instructions.

Configure multiple CM servers

If you configure multiple CM servers, you must perform these additional steps on each server:

  1. Each instance must have a unique name. By default Sitecore assigns an instance name consisting of the machine name plus the IIS server name.

    If you need to assign a different instance name, use a patch file to set it manually. The following example sets the name to testCM1:

    <setting name="InstanceName">
        <patch:attribute name="value">testCM1</patch:attribute>
    </setting>
    

    Note

    ​You only need to do this if you need to change the default instance name.

  2. Only one CM instance can perform the publishing role. Ensure that the Publishing.PublishingInstance setting in \App_Config\Sitecore.config is set to the same instance name on every server:

    <setting name="Publishing.PublishingInstance">
        <patch:attribute name="value">
            testCM1
        </patch:attribute>
    </setting>
    
  3. In the web.config file, set the validationKey and the decryptionKey attributes of the /configuration/system.web/machineKey element to a non-auto generated value. Ensure that the values are identical for all the instances within the environment and that the IsolateApps modifier is not present in either value.

    See also

    For more information about the <machineKey> section of the web.config file, see http://msdn.microsoft.com/en-us/library/w8h3skw9(VS.90).aspx.

Note

If you have multiple CM servers, you must set up a dedicated Reporting Service instance.