In Docker
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
Step 2
Install Infrastucture services for germain
Create docker network for germain
docker network create germain
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 -- {} +
Launch Infrastructure services using docker-compose
cd /opt/germain
docker-compose -f compose/apm-infrastructure.yaml up -d --force-recreate
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
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"
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
Step 4
Install Germain engines
Edit engine.env file to point to Germain instance
cd /opt/germain/config
nano engine.env
Launch Germain services using docker-compose
cd /opt/germain
docker-compose -f compose/apm-engines.yaml up -d --force-recreate