diff --git a/README.md b/README.md
index 1931f04..32dd610 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ See [docker-compose.yml](https://github.com/Reposoft/openidc-keycloak-test/blob/
Might be run like this:
```
compose="docker-compose -f build-contracts/docker-compose.yml"
-$compose up --build -d postgres keycloak openidc
+$compose up --build -d mysql keycloak openidc
$compose up --build keycloak-setup #TODO
$compose up --build -d testclient
$compose logs -f
diff --git a/build-contracts/docker-compose.yml b/build-contracts/docker-compose.yml
index 39e275d..ded48c1 100644
--- a/build-contracts/docker-compose.yml
+++ b/build-contracts/docker-compose.yml
@@ -1,31 +1,38 @@
version: '2'
services:
- postgres:
- image: postgres:9.6
+ mysql:
+ image: mariadb:10.1
expose:
- - "5432"
+ - "3306"
environment:
- POSTGRES_USER: keycloak
- POSTGRES_PASSWORD: keycloak
+ MYSQL_ROOT_PASSWORD: openidctest
+ MYSQL_DATABASE: keycloak
+ MYSQL_USER: keycloak
+ MYSQL_PASSWORD: keycloak
+ # Causes: Change Set META-INF/jpa-changelog-1.0.0.Final.xml::1.0.0.Final::sthorger@redhat.com failed. Error: Specified key was too long; max key length is 767 bytes [Failed SQL: ALTER TABLE keycloak.REALM_SOCIAL_CONFIG ADD PRIMARY KEY (REALM_ID, NAME)]: liquibase.exception.DatabaseException: Specified key was too long; max key length is 767 bytes [Failed SQL: ALTER TABLE keycloak.REALM_SOCIAL_CONFIG ADD PRIMARY KEY (REALM_ID, NAME)]
+ #command:
+ # - --character-set-server=utf8mb4
+ # - --collation-server=utf8mb4_unicode_ci
keycloak:
- image: jboss/keycloak-postgres:2.3.0.Final
+ build:
+ context: ../keycloak-ha-mysql
+ image: solsson/keycloak-ha-mysql
links:
- - postgres
+ - mysql
environment:
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: openidctest
- POSTGRES_USER: keycloak
- POSTGRES_PASSWORD: keycloak
+ MYSQL_DATABASE: keycloak
+ MYSQL_USER: keycloak
+ MYSQL_PASSWORD: keycloak
# Workaround for container using legacy Docker links, resulting in
- # "WFLYCTL0211: Cannot resolve expression 'jdbc:postgresql://${env.POSTGRES_PORT_5432_TCP_ADDR}...")n
- POSTGRES_PORT_5432_TCP_ADDR: postgres
+ # "WFLYCTL0211: Cannot resolve expression 'jdbc:mysql://${env.MYSQL_PORT_3306_TCP_ADDR}:${env.MYSQL_PORT_3306_TCP_PORT}
+ MYSQL_PORT_3306_TCP_ADDR: mysql
+ MYSQL_PORT_3306_TCP_PORT: "3306"
expose:
- "8080"
- - "9090"
- # For local browser; you also need "keycloak" in your hosts file
- ports:
- - "8080:8080"
- - "9990:9990"
+ - "7600"
+ - "57600"
# Uncomment the following and docker-compose up keycloak again to export realms
volumes:
- ./keycloak-setup/export:/export
@@ -34,6 +41,31 @@ services:
# - -Dkeycloak.migration.action=export
# - -Dkeycloak.migration.provider=dir
# - -Dkeycloak.migration.dir=/export
+ keycloak2:
+ build:
+ context: ../keycloak-ha-mysql
+ image: solsson/keycloak-ha-mysql
+ links:
+ - mysql
+ environment:
+ KEYCLOAK_USER: admin
+ KEYCLOAK_PASSWORD: openidctest
+ MYSQL_DATABASE: keycloak
+ MYSQL_USER: keycloak
+ MYSQL_PASSWORD: keycloak
+ MYSQL_PORT_3306_TCP_ADDR: mysql
+ MYSQL_PORT_3306_TCP_PORT: "3306"
+ expose:
+ - "8080"
+ - "7600"
+ - "57600"
+ keycloak-ha:
+ build: ./ha
+ links:
+ - keycloak
+ # For local browser; you also need "keycloak" in your hosts file
+ ports:
+ - "8080:80"
httpd-openidc:
build: ../httpd-openidc
image: localhost:5000/reposoft/httpd-openidc
@@ -44,7 +76,7 @@ services:
build: ./openidc
depends_on:
- httpd-openidc
- - keycloak
+ - keycloak-ha
# Don't allow direct communication with keycloak; depends on hosting scenario
#links:
# - keycloak
diff --git a/build-contracts/ha/Dockerfile b/build-contracts/ha/Dockerfile
new file mode 100644
index 0000000..cbca07f
--- /dev/null
+++ b/build-contracts/ha/Dockerfile
@@ -0,0 +1,11 @@
+FROM httpd:2.4
+
+RUN sed -i 's|#LoadModule proxy_module|LoadModule proxy_module|' conf/httpd.conf \
+ && sed -i 's|#LoadModule proxy_http_module|LoadModule proxy_http_module|' conf/httpd.conf \
+ && sed -i 's|#LoadModule proxy_balancer_module|LoadModule proxy_balancer_module|' conf/httpd.conf \
+ && sed -i 's|#LoadModule slotmem_shm_module|LoadModule slotmem_shm_module|' conf/httpd.conf \
+ && sed -i 's|#LoadModule lbmethod_byrequests_module|LoadModule lbmethod_byrequests_module|' conf/httpd.conf
+
+RUN echo "Include conf/proxy.conf" >> conf/httpd.conf
+
+COPY proxy.conf conf/
diff --git a/build-contracts/ha/proxy.conf b/build-contracts/ha/proxy.conf
new file mode 100644
index 0000000..f981a77
--- /dev/null
+++ b/build-contracts/ha/proxy.conf
@@ -0,0 +1,18 @@
+
+#LogLevel debug
+
+# Getting rid of:
+# [proxy_http:debug] [pid 8:tid 139765064062720] mod_proxy_http.c(1894): [client 172.27.0.1:41148] AH01113: HTTP: declining URL balancer://keycloakinform/
+# [proxy:warn] [pid 8:tid 139765064062720] [client 172.27.0.1:41148] AH01144: No protocol handler was valid for the URL /inform. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
+# 172.27.0.1 - - [07/Nov/2016:10:08:17 +0000] "POST /inform HTTP/1.1" 500 528
+#
+# Require all denied
+#
+
+
+ BalancerMember "http://keycloak:8080"
+ BalancerMember "http://keycloak2:8080"
+ ProxySet lbmethod=byrequests
+
+ProxyPass "/" "balancer://keycloak/"
+#ProxyPassReverse "/" "balancer://keycloak/"
diff --git a/keycloak-ha-mysql/Dockerfile b/keycloak-ha-mysql/Dockerfile
new file mode 100644
index 0000000..4d222d4
--- /dev/null
+++ b/keycloak-ha-mysql/Dockerfile
@@ -0,0 +1,7 @@
+FROM jboss/keycloak-mysql:2.3.0.Final
+
+CMD ["-b", "0.0.0.0", "--server-config", "standalone-ha.xml"]
+
+RUN rm keycloak/standalone/configuration/standalone.xml
+
+ADD standalone-ha.xml keycloak/standalone/configuration/standalone-ha.xml
diff --git a/keycloak-ha-mysql/standalone-ha.xml b/keycloak-ha-mysql/standalone-ha.xml
new file mode 100644
index 0000000..a6848b9
--- /dev/null
+++ b/keycloak-ha-mysql/standalone-ha.xml
@@ -0,0 +1,544 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
+ h2
+
+ sa
+ sa
+
+
+
+ jdbc:mysql://${env.MYSQL_PORT_3306_TCP_ADDR}:${env.MYSQL_PORT_3306_TCP_PORT}/${env.MYSQL_DATABASE:keycloak}
+ mysql
+
+ ${env.MYSQL_USERNAME:keycloak}
+ ${env.MYSQL_PASSWORD:password}
+
+
+ SELECT 1
+ true
+ 60000
+
+
+ IdleConnections
+
+
+
+
+ org.h2.jdbcx.JdbcDataSource
+
+
+ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
+
+
+
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 30000
+
+
+ 1.2.3.4[7600],1.2.3.5[7600]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ auth
+
+ classpath:${jboss.home.dir}/providers/*
+
+ master
+ 900
+
+ 2592000
+ true
+ true
+ ${jboss.home.dir}/themes
+
+
+ jpa
+
+
+
+
+
+
+
+ jpa
+
+
+ jpa
+
+
+ jpa
+
+
+
+
+
+ jpa
+
+
+ jpa
+
+
+ basic
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ default
+
+
+
+
+
+
+
+ ${keycloak.jta.lookup.provider:jboss}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+