Feature

Germain Engine is preferred to run in docker.

Prerequisite: docker-compose v1.29

Configure

Step 1

Download the latest germain docker files as provided by our team

Extract the contents of the archive to a location where you would like germain installed.

Example - /opt/germain
JS

Step 2

Install Infrastucture services for germain

Create docker network for germain
docker network create germain
CODE

Prepare Solr cores to be used by docker container
cd /opt/germain/config/solr

# unzip solr cores
unzip solr-content-core.zip -d ./
unzip solr-dimension-core.zip -d ./
unzip solr-document-core.zip -d ./

# remove solr properties file
rm solr-content-core/core.properties
rm solr-dimension-core/core.properties
rm solr-document-core/core.properties

# provide correct permissions so that solr container can read the core files
cd /opt/germain/config
find ./ -type f -exec chmod 664 -- {} +
find ./ -type d -exec chmod 777 -- {} +
CODE

Launch Infrastructure services using docker-compose
cd /opt/germain
docker-compose -f compose/apm-infrastructure.yaml up -d --force-recreate
CODE

Prepare config details to be used by germain application

Database connection details, SMTP account details will be added in this step.

cd /opt/germain/config
nano bootstrap.zk
CODE

Import configuration into zookeeper
# get the container id of zookeeper
docker ps

# run import command inside zookeeper container
docker exec -it <container-id> zkCli.sh

# copy contents of bootstrap.zk and paste into cli

create /config ""
create /config/germain ""
create /config/germain/application ""
create /config/germain/application/germain.datamart.maximumPoolSize "20"
create /config/germain/application/germain.datamart.minimumIdle "0"
create /config/germain/application/germain.datamart.poolName "DatamartPool"
create /config/germain/application/germain.datamart.driverClassName "com.mysql.jdbc.Driver"
create /config/germain/application/germain.datamart.url "jdbc:mysql://host:3306/DAT?rewriteBatchedStatements=true"
create /config/germain/application/germain.datamart.username "DAT"
create /config/germain/application/germain.datamart.password "DAT"
create /config/germain/application/germain.config.maximumPoolSize "10"
create /config/germain/application/germain.config.minimumIdle "0"
create /config/germain/application/germain.config.poolName "ConfigPool"
create /config/germain/application/germain.config.driverClassName "com.mysql.jdbc.Driver"
create /config/germain/application/germain.config.url "jdbc:mysql://APMCFG:3306/APMCFG?rewriteBatchedStatements=true"
create /config/germain/application/germain.config.username "APMCFG"
create /config/germain/application/germain.config.password "APMCFG"
create /config/germain/application/germain.indexer.vendor "SOLR"
create /config/germain/application/germain.indexer.url "http://Germain-solr:8983/solr/"
create /config/germain/application/germain.indexer.dimensionIndexName "dimension"
create /config/germain/application/germain.indexer.contentIndexName "content"
create /config/germain/application/germain.indexer.documentIndexName "document"
create /config/germain/application/germain.messaging.brokerUrl "failover:(tcp://germainapm-activemq:61616?daemon=true&keepAlive=true)"
create /config/germain/application/germain.messaging.listenerCount "1"
create /config/germain/application/germain.messaging.maxBufferSize "64"
create /config/germain/application/germain.messaging.queues.storageDefaultQueue "apm.storage"
create /config/germain/application/germain.messaging.queues.storageAnalyticsQueue "apm.storage.analytics"
create /config/germain/application/germain.messaging.queues.analyticsQueue "apm.analytics"
create /config/germain/application/germain.messaging.queues.aggregationWorkQueue "apm.aggregation"
create /config/germain/application/germain.messaging.queues.actionQueue "apm.action"
create /config/germain/application/germain.messaging.queues.actionControlQueue "apm.action.control"
create /config/germain/application/germain.messaging.queues.sessionQueue "apm.session"
create /config/germain/application/germain.messaging.queues.rtmQueue "apm.rtm"
create /config/germain/application/germain.messaging.queues.contentIndexQueue "apm.contentIndex"
create /config/germain/application/germain.messaging.queues.documentAuditQueue "apm.documentAudit"
create /config/germain/application/germain.messaging.topics.configTopic "apm.config"
create /config/germain/application/spring.mail.from "alert@germainUX.com"
create /config/germain/application/spring.mail.host "smtp.office365.com"
create /config/germain/application/spring.mail.username "alert@germainUX.com"
create /config/germain/application/spring.mail.password "password"
create /config/germain/application/spring.mail.port "587"
create /config/germain/application/spring.mail.properties.mail.smtp.auth "true"
create /config/germain/application/spring.mail.properties.mail.smtp.starttls.enable "true"
create /config/germain/application/spring.mail.properties.mail.connectiontimeout "15000"
create /config/germain/application/spring.mail.properties.mail.timeout "15000"
create /config/germain/application/spring.mail.properties.mail.writetimeout "15000"
create /config/germain/rest-services ""
create /config/germain/rest-services/logging.config "${catalina.base}/conf/rest-logback.xml"
create /config/germain/ingestion-services ""
create /config/germain/ingestion-services/logging.config "${catalina.base}/conf/ingestion-logback.xml"
CODE

This step will import all environment configurations into zookeeper so that Germain services can use them.

Step 3

Install Germain services

Launch Germain services using docker-compose
cd /opt/germain
docker-compose -f compose/apm-services.yaml up -d --force-recreate
CODE

Step 4

Install Germain engines

Edit engine.env file to point to Germain instance
cd /opt/germain/config
nano engine.env
CODE

Launch Germain services using docker-compose
cd /opt/germain
docker-compose -f compose/apm-engines.yaml up -d --force-recreate
CODE