Configure a content management (CM) server

Content management 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 content management server, consider the following recommendations:

  • xDB analytics tracking – tracking contacts, personalization, goals, campaigns, and more can be relevant when creating a dedicated content management server but is not a requirement.
  • Session state – always configure the sessions connection string unless you use the InProc mode for session state. You can use the InProc session provider because a content management server does not perform the same tasks as a content delivery server. A content management server should never be a part of a content delivery cluster.
  • xDB Cloud configuration – if you are running xDB Cloud edition then configure your content management environment according to this topic and the instructions for configuring xDB Cloud.

Note

Synchronize all servers to a single reliable time source, for example, by means of the Network Time Protocol (NTP). The aggregation of engagement automation states depends on the system time and changing this can lead to incorrect aggregation results or loss of data.

See also:

Configuration and connections

In order to install a Sitecore server, you must:

  1. Ensure that you have 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.
  2. Install a Sitecore instance using the Sitecore Installation Framework according to the instructions in the Installation Guide 9.0.

Note

When you use the Sitecore Installation Framework to install the server, you do not need to configure the server and the connections manually. The Sitecore Installation Framework performs the following steps automatically.

In order to configure a content management server manually, you must:

  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" />
  1. Ensure the following connection strings are set in the \App_Config\ConnectionStrings.config file:
Name Type Notes
core SQL  
web SQL  
master SQL  
reporting SQL  
xconnect.collection HTTPS If collection and search are on dedicated servers, you will need to configure xconnect.collection and xconnect.search separately.
xconnect.collection.certificate Certificate  
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 Generally the same as reporting, unless you split the operations and reporting roles.
xdb.marketingautomation.operations.client.certificate Certificate  
xdb.marketingautomation.reporting.client HTTPS Generally the same as operations, unless you split the operations and reporting roles.
xdb.marketingautomation.reporting.client.certificate Certificate  
ExperienceForms SQL  

Note

If xConnect has been set up to use separate collection and search end points, they must be configured separately.

  1. Configure content search. Configuration depends on your provider:

In a scaled environment, you should use Solr or Azure Search - Lucene is not recommended. Azure Search provider is supported for Azure Cloud PAAS deployments only.

Note

Content management servers do not have direct access to the xDB core. Contact and interaction search is done through the xConnect Search service.

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

Configure reporting

How you configure reporting depends on whether you are using a dedicated Reporting Service server or not.

Direct connection to reporting database

If you do not have a dedicated Reporting Service server, the reporting role can be performed by the content management server itself. In that case you need a direct connection to the reporting database.

Via reporting service

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

  1. Create a patch file to configure the Reporting Service server end point (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>
  1. 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.

Configure processing

How you configure processing depends on whether you are using a dedicated processing server or not.

Direct connection to processing database

If you do not have a dedicated processing server, the processing role can be performed by the content management server itself. In that case you need a direct connection to the reporting, xdb.processing.pools and xdb.processing databases.

Dedicated processing server

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

  1. Create a patch file to configure the processing server end point (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>
  1. 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.

Security

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

Configure multiple CM servers

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

  1. Use a patch file to set a unique InstanceName for each instance. The following example sets the name to testCM1:
<setting name="InstanceName">
    <patch:attribute name="value">testCM1</patch:attribute>
</setting>
  1. Only one CM instance can perform publishing. 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>
  1. 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.