Question
How is it possible to define a repository based configuration for a specific instance, for example for a development author, a test author or a live author instance?
Answer, Resolution
Generally there are two ways to configure CQ5:
Configuration on the Apache Felix Web Management Console
The configuration on the Apache Felix Web Management Console (http://<host>:<port>/system/console/configMgr) is always specific for the current instance.
A description can be found at our docmentation, see [0].
Repository based configuration
Additional to the configuration on the Apache Felix Web Management Console, it is possible to store configuration in the CRX repository as nodes of nodetype sling:OsgiConfig, see [1].
With this it is possible to share configuration among several instances.
The name of these nodes have to be equal to the Persistent Identity (PID) of the configuration - usually it is the name of the service, if you look at http://<host>:<port>/system/console/config you see these names listed as service.pid properties.
These configuration nodes have to be child-nodes of nodetype nt:folder with a name starting with config followed by a dot and all the run-modes the config should be applied to separated by a dot.
Examples: config.author, config.publish, config.author.dev, config.author.foo.dev etc
Run-Mode
It is possible to define specific run-mode(s) a specific instance should run on.
By default an author instance runs on run-mode author and a publish instance runs on run-mode publish.
It is possible to define several run-modes for one instance, for example author, foo and dev.
These run-modes have to be set as VM options.
For example on the console:
java -Dsling.run.modes=author,foo,dev -Xmx256m -jar cq-wcm-quickstart-5.2.0.jar
or in the start script:
# default JVM options
CQ_JVM_OPTS='-Dsling.run.modes=author,foo,dev'
The current run-modes of an instance are visible at http://<host>:<port>/system/console/runmodes
Note: It is not recommended to change or remove the default run-modes author and publish. Simply add your specific run-modes to the default list of existing run-modes.
Note: The same mechanism works for the repository based bundle installation. The bundles have to be placed below nodes of nodetype nt:folder with a name starting with install followed by a dot and all the run-modes the bundles should be applied to separated by a dot.
Example: To have a specific SMTP mailserver configuration for all your instances running on run-mode foo simply create a node with name config.foo and nodetype nt:folder in /apps/geometrixx and copy the node /libs/cq/config/com.day.cq.mailer.DefaultMailService to /apps/geometrixx/config.foo and adapt the properties smtp.host etc.
Example: To have a specific Logrotation configuration just use the configuration package in the KB article How to rotate request.log and access.log and rename the node config for example to config.foo if the config should be taken for all your instances running on run-mode foo only...
Applies to
CQ 5.2+
[0] http://dev.day.com/content/docs/v5_2/html-resources/cq5_guide_system_administrator/ch05s03.html
[1] http://dev.day.com/content/docs/v5_2/html-resources/cq5_guide_system_administrator/ch05s02.html

