- TOC
- Purpose of this repo
- Prereqs
- Hosts /etc/hosts
- Portainer
- Nexus
- Container Registry
- Databases
- Messaging
- Monitoring
- Management
- Application Servers
- Getting a RHEL Compatible JDK8 container
- Getting CENTOS 7
- Getting debian
- Download https certificates
- Create Fuse projects with official archetype
This is a script to setup what I commonly use in a dev environement to build PoCs. It allows you to mainly build/run docker images on your workstation to avoid having to provision a whole Kubernetes cluster for dev purposes. It requires much less resources than a full blown container platform.
To provision a these things on a real Openshift Cluster look into the openshift-lab folder
You should have docker installed with a dedicated. Create a network called primenet
docker network create --driver=bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 primenet
To get access to Red Hat Enterprise container registry you need to login as follows
docker login registry.redhat.io
This is to have some static name resolution docker containers we run locally
172.18.0.10 current
172.18.0.40 portainer
172.18.0.41 nexus
172.18.0.42 registry
172.18.0.43 traefik
172.18.0.44 heimdall
172.18.0.45 regui
172.18.0.46 jenkins
172.18.0.47 fileserver
172.18.0.50 mysql
172.18.0.51 oracle
172.18.0.52 couchbase
172.18.0.53 infinispan
172.18.0.54 datagrid
172.18.0.55 postgres
172.18.0.56 elastic
172.18.0.57 kibana
172.18.0.60 artemis
172.18.0.61 zookeeper
172.18.0.62 kafka
172.18.0.63 kafdrop
172.18.0.64 dbz
172.18.0.65 amqstreams-zk
172.18.0.66 amqstreams
172.18.0.67 amqstreams-kafdrop
172.18.0.68 interconnect
172.18.0.70 prometheus
172.18.0.71 grafana
172.18.0.80 schemareg
172.18.0.81 apiman
172.18.0.82 servicereg
172.18.0.90 eap
172.18.0.91 eap6
172.18.0.92 nodered
172.18.0.93 kura
172.18.0.100 amqbrokera0
172.18.0.101 amqbrokera1
172.18.0.110 amqbrokerb0
172.18.0.111 amqbrokerb1
172.18.0.115 amqbroker
172.18.0.120 ubi-station
172.18.0.121 centos
172.18.0.122 debian
172.18.0.130 ems
172.18.0.140 smoke-test
docker stop portainer
docker rm portainer
docker rmi portainer/portainer:linux-amd64-1.24.1
docker run -d --name=portainer --net primenet --ip 172.18.0.40 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:2.1.1
docker run --name nexus \
-d --net primenet --ip 172.18.0.41 \
sonatype/nexus3:3.28.1
docker run --name nexus --restart always \
-d --net primenet --ip 172.18.0.41 -p 8081:8081 \
sonatype/nexus3:3.28.1
create proxy maven2 repos
red-hat-ga-repository https://maven.repository.redhat.com/ga
red-hat-early-access-repository https://maven.repository.redhat.com/earlyaccess/all
add to maven-public group
docker run -d --net primenet --ip 172.18.0.42 -p 5000:5000 --restart always --name registry registry:2
docker run -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=mysqldb -e MYSQL_USER=user -e MYSQL_PASSWORD=password -d --net primenet --ip 172.18.0.50 --name mysql mysql:8.0.19
Run this as root user for change data capture later on
mysql -u root mysqldb
GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'user';
GRANT ALL PRIVILEGES ON mysqldb.* TO 'user'@'%';
alter user 'user' identified with mysql_native_password by 'password';
flush privileges;
docker run --name oracle \
-e ORACLE_SID=ORCLCDB \
-e ORACLE_PDB=ORCLPDB1 \
-e ORACLE_PWD=password \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-d --net primenet --ip 172.18.0.51 \
oracle/database:12.2.0.1-ee
Connect as root user and run
alter session set "_ORACLE_SCRIPT"=true;
CREATE USER "USER" IDENTIFIED BY "password"
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP";
GRANT "DBA" TO "USER";
docker run \
-d --name couchbase \
-d --net primenet --ip 172.18.0.52 \
couchbase:enterprise-6.5.1
Goto https://couchbase:8091/ for admin console
docker stop infinispan
docker rm infinispan
docker run \
-e USER="user" -e PASS="password" \
-d --name infinispan \
-d --net primenet --ip 172.18.0.53 \
infinispan/server:11.0.0.Final-2
docker run \
-e USER="user" -e PASS="password" \
-d --name datagrid \
-d --net primenet --ip 172.18.0.54 \
registry.redhat.io/datagrid/datagrid-8-rhel8:latest
docker run \
-e POSTGRES_USER="user" -e POSTGRES_PASSWORD="password" -e POSTGRES_DB="db" \
-d --name postgres \
-d --net primenet --ip 172.18.0.55 \
postgres:12.3
docker run \
-e discovery.type=single-node \
-d --name elastic \
-d --net primenet --ip 172.18.0.56 \
elasticsearch:7.8.0
Ports : 9200 and 9300 goto https://elastic:9200/
docker stop kibana
docker rm kibana
docker run \
-e "ELASTICSEARCH_HOSTS=https://elastic:9200" \
-e "monitoring.ui.container.elasticsearch.enabled=false" \
-d --name kibana \
--net primenet --ip 172.18.0.57 \
kibana:7.8.0
got to https://kibana:5601
docker stop artemis
docker rm artemis
docker rmi artemis-broker:2.13.0-alpine
cd artemis
docker build -t artemis-broker:2.13.0-alpine .
cd ..
docker run -d --name artemis --net primenet --ip 172.18.0.60 \
-e ARTEMIS_USERNAME=artemis \
-e ARTEMIS_PASSWORD=password \
-e ENABLE_JMX_EXPORTER=true \
artemis-broker:2.13.0-alpine
docker run \
-e AMQ_USER="adm" \
-e AMQ_PASSWORD="password" \
-e AMQ_ROLE="admin" \
-e AMQ_REQUIRE_LOGIN="false" \
-e AMQ_ENABLE_METRICS_PLUGIN="true" \
-d --name amqbroker \
-d --net primenet --ip 172.18.0.115 \
registry.redhat.io/amq7/amq-broker:latest
keytool -genkey \
-alias amqbrokera \
-storepass password \
-keyalg RSA \
-storetype PKCS12 \
-dname "cn=amqbrokera" \
-validity 365000 \
-keystore amqbroker/tls/amqbrokera-keystore.p12
keytool -genkey \
-alias amqbrokerb \
-storepass password \
-keyalg RSA \
-storetype PKCS12 \
-dname "cn=amqbrokerb" \
-validity 365000 \
-keystore amqbroker/tls/amqbrokerb-keystore.p12
keytool -export \
-alias amqbrokera \
-rfc \
-storepass password \
-keystore amqbroker/tls/amqbrokera-keystore.p12 \
-file amqbroker/tls/amqbrokera_public_cert.pem
keytool -export \
-alias amqbrokerb \
-rfc \
-storepass password \
-keystore amqbroker/tls/amqbrokerb-keystore.p12 \
-file amqbroker/tls/amqbrokerb_public_cert.pem
openssl pkcs12 -in amqbroker/tls/amqbrokera-keystore.p12 -password pass:password -clcerts -nokeys -out amqbroker/tls/amqbrokera_public_cert_openssl.pem
openssl pkcs12 -in amqbroker/tls/amqbrokera-keystore.p12 -password pass:password -nodes -nocerts -out amqbroker/tls/amqbrokera_private_key.key
openssl pkcs12 -in amqbroker/tls/amqbrokerb-keystore.p12 -password pass:password -clcerts -nokeys -out amqbroker/tls/amqbrokerb_public_cert_openssl.pem
openssl pkcs12 -in amqbroker/tls/amqbrokerb-keystore.p12 -password pass:password -nodes -nocerts -out amqbroker/tls/amqbrokerb_private_key.key
keytool -import \
-alias amqbrokera \
-storepass password\
-storetype PKCS12 \
-noprompt \
-keystore amqbroker/tls/client-truststore.p12 \
-file amqbroker/tls/amqbrokera_public_cert.pem
keytool -import \
-alias amqbrokerb \
-storepass password\
-storetype PKCS12 \
-noprompt \
-keystore amqbroker/tls/client-truststore.p12 \
-file amqbroker/tls/amqbrokerb_public_cert.pem
cp amqbroker/tls/client-truststore.p12 amqbroker/tls/amqbrokera-truststore.p12
cp amqbroker/tls/client-truststore.p12 amqbroker/tls/amqbrokerb-truststore.p12
keytool -list -storepass password -keystore amqbroker/tls/amqbrokera-keystore.p12 -v
keytool -list -storepass password -keystore amqbroker/tls/amqbrokerb-keystore.p12 -v
keytool -list -storepass password -keystore amqbroker/tls/client-truststore.p12 -v
keytool -list -storepass password -keystore amqbroker/tls/amqbrokera-truststore.p12 -v
keytool -list -storepass password -keystore amqbroker/tls/amqbrokerb-truststore.p12 -v
docker run \
-e AMQ_USER="adm" \
-e AMQ_PASSWORD="password" \
-e AMQ_ROLE="admin" \
-e AMQ_NAME="amqbroker" \
-e AMQ_TRANSPORTS="openwire,amqp,stomp,mqtt,hornetq" \
-e AMQ_QUEUES="app.queue" \
-e AMQ_ADDRESSES="app.addr" \
-e AMQ_GLOBAL_MAX_SIZE="100 gb" \
-e AMQ_REQUIRE_LOGIN="false" \
-e AMQ_ENABLE_METRICS_PLUGIN="true" \
-e AMQ_JOURNAL_TYPE="nio" \
-e AMQ_DATA_DIR="/opt/amq/data" \
-e AMQ_DATA_DIR_LOGGING="true" \
-e AMQ_CLUSTERED="false" \
-e AMQ_REPLICAS="0" \
-e AMQ_CLUSTER_USER="amq-cluster-user" \
-e AMQ_CLUSTER_PASSWORD="password" \
-e AMQ_KEYSTORE_TRUSTSTORE_DIR="/etc/amq-secret-volume" \
-e AMQ_TRUSTSTORE="broker-truststore.p12" \
-e AMQ_TRUSTSTORE_PASSWORD="password" \
-e AMQ_KEYSTORE="broker-keystore.p12" \
-e AMQ_KEYSTORE_PASSWORD="password" \
-e AMQ_SSL_PROVIDER="JDK" \
-d --name amqbroker \
-d --net primenet --ip 172.18.0.65 \
-v "$(pwd)"/amqbroker/tls:/etc/amq-secret-volume:ro \
registry.redhat.io/amq7/amq-broker:latest
Edit the following file to tweak configs
source ./amqbroker/amq-tools.sh
Edit initamqvars() function in file amqbroker/amq-tools.sh and run
initamqvars
drafttopology
tlsgen
runbrokers
stopbrokers
docker run \
-e QDROUTERD_CONF="$(cat interconnect/qdrouterd.conf)" \
--memory="1g" \
-d --name interconnect \
-d --net primenet --ip 172.18.0.68 \
registry.redhat.io/amq7/amq-interconnect:latest
docker run \
-p 5672:5672 \
-e QDROUTERD_CONF="$(cat interconnect/qdrouterd-mesh.conf)" \
--memory="1g" \
-d --name interconnect \
-d --net primenet --ip 172.18.0.68 \
registry.redhat.io/amq7/amq-interconnect:latest
docker run \
-p 5672:5672 \
-e QDROUTERD_CONF="$(cat interconnect/qdrouterd-mesh.conf)" \
--memory="1g" \
-d --name interconnect \
registry.redhat.io/amq7/amq-interconnect:latest
docker stop interconnect
docker rm interconnect
docker rmi interconnect-tls:latest
cd interconnect
docker build -t interconnect-tls:latest .
cd ..
docker stop interconnect
docker rm interconnect
docker run \
-e QDROUTERD_CONF="$(cat interconnect/qdrouterd-to-cloud.conf)" \
--memory="1g" \
-d --name interconnect \
-d --net primenet --ip 172.18.0.68 \
interconnect-tls:latest
cd kafka
docker build -t kaf:0.18.0-kafka-2.5.0 .
docker run -d --name zookeeper --net primenet --ip 172.18.0.61 \
-e LOG_DIR=/tmp/logs \
-e KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/kafka/custom-config/zookeeper-prometheus-config.yaml \
kaf:0.18.0-kafka-2.5.0 \
sh -c "bin/zookeeper-server-start.sh config/zookeeper.properties"
docker run -d --name kafka --net primenet --ip 172.18.0.62 \
-e LOG_DIR=/tmp/logs \
-e KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.12.0.jar=9404:/opt/kafka/custom-config/kafka-prometheus-config.yaml \
kaf:0.18.0-kafka-2.5.0 \
sh -c "bin/kafka-server-start.sh config/server.properties --override listeners=PLAINTEXT:https://0.0.0.0:9092 --override advertised.listeners=PLAINTEXT:https://kafka:9092 --override zookeeper.connect=zookeeper:2181"
docker run -d --name zookeeper --net primenet --ip 172.18.0.61 \
-e LOG_DIR=/tmp/logs \
-e KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.16.1.jar=9404:/opt/kafka/custom-config/kafka-prometheus-config.yaml \
quay.io/strimzi/kafka:0.27.1-kafka-3.0.0 \
sh -c "bin/zookeeper-server-start.sh config/zookeeper.properties"
docker run -d --name kafdrop --net primenet --ip 172.18.0.63 \
-e KAFKA_BROKERCONNECT=kafka:9092 \
-e JVM_OPTS="-Xms32M -Xmx128M" \
-e SERVER_SERVLET_CONTEXTPATH="/" \
obsidiandynamics/kafdrop:3.28.0
Goto https://kafdrop:9000 for admin console
docker run -d --name dbz --net primenet --ip 172.18.0.64 \
-e GROUP_ID="dbz" \
-e CONFIG_STORAGE_TOPIC="dbz-config" \
-e OFFSET_STORAGE_TOPIC="dbz-offset" \
-e STATUS_STORAGE_TOPIC="dbz-status" \
-e BOOTSTRAP_SERVERS="amqstreams:9092" \
debezium/connect:1.2
Create connector
curl -X POST \
-H "Accept:application/json" \
-H "Content-Type:application/json" \
https://dbz:8083/connectors -d @- <<'EOF'
{
"name": "mysqldb-connector",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"tasks.max": "1",
"database.hostname": "mysql",
"database.port": "3306",
"database.user": "user",
"database.password": "password",
"database.server.id": "1000",
"database.server.name": "mysqldbsvr",
"database.whitelist": "mysqldb",
"database.history.kafka.bootstrap.servers": "amqstreams:9092",
"database.history.kafka.topic": "schema-changes.mysqldb"
}
}
EOF
Building image
cd amqstreams
docker build -t amqstreams:1.6.0 .
Running containers
docker run -d --name amqstreams-zk --net primenet --ip 172.18.0.65 \
-e LOG_DIR=/tmp/logs \
-e KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.14.0.redhat-00002.jar=9404:/opt/kafka/custom-config/zookeeper-prometheus-config.yaml \
amqstreams:1.6.0 \
sh -c "bin/zookeeper-server-start.sh config/zookeeper.properties"
docker run -d --name amqstreams --net primenet --ip 172.18.0.66 \
-e LOG_DIR=/tmp/logs \
-e KAFKA_OPTS=-javaagent:/opt/kafka/libs/jmx_prometheus_javaagent-0.14.0.redhat-00002.jar=9404:/opt/kafka/custom-config/kafka-prometheus-config.yaml \
amqstreams:1.6.0 \
sh -c "bin/kafka-server-start.sh config/server.properties --override listeners=PLAINTEXT:https://0.0.0.0:9092 --override advertised.listeners=PLAINTEXT:https://amqstreams:9092 --override zookeeper.connect=amqstreams-zk:2181"
docker run -d --name amqstreams-kafdrop --net primenet --ip 172.18.0.67 \
-e KAFKA_BROKERCONNECT=amqstreams:9092 \
-e JVM_OPTS="-Xms32M -Xmx128M" \
-e SERVER_SERVLET_CONTEXTPATH="/" \
obsidiandynamics/kafdrop:3.27.0
Goto https://amqstreams-kafdrop:9000 for admin console
docker stop prometheus
docker rm prometheus
docker rmi prom:latest
cd prometheus
docker build -t prom:latest .
docker run -d --name prometheus --net primenet --ip 172.18.0.70 prom:v2.24.0
cd ..
Goto https://prometheus:9090 for admin console
docker stop grafana
docker rm grafana
docker rmi graf:latest
cd grafana
docker build -t graf:latest .
docker run -d --name grafana --net primenet --ip 172.18.0.71 graf:latest
cd ..
Goto https://grafana:3000 for admin console
docker run -d --name schemareg --net primenet --ip 172.18.0.80 \
-e QUARKUS_DATASOURCE_URL=jdbc:postgresql:https://postgres:5432/db \
-e QUARKUS_DATASOURCE_USERNAME=user \
-e QUARKUS_DATASOURCE_PASSWORD=password \
apicurio/apicurio-registry-jpa:1.3.2.Final
Console https://schemareg:8080/ui/artifacts https://schemareg:8080/api
in memory
docker run -d --name schemareg --net primenet --ip 172.18.0.80 \
apicurio/apicurio-registry-mem:2.0.0.RC1
Console https://schemareg:8080/ui/artifacts https://schemareg:8080/api
docker run -d --name servicereg --net primenet --ip 172.18.0.82
-e REGISTRY_DATASOURCE_URL=jdbc:postgresql:https://postgres:5432/servicereg
-e REGISTRY_DATASOURCE_USERNAME=user
-e REGISTRY_DATASOURCE_PASSWORD=password
registry.redhat.io/integration/service-registry-sql-rhel8:2.0.0
docker run -d --name apiman --net primenet --ip 172.18.0.81 apiman/on-wildfly:2.0.0.Final
Go to https://apiman:8080/
Place the installation packages form access.redhat.com in the folder eap/.packages
You should have :
├── .packages
│ ├── fuse-eap-installer-7.6.0-1.jar
│ ├── jbeap-19359.zip
│ ├── jboss-eap-7.2.0.zip
│ └── jboss-eap-7.2.8-patch.zip
Run these commands to build and run the container
docker stop eap
docker rm eap
docker rmi eap:7.2
cd eap
docker build -t eap:7.2 .
cd ..
docker run -d --name eap --net primenet --ip 172.18.0.90 \
eap:7.2
Place the installation packages form access.redhat.com in the folder eap/.packages
You should have :
├── .packages
│ └── jboss-eap-6.4.0
Run these commands to build and run the container
docker stop eap6
docker rm eap6
docker rmi eap6:6.4
cd eap6
docker build -t eap6:6.4 .
cd ..
docker run -d --name eap6 --net primenet --ip 172.18.0.91 \
eap6:6.4
docker run -d --name nodered --net primenet --ip 172.18.0.92 nodered/node-red
docker run -d --name kura --net primenet --ip 172.18.0.93 eclipse/kura
docker pull registry.redhat.io/ubi8/openjdk-8
cd ubi-station
docker build -t ubi-station:8 .
cd ..
# docker run -it --name ubi-station --net primenet --ip 172.18.0.120 --entrypoint "/bin/bash" -v FOLDER amq-broker-7.8.0.GA-src/:/home/jboss/source registry.redhat.io/ubi8/openjdk-8
docker run -it --name ubi-station --net primenet --ip 172.18.0.120 --entrypoint "/bin/bash" -v FOLDER:/home/jboss/source ubi-station:8
docker exec -it ubi-station /bin/bash
docker stop ubi-station
docker rm ubi-station
docker rmi ubi-station:8
docker run -it --name centos --net primenet --ip 172.18.0.121 --entrypoint "/bin/bash" i386/centos:7
docker exec -it centos /bin/bash
docker run -it --name debian --net primenet --ip 172.18.0.122 --entrypoint "/bin/bash" debian:buster
docker exec -it debian /bin/bash
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate \
-DarchetypeCatalog=https://maven.repository.redhat.com/ga/io/fabric8/archetypes/archetypes-catalog/2.2.0.fuse-sb2-7_10_0-00015-redhat-00001/archetypes-catalog-2.2.0.fuse-sb2-7_10_0-00015-redhat-00001-archetype-catalog.xml \
-DarchetypeGroupId=org.jboss.fuse.fis.archetypes \
-DarchetypeArtifactId=spring-boot-camel-xml-archetype \
-DarchetypeVersion=2.2.0.fuse-sb2-7_10_0-00015-redhat-00001