diff --git a/.env b/.env
index 7c50188d..39649bcb 100644
--- a/.env
+++ b/.env
@@ -259,6 +259,10 @@ MYSQL_DATADIR=
POSTGRES_DATADIR=
ODOO_FILESTORE=
ODOO_CONFIG_CHECKSUMS_PATH=
+OPENELIS_TRUST_STORE=
+OPENELIS_KEYS=
+OPENELIS_CERTS=
+OPENELIS_LUCENE_INDEX=
#
# Public Hostnames
@@ -271,6 +275,7 @@ SUPERSET_HOSTNAME=${HOST_NAME}:8088
FHIR_ODOO_HOSTNAME=${HOST_NAME}:8083
KEYCLOAK_HOSTNAME=${HOST_NAME}:8084
ORTHANC_HOSTNAME=${HOST_NAME}:8889
+OPENELIS_HOSTNAME=${HOST_NAME}:8090
#
# Sample SSO Client Secrets used in the demo script
@@ -324,3 +329,12 @@ AWS_SECRET_ACCESS_KEY=
# Backup path for local restic repository
BACKUP_PATH=
+
+# OEG
+ADMIN_PASSWORD=superuser
+OE_DB_PASSWORD=clinlims
+
+SSL_TRUSTSTORE_PATH=/etc/openelis-global/truststore
+SSL_TRUSTSTORE_PASSWORD=tspass
+SSL_KEYSTORE_PATH=/etc/openelis-global/keystore
+SSL_KEYSTORE_PASSWORD=kspass
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e942fc4d..bc83d582 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -2,9 +2,9 @@ name: CI
on:
push:
- branches: [ "main" ]
+ branches: [ main, dev ]
pull_request:
- branches: [ "main" ]
+ branches: [ main, dev ]
release:
types: [published]
@@ -17,8 +17,8 @@ jobs:
NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }}
NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }}
- release:
- if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || github.event_name == 'release' }}
+ publish:
+ if: ${{ (github.event_name == 'push' && ( github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev' )) || github.event_name == 'release' }}
needs: validate
uses: mekomsolutions/shared-github-workflow/.github/workflows/maven-publish.yml@main
secrets:
diff --git a/bundled-docker/pom.xml b/bundled-docker/pom.xml
index 7af79b0d..92e252e8 100644
--- a/bundled-docker/pom.xml
+++ b/bundled-docker/pom.xml
@@ -4,7 +4,7 @@
com.ozonehis
bundled-docker
Bundled Docker
- 1.0.0-SNAPSHOT
+ 1.0.0-dev-SNAPSHOT
pom
@@ -20,7 +20,7 @@
UTF-8
- 1.0.0-SNAPSHOT
+ 1.0.0-dev-SNAPSHOT
true
diff --git a/docker-compose-common.yml b/docker-compose-common.yml
index 50103e37..3a867134 100644
--- a/docker-compose-common.yml
+++ b/docker-compose-common.yml
@@ -41,7 +41,7 @@ services:
restic-compose-backup.mariadb: true
postgresql:
- command: postgres -c wal_level=logical -c max_wal_senders=10 -c max_replication_slots=10 -c max_connections=200
+ command: postgres -c wal_level=logical -c max_wal_senders=10 -c max_replication_slots=10 -c max_connections=200 -c max_slot_wal_keep_size=2GB
environment:
POSTGRES_DB: postgres
POSTGRES_USER: ${POSTGRES_USER}
diff --git a/docker-compose-demo.yml b/docker-compose-demo.yml
index 259d6ea7..d53492df 100644
--- a/docker-compose-demo.yml
+++ b/docker-compose-demo.yml
@@ -16,6 +16,7 @@ services:
- KEYCLOAK_USER_CREATION_ENABLED=${ENABLE_SSO}
- KEYCLOAK_DEMO_DATA_CLIENT_ID=keycloak-admin-sa
- KEYCLOAK_DEMO_DATA_CLIENT_SECRET=${KEYCLOAK_ADMIN_SA_CLIENT_SECRET}
+ - KEYCLOAK_HEALTHCHECK_ENDPOINT=http://keycloak:9000/health/ready
restart: on-failure
networks:
ozone:
diff --git a/docker-compose-eip-odoo-openmrs-sso.yml b/docker-compose-eip-odoo-openmrs-sso.yml
new file mode 100644
index 00000000..05a7e20a
--- /dev/null
+++ b/docker-compose-eip-odoo-openmrs-sso.yml
@@ -0,0 +1,9 @@
+services:
+
+ eip-odoo-openmrs:
+ environment:
+ OAUTH_ACCESS_TOKEN_URL: ${OAUTH_ACCESS_TOKEN_URL}
+ OAUTH_ENABLED: ${ENABLE_SSO}
+ OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID}
+ OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET}
+ OAUTH_CLIENT_SCOPE: ${OAUTH_CLIENT_SCOPE}
diff --git a/docker-compose-eip-odoo-openmrs.yml b/docker-compose-eip-odoo-openmrs.yml
new file mode 100644
index 00000000..fb6eb222
--- /dev/null
+++ b/docker-compose-eip-odoo-openmrs.yml
@@ -0,0 +1,63 @@
+services:
+
+ # Odoo - OpenMRS integration service
+ eip-odoo-openmrs:
+ depends_on:
+ env-substitution:
+ condition: service_completed_successfully
+ openmrs:
+ condition: service_healthy
+ mysql:
+ condition: service_started
+ odoo:
+ condition: service_started
+ environment:
+ - EIP_DB_NAME_ODOO=${EIP_DB_NAME_ODOO}
+ - EIP_DB_USER_ODOO=${EIP_DB_USER_ODOO}
+ - EIP_DB_PASSWORD_ODOO=${EIP_DB_PASSWORD_ODOO}
+ - ODOO_DATABASE=${ODOO_DATABASE}
+ - ODOO_USER=${ODOO_USER}
+ - ODOO_PASSWORD=${ODOO_PASSWORD}
+ - ODOO_URL=http://odoo:8069
+ - OPENMRS_URL=http://openmrs:8080/openmrs
+ - EIP_PROFILE=prod
+ - MYSQL_ADMIN_USER=root
+ - MYSQL_ADMIN_USER_PASSWORD=${MYSQL_ROOT_PASSWORD}
+ - OPENMRS_DB_HOST=${OPENMRS_DB_HOST}
+ - OPENMRS_DB_PORT=${OPENMRS_DB_PORT}
+ - OPENMRS_DB_NAME=${OPENMRS_DB_NAME}
+ - OPENMRS_DB_USER=${OPENMRS_DB_USER}
+ - OPENMRS_DB_PASSWORD=${OPENMRS_DB_PASSWORD}
+ - OPENMRS_USER=${OPENMRS_USER}
+ - OPENMRS_PASSWORD=${OPENMRS_PASSWORD}
+ - EIP_FHIR_RESOURCES=Patient,ServiceRequest,MedicationRequest
+ - EIP_FHIR_SERVER_URL=http://openmrs:8080/openmrs/ws/fhir2/R4
+ - EIP_FHIR_USERNAME=${OPENMRS_USER}
+ - EIP_FHIR_PASSWORD=${OPENMRS_PASSWORD}
+ - EIP_TEST_ORDER_TYPE_UUID=${EIP_TEST_ORDER_TYPE_UUID}
+ - EIP_ODOO_FHIR_SERVER_URL=${EIP_ODOO_FHIR_SERVER_URL}
+ - EIP_ODOO_FHIR_USERNAME=${ODOO_USER}
+ - EIP_ODOO_FHIR_PASSWORD=${ODOO_PASSWORD}
+ - EIP_PRODUCT_SYNC_INITIAL_DELAY=${EIP_PRODUCT_SYNC_INITIAL_DELAY}
+ - EIP_PRODUCT_SYNC_DELAY=${EIP_PRODUCT_SYNC_DELAY}
+ image: mekomsolutions/eip-client
+ networks:
+ ozone:
+ aliases:
+ - eip-client-odoo
+ - eip-odoo-openmrs
+ restart: unless-stopped
+ volumes:
+ - "${EIP_ODOO_OPENMRS_ROUTES_PATH}:/eip-client/routes"
+ - eip-home-odoo:/eip-home
+
+ mysql:
+ environment:
+ EIP_DB_NAME_ODOO: ${EIP_DB_NAME_ODOO}
+ EIP_DB_USER_ODOO: ${EIP_DB_USER_ODOO}
+ EIP_DB_PASSWORD_ODOO: ${EIP_DB_PASSWORD_ODOO}
+ volumes:
+ - "${SQL_SCRIPTS_PATH}/mysql/eip-odoo-openmrs:/docker-entrypoint-initdb.d/db/eip-odoo-openmrs"
+
+volumes:
+ eip-home-odoo: ~
diff --git a/docker-compose-eip-openmrs-senaite-sso.yml b/docker-compose-eip-openmrs-senaite-sso.yml
new file mode 100644
index 00000000..381bb294
--- /dev/null
+++ b/docker-compose-eip-openmrs-senaite-sso.yml
@@ -0,0 +1,9 @@
+services:
+
+ eip-openmrs-senaite:
+ environment:
+ OAUTH_ACCESS_TOKEN_URL: ${OAUTH_ACCESS_TOKEN_URL}
+ OAUTH_ENABLED: ${ENABLE_SSO}
+ OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID}
+ OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET}
+ OAUTH_CLIENT_SCOPE: ${OAUTH_CLIENT_SCOPE}
diff --git a/docker-compose-eip-openmrs-senaite.yml b/docker-compose-eip-openmrs-senaite.yml
new file mode 100644
index 00000000..416e9396
--- /dev/null
+++ b/docker-compose-eip-openmrs-senaite.yml
@@ -0,0 +1,57 @@
+services:
+
+ # OpenMRS - SENAITE integration service
+ eip-openmrs-senaite:
+ depends_on:
+ env-substitution:
+ condition: service_completed_successfully
+ openmrs:
+ condition: service_healthy
+ mysql:
+ condition: service_started
+ senaite:
+ condition: service_started
+ environment:
+ - SENAITE_SERVER_URL=http://senaite:8080/senaite
+ - SENAITE_SERVER_USER=${SENAITE_ADMIN_USER}
+ - SENAITE_SERVER_PASSWORD=${SENAITE_ADMIN_PASSWORD}
+ - OPENMRS_SERVER_URL=http://openmrs:8080/openmrs
+ - OPENMRS_SERVER_USER=${OPENMRS_USER}
+ - OPENMRS_SERVER_PASSWORD=${OPENMRS_PASSWORD}
+ - OPENMRS_RESULTS_ENCOUNTER_TYPE_UUID=${RESULTS_ENCOUNTER_TYPE_UUID}
+ - EIP_PROFILE=prod
+ - EIP_DB_NAME_SENAITE=${EIP_DB_NAME_SENAITE}
+ - EIP_DB_USER_SENAITE=${EIP_DB_USER_SENAITE}
+ - EIP_DB_PASSWORD_SENAITE=${EIP_DB_PASSWORD_SENAITE}
+ - MYSQL_ADMIN_USER=root
+ - MYSQL_ADMIN_USER_PASSWORD=${MYSQL_ROOT_PASSWORD}
+ - OPENMRS_DB_HOST=${OPENMRS_DB_HOST}
+ - OPENMRS_DB_PORT=${OPENMRS_DB_PORT}
+ - OPENMRS_DB_NAME=${OPENMRS_DB_NAME}
+ - OPENMRS_DB_USER=${OPENMRS_DB_USER}
+ - OPENMRS_DB_PASSWORD=${OPENMRS_DB_PASSWORD}
+ - OPENMRS_USER=${OPENMRS_USER}
+ - OPENMRS_PASSWORD=${OPENMRS_PASSWORD}
+ - EIP_FHIR_RESOURCES=Patient,ServiceRequest
+ - EIP_FHIR_SERVER_URL=http://openmrs:8080/openmrs/ws/fhir2/R4
+ - EIP_FHIR_USERNAME=${OPENMRS_USER}
+ - EIP_FHIR_PASSWORD=${OPENMRS_PASSWORD}
+ - RUN_WITH_BAHMNI_EMR=${RUN_WITH_BAHMNI_EMR}
+ - EIP_TEST_ORDER_TYPE_UUID=${EIP_TEST_ORDER_TYPE_UUID}
+ image: mekomsolutions/eip-client
+ networks:
+ ozone:
+ aliases:
+ - eip-client-senaite
+ restart: unless-stopped
+ volumes:
+ - "${EIP_OPENMRS_SENAITE_ROUTES_PATH}:/eip-client/routes"
+ - eip-home-senaite:/eip-home
+
+ mysql:
+ environment:
+ EIP_DB_NAME_SENAITE: ${EIP_DB_NAME_SENAITE}
+ EIP_DB_USER_SENAITE: ${EIP_DB_USER_SENAITE}
+ EIP_DB_PASSWORD_SENAITE: ${EIP_DB_PASSWORD_SENAITE}
+ volumes:
+ - "${SQL_SCRIPTS_PATH}/mysql/eip-openmrs-senaite:/docker-entrypoint-initdb.d/db/eip-openmrs-senaite"
diff --git a/docker-compose-keycloak.yml b/docker-compose-keycloak.yml
index afbb6ca3..4feb1928 100644
--- a/docker-compose-keycloak.yml
+++ b/docker-compose-keycloak.yml
@@ -1,39 +1,34 @@
services:
keycloak:
- image: docker.io/bitnamilegacy/keycloak:22.0.5
+ image: quay.io/keycloak/keycloak:26.4.5
restart: unless-stopped
+ entrypoint: [ "/bin/bash", "-c" ]
+ command: >
+ "/opt/keycloak/bin/kc.sh build --health-enabled=true --metrics-enabled=true &&
+ /opt/keycloak/bin/kc.sh start --optimized --import-realm"
volumes:
- - ${KEYCLOAK_CONFIG_PATH}/realms:/keycloak-files/realm-config
- - ${KEYCLOAK_CONFIG_PATH}/themes/carbon:/opt/bitnami/keycloak/themes/carbon
+ - ${KEYCLOAK_CONFIG_PATH}/realms:/opt/keycloak/data/import
+ - ${KEYCLOAK_CONFIG_PATH}/themes/carbon:/opt/keycloak/themes/carbon
environment:
- KC_HOSTNAME_URL: ${SERVER_SCHEME}://${KEYCLOAK_HOSTNAME}
- KC_HOSTNAME_ADMIN_URL: ${SERVER_SCHEME}://${KEYCLOAK_HOSTNAME}
- PROXY_ADDRESS_FORWARDING: "true"
- KC_HTTP_ENABLED: 'true'
- KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
- KC_PROXY: reencrypt
- KC_HEALTH_ENABLED: 'true'
- KC_METRICS_ENABLED: 'true'
- KEYCLOAK_DATABASE_VENDOR: postgresql
- KEYCLOAK_DATABASE_HOST: postgresql
- KEYCLOAK_DATABASE_PORT_NUMBER: 5432
- KEYCLOAK_DATABASE_NAME: ${KEYCLOAK_DB}
- KEYCLOAK_DATABASE_USER: ${KEYCLOAK_DB_USER}
- KEYCLOAK_DATABASE_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
- KEYCLOAK_DATABASE_SCHEMA: ${KEYCLOAK_DB_SCHEMA}
- KEYCLOAK_CREATE_ADMIN_USER: "true"
- KEYCLOAK_ADMIN_USER: ${KEYCLOAK_USER}
- KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
- KEYCLOAK_EXTRA_ARGS: "
- -Dkeycloak.profile.feature.scripts=enabled
- -Dkeycloak.migration.action=import
- -Dkeycloak.migration.provider=dir
- -Dkeycloak.migration.dir=/keycloak-files/realm-config
- -Dkeycloak.migration.strategy=IGNORE_EXISTING
- --log-console-output=json"
+ KC_HOSTNAME: ${SERVER_SCHEME}://${KEYCLOAK_HOSTNAME}
+ KC_HOSTNAME_ADMIN: ${SERVER_SCHEME}://${KEYCLOAK_HOSTNAME}
+ KC_HOSTNAME_STRICT: 'false'
+ KC_HOSTNAME_BACKCHANNEL_DYNAMIC: 'true'
+ KC_HEALTH_ENABLED: true
+ KC_METRICS_ENABLED: true
+ KC_HTTP_ENABLED: true
+ KC_DB: postgres
+ KC_DB_URL: jdbc:postgresql://postgresql:5432/${KEYCLOAK_DB}
+ KC_DB_USERNAME: ${KEYCLOAK_DB_USER}
+ KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
+ KC_BOOTSTRAP_ADMIN_USERNAME: ${KEYCLOAK_USER}
+ KC_BOOTSTRAP_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
+ KC_DIR: /opt/keycloak/data/import
+ KC_OVERRIDE: 'false'
+ KC_LOG_CONSOLE_OUTPUT: json
healthcheck:
- test: ["CMD", "curl", "-f", "http://0.0.0.0:8080/health/ready"]
+ test: ["CMD-SHELL", "{ printf 'HEAD /health/ready HTTP/1.0\\r\\n\\r\\n' >&0; grep 'HTTP/1.0 200'; } 0<>/dev/tcp/localhost/9000"]
interval: 15s
timeout: 3s
retries: 5
diff --git a/docker-compose-odoo-sso.yml b/docker-compose-odoo-sso.yml
index bad0ab5c..a5a26700 100644
--- a/docker-compose-odoo-sso.yml
+++ b/docker-compose-odoo-sso.yml
@@ -2,11 +2,3 @@ services:
odoo:
environment:
- ADDONS=${ODOO_ADDONS},auth_oidc,auth_oauth_autologin
-
- eip-odoo-openmrs:
- environment:
- OAUTH_ACCESS_TOKEN_URL: ${OAUTH_ACCESS_TOKEN_URL}
- OAUTH_ENABLED: ${ENABLE_SSO}
- OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID}
- OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET}
- OAUTH_CLIENT_SCOPE: ${OAUTH_CLIENT_SCOPE}
diff --git a/docker-compose-odoo.yml b/docker-compose-odoo.yml
index 53884e66..9c477ea3 100644
--- a/docker-compose-odoo.yml
+++ b/docker-compose-odoo.yml
@@ -60,57 +60,6 @@ services:
- "${ODOO_CONFIG_FILE_PATH:-odoo-config}:/etc/properties/odoo.conf"
- "${ODOO_CONFIG_CHECKSUMS_PATH:-odoo-checksums}:/mnt/checksums"
- # Odoo - OpenMRS integration service
- eip-odoo-openmrs:
- depends_on:
- env-substitution:
- condition: service_completed_successfully
- openmrs:
- condition: service_healthy
- mysql:
- condition: service_started
- odoo:
- condition: service_started
- environment:
- - EIP_DB_NAME_ODOO=${EIP_DB_NAME_ODOO}
- - EIP_DB_USER_ODOO=${EIP_DB_USER_ODOO}
- - EIP_DB_PASSWORD_ODOO=${EIP_DB_PASSWORD_ODOO}
- - ODOO_DATABASE=${ODOO_DATABASE}
- - ODOO_USER=${ODOO_USER}
- - ODOO_PASSWORD=${ODOO_PASSWORD}
- - ODOO_URL=http://odoo:8069
- - OPENMRS_URL=http://openmrs:8080/openmrs
- - EIP_PROFILE=prod
- - MYSQL_ADMIN_USER=root
- - MYSQL_ADMIN_USER_PASSWORD=${MYSQL_ROOT_PASSWORD}
- - OPENMRS_DB_HOST=${OPENMRS_DB_HOST}
- - OPENMRS_DB_PORT=${OPENMRS_DB_PORT}
- - OPENMRS_DB_NAME=${OPENMRS_DB_NAME}
- - OPENMRS_DB_USER=${OPENMRS_DB_USER}
- - OPENMRS_DB_PASSWORD=${OPENMRS_DB_PASSWORD}
- - OPENMRS_USER=${OPENMRS_USER}
- - OPENMRS_PASSWORD=${OPENMRS_PASSWORD}
- - EIP_FHIR_RESOURCES=Patient,ServiceRequest,MedicationRequest
- - EIP_FHIR_SERVER_URL=http://openmrs:8080/openmrs/ws/fhir2/R4
- - EIP_FHIR_USERNAME=${OPENMRS_USER}
- - EIP_FHIR_PASSWORD=${OPENMRS_PASSWORD}
- - EIP_TEST_ORDER_TYPE_UUID=${EIP_TEST_ORDER_TYPE_UUID}
- - EIP_ODOO_FHIR_SERVER_URL=${EIP_ODOO_FHIR_SERVER_URL}
- - EIP_ODOO_FHIR_USERNAME=${ODOO_USER}
- - EIP_ODOO_FHIR_PASSWORD=${ODOO_PASSWORD}
- - EIP_PRODUCT_SYNC_INITIAL_DELAY=${EIP_PRODUCT_SYNC_INITIAL_DELAY}
- - EIP_PRODUCT_SYNC_DELAY=${EIP_PRODUCT_SYNC_DELAY}
- image: mekomsolutions/eip-client
- networks:
- ozone:
- aliases:
- - eip-client-odoo
- - eip-odoo-openmrs
- restart: unless-stopped
- volumes:
- - "${EIP_ODOO_OPENMRS_ROUTES_PATH}:/eip-client/routes"
- - eip-home-odoo:/eip-home
-
fhir-odoo:
depends_on:
env-substitution:
@@ -145,14 +94,6 @@ services:
volumes:
- "${SQL_SCRIPTS_PATH}/postgresql/odoo:/docker-entrypoint-initdb.d/db/odoo"
- mysql:
- environment:
- EIP_DB_NAME_ODOO: ${EIP_DB_NAME_ODOO}
- EIP_DB_USER_ODOO: ${EIP_DB_USER_ODOO}
- EIP_DB_PASSWORD_ODOO: ${EIP_DB_PASSWORD_ODOO}
- volumes:
- - "${SQL_SCRIPTS_PATH}/mysql/eip-odoo-openmrs:/docker-entrypoint-initdb.d/db/eip-odoo-openmrs"
-
env-substitution:
environment:
- ODOO_PUBLIC_URL=${SERVER_SCHEME}://${ODOO_HOSTNAME}
@@ -161,7 +102,6 @@ services:
- EXTERNAL_FHIR_API_PASSWORD=${ODOO_PASSWORD}
volumes:
- eip-home-odoo: ~
odoo-checksums: ~
odoo-config: ~
odoo-extra-addons: ~
diff --git a/docker-compose-openelis.yml b/docker-compose-openelis.yml
new file mode 100644
index 00000000..e9ecc5a9
--- /dev/null
+++ b/docker-compose-openelis.yml
@@ -0,0 +1,165 @@
+services:
+ certs:
+ container_name: oe-certs
+ image: itechuw/certgen:main
+ platform: linux/amd64
+ restart: always
+ environment:
+ - KEYSTORE_PW="kspass"
+ - TRUSTSTORE_PW="tspass"
+ networks:
+ - ozone
+ volumes:
+ - "${OPENELIS_TRUST_STORE:-key_trust-store-volume}:/etc/openelis-global"
+ - "${OPENELIS_KEYS:-keys-vol}:/etc/ssl/private/"
+ - "${OPENELIS_CERTS:-certs-vol}:/etc/ssl/certs/"
+
+ db.openelis.org:
+ container_name: openelisglobal-database
+ image: itechuw/openelis-global-2-database:develop
+ platform: linux/amd64
+ ports:
+ - "15432:5432"
+ restart: always
+ env_file:
+ - "${OPENELIS_CONFIG_PATH}/database/database.env"
+ environment:
+ - DB_PASSWORD=${OE_DB_PASSWORD}
+ - DB_SUPERUSER_PASSWORD=${ADMIN_PASSWORD}
+ volumes:
+ # preserves the database between containers
+ - "${OPENELIS_CONFIG_PATH}/database/data:/var/lib/postgresql/data"
+ networks:
+ - ozone
+ healthcheck:
+ test: [ "CMD", "pg_isready", "-q", "-d", "clinlims", "-U", "clinlims" ]
+ timeout: 45s
+ interval: 10s
+ retries: 10
+
+ oe.openelis.org:
+ container_name: openelisglobal-webapp
+ image: itechuw/openelis-global-2:develop
+ platform: linux/amd64
+ depends_on:
+ - db.openelis.org
+ - certs
+ ports:
+ - "8085:8080"
+ - "8443:8443"
+ restart: always
+ networks:
+ ozone:
+ web:
+ environment:
+ - DEFAULT_PW=adminADMIN!
+ - TZ=America/New_York
+ # Config variables loaded through Tomacat server.xml
+ - CATALINA_OPTS= -Ddatasource.url=jdbc:postgresql://db.openelis.org:5432/clinlims -Ddatasource.username=clinlims -Ddatasource.password=${OE_DB_PASSWORD} -Doe.ssl.truststorepath=${SSL_TRUSTSTORE_PATH} -Doe.ssl.truststorepassword=${SSL_TRUSTSTORE_PASSWORD} -Doe.ssl.keystorepath=${SSL_KEYSTORE_PATH} -Doe.ssl.keystorepassword=${SSL_KEYSTORE_PASSWORD}
+ # Env variables passed to the common properties file
+ - SSL_KEYSTORE_PATH
+ - SSL_KEYSTORE_PASSWORD
+ - SSL_TRUSTSTORE_PATH
+ - SSL_TRUSTSTORE_PASSWORD
+ volumes:
+ - "${OPENELIS_TRUST_STORE:-key_trust-store-volume}:/etc/openelis-global"
+ - "${OPENELIS_CONFIG_PATH}/plugins/:/var/lib/openelis-global/plugins"
+ - "${OPENELIS_CONFIG_PATH}/properties/SystemConfiguration.properties:/var/lib/openelis-global/properties/SystemConfiguration.properties"
+ - "${OPENELIS_CONFIG_PATH}/analyzer/analyzer-test-map.csv:/var/lib/openelis-global/analyzer/analyzer-test-map.csv"
+ - "${OPENELIS_CONFIG_PATH}/odoo/odoo-test-product-mapping.csv:/var/lib/openelis-global/odoo/odoo-test-product-mapping.csv"
+ - "${OPENELIS_CONFIG_PATH}/ocl:/var/lib/openelis-global/ocl"
+ - "${OPENELIS_LUCENE_INDEX:-lucene_index-vol}:/var/lib/lucene_index"
+ secrets:
+ - source: common.properties
+
+ fhir.openelis.org:
+ container_name: external-fhir-api
+ image: itechuw/openelis-global-2-fhir:develop
+ platform: linux/amd64
+ ports:
+ - "8086:8080"
+ - "8444:8443"
+ depends_on:
+ - db.openelis.org
+ - certs
+ networks:
+ ozone:
+ web:
+ restart: always
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.fhir.rule=Host(`${FHIR_OPENELIS_HOSTNAME}`)"
+ - "traefik.http.routers.fhir.entrypoints=websecure"
+ - "traefik.http.services.fhir.loadbalancer.server.port=8080"
+ environment:
+ TZ: America/New_York
+
+ JAVA_OPTS: "-Djavax.net.ssl.trustStore=${SSL_TRUSTSTORE_PATH}
+ -Djavax.net.ssl.trustStorePassword=${SSL_TRUSTSTORE_PASSWORD}
+ -Djavax.net.ssl.trustStoreType=pkcs12
+ -Djavax.net.ssl.keyStore=${SSL_KEYSTORE_PATH}
+ -Djavax.net.ssl.keyStorePassword=${SSL_KEYSTORE_PASSWORD}
+ -Djavax.net.ssl.keyStoreType=pkcs12"
+ # Config variables loaded through Tomacat server.xml
+ CATALINA_OPTS: "-Dhapi.ssl.truststorepath=${SSL_TRUSTSTORE_PATH} -Dhapi.ssl.truststorepassword=${SSL_TRUSTSTORE_PASSWORD} -Dhapi.ssl.keystorepath=${SSL_KEYSTORE_PATH} -Dhapi.ssl.keystorepassword=${SSL_KEYSTORE_PASSWORD}"
+ # Config variables loaded through Hapi application.yml
+ FHIR_DATASOURCE_URL: "jdbc:postgresql://db.openelis.org:5432/clinlims?currentSchema=clinlims"
+ FHIR_DATASOURCE_USERNAME: "clinlims"
+ FHIR_DATASOURCE_PASSWORD: ${OE_DB_PASSWORD}
+ FHIR_SERVER_ADRESS: "http://${FHIR_OPENELIS_HOSTNAME}/fhir/"
+ volumes:
+ - "${OPENELIS_TRUST_STORE:-key_trust-store-volume}:/etc/openelis-global"
+ - "./openelis/tomcat/hapi_server.xml:/opt/bitnami/tomcat/conf/server.xml"
+
+ proxy:
+ image: nginx:1.15-alpine
+ container_name: openelisglobal-proxy
+ networks:
+ ozone:
+ web:
+ volumes:
+ - "./proxy/openelis/nginx.conf:/etc/nginx/nginx.conf:ro"
+ labels:
+ traefik.enable: "true"
+ traefik.http.routers.openelis.rule: "Host(`${OPENELIS_HOSTNAME}`)"
+ traefik.http.routers.openelis.entrypoints: "websecure"
+ traefik.http.services.openelis.loadbalancer.server.port: 80
+
+ frontend.openelis.org:
+ image: itechuw/openelis-global-2-frontend:develop
+ container_name: openelisglobal-front-end
+ platform: linux/amd64
+ networks:
+ ozone:
+ web:
+ environment:
+ - CHOKIDAR_USEPOLLING=true
+ tty: true
+
+ autoheal:
+ container_name: autoheal-oe
+ image: willfarrell/autoheal:1.2.0
+ tty: true
+ restart: always
+ networks:
+ - ozone
+ environment:
+ AUTOHEAL_CONTAINER_LABEL: all
+ TZ: America/New_York
+ volumes:
+ - "/var/run/docker.sock:/var/run/docker.sock"
+
+ env-substitution:
+ environment:
+ - OPENELIS_PUBLIC_URL=https://${HOST_NAME}
+
+secrets:
+ common.properties:
+ file: "${OPENELIS_CONFIG_PATH}/properties/common.properties"
+
+volumes:
+ db-data: ~
+ key_trust-store-volume: ~
+ certs-vol: ~
+ keys-vol: ~
+ lucene_index-vol: ~
diff --git a/docker-compose-senaite-sso.yml b/docker-compose-senaite-sso.yml
index 16921d50..95a4fbdf 100644
--- a/docker-compose-senaite-sso.yml
+++ b/docker-compose-senaite-sso.yml
@@ -7,11 +7,3 @@ services:
- OAUTH_CONFIG_FILE=/data/oidc/client.json
volumes:
- ${SENAITE_OIDC_CONFIG_PATH}/:/data/oidc
-
- eip-openmrs-senaite:
- environment:
- OAUTH_ACCESS_TOKEN_URL: ${OAUTH_ACCESS_TOKEN_URL}
- OAUTH_ENABLED: ${ENABLE_SSO}
- OAUTH_CLIENT_ID: ${OAUTH_CLIENT_ID}
- OAUTH_CLIENT_SECRET: ${OAUTH_CLIENT_SECRET}
- OAUTH_CLIENT_SCOPE: ${OAUTH_CLIENT_SCOPE}
diff --git a/docker-compose-senaite.yml b/docker-compose-senaite.yml
index 0194d628..0a5455ef 100644
--- a/docker-compose-senaite.yml
+++ b/docker-compose-senaite.yml
@@ -32,62 +32,7 @@ services:
- ${SENAITE_CONFIG_PATH}:/data/importdata/senaite
- ${SENAITE_BLOBSTORAGE_PATH:-senaite-blobstorage}:/home/senaite/senaitelims/blobstorage
- # OpenMRS - SENAITE integration service
- eip-openmrs-senaite:
- depends_on:
- env-substitution:
- condition: service_completed_successfully
- openmrs:
- condition: service_healthy
- mysql:
- condition: service_started
- senaite:
- condition: service_started
- environment:
- - SENAITE_SERVER_URL=http://senaite:8080/senaite
- - SENAITE_SERVER_USER=${SENAITE_ADMIN_USER}
- - SENAITE_SERVER_PASSWORD=${SENAITE_ADMIN_PASSWORD}
- - OPENMRS_SERVER_URL=http://openmrs:8080/openmrs
- - OPENMRS_SERVER_USER=${OPENMRS_USER}
- - OPENMRS_SERVER_PASSWORD=${OPENMRS_PASSWORD}
- - OPENMRS_RESULTS_ENCOUNTER_TYPE_UUID=${RESULTS_ENCOUNTER_TYPE_UUID}
- - EIP_PROFILE=prod
- - EIP_DB_NAME_SENAITE=${EIP_DB_NAME_SENAITE}
- - EIP_DB_USER_SENAITE=${EIP_DB_USER_SENAITE}
- - EIP_DB_PASSWORD_SENAITE=${EIP_DB_PASSWORD_SENAITE}
- - MYSQL_ADMIN_USER=root
- - MYSQL_ADMIN_USER_PASSWORD=${MYSQL_ROOT_PASSWORD}
- - OPENMRS_DB_HOST=${OPENMRS_DB_HOST}
- - OPENMRS_DB_PORT=${OPENMRS_DB_PORT}
- - OPENMRS_DB_NAME=${OPENMRS_DB_NAME}
- - OPENMRS_DB_USER=${OPENMRS_DB_USER}
- - OPENMRS_DB_PASSWORD=${OPENMRS_DB_PASSWORD}
- - OPENMRS_USER=${OPENMRS_USER}
- - OPENMRS_PASSWORD=${OPENMRS_PASSWORD}
- - EIP_FHIR_RESOURCES=Patient,ServiceRequest
- - EIP_FHIR_SERVER_URL=http://openmrs:8080/openmrs/ws/fhir2/R4
- - EIP_FHIR_USERNAME=${OPENMRS_USER}
- - EIP_FHIR_PASSWORD=${OPENMRS_PASSWORD}
- - RUN_WITH_BAHMNI_EMR=${RUN_WITH_BAHMNI_EMR}
- - EIP_TEST_ORDER_TYPE_UUID=${EIP_TEST_ORDER_TYPE_UUID}
- image: mekomsolutions/eip-client
- networks:
- ozone:
- aliases:
- - eip-client-senaite
- restart: unless-stopped
- volumes:
- - "${EIP_OPENMRS_SENAITE_ROUTES_PATH}:/eip-client/routes"
- - eip-home-senaite:/eip-home
-
- mysql:
- environment:
- EIP_DB_NAME_SENAITE: ${EIP_DB_NAME_SENAITE}
- EIP_DB_USER_SENAITE: ${EIP_DB_USER_SENAITE}
- EIP_DB_PASSWORD_SENAITE: ${EIP_DB_PASSWORD_SENAITE}
- volumes:
- - "${SQL_SCRIPTS_PATH}/mysql/eip-openmrs-senaite:/docker-entrypoint-initdb.d/db/eip-openmrs-senaite"
-
+
postgresql:
environment:
SENAITE_DB_NAME: ${SENAITE_DB_NAME}
diff --git a/openelis/tomcat/hapi_server.xml b/openelis/tomcat/hapi_server.xml
new file mode 100644
index 00000000..19c35e31
--- /dev/null
+++ b/openelis/tomcat/hapi_server.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 0128908b..16747d27 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.ozonehis
ozone-docker-compose
Ozone Docker Compose
- 1.0.0-SNAPSHOT
+ 1.0.0-dev-SNAPSHOT
pom
@@ -20,7 +20,7 @@
UTF-8
- 1.0.0-SNAPSHOT
+ 1.0.0-dev-SNAPSHOT
true
diff --git a/proxy/default.conf.template b/proxy/default.conf.template
index 5e6e002a..6e47d6ad 100644
--- a/proxy/default.conf.template
+++ b/proxy/default.conf.template
@@ -342,3 +342,27 @@ server {
proxy_pass http://$keycloak;
}
}
+
+server {
+ listen 8585;
+
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $forwarded_proto;
+ proxy_set_header Host $host;
+
+ absolute_redirect off;
+
+ location / {
+ proxy_pass http://frontend.openelis.org;
+ proxy_redirect off;
+ }
+
+ location /api/ {
+ proxy_pass https://oe.openelis.org:8443/api/;
+ proxy_redirect off;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Host $server_name;
+ }
+}
diff --git a/proxy/openelis/nginx.conf b/proxy/openelis/nginx.conf
new file mode 100644
index 00000000..d5eaf3f9
--- /dev/null
+++ b/proxy/openelis/nginx.conf
@@ -0,0 +1,33 @@
+worker_processes 1;
+
+events { worker_connections 1024; }
+http {
+ server {
+ listen 80;
+ server_name _;
+ ##### Comment to run on HTTP
+ #return 301 https://$host$request_uri;
+
+ #### Uncomment to run on HTTP
+ location / {
+ proxy_pass http://frontend.openelis.org;
+ proxy_redirect off;
+
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+ location /api/ {
+ proxy_pass https://oe.openelis.org:8443/api/;
+ proxy_redirect off;
+
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Host $server_name;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ }
+ }
+
+}
diff --git a/scripts/docker-compose-files.txt b/scripts/docker-compose-files.txt
index 723d993c..f15e9259 100755
--- a/scripts/docker-compose-files.txt
+++ b/scripts/docker-compose-files.txt
@@ -7,3 +7,8 @@ docker-compose-openmrs-sso.yml
docker-compose-senaite.yml
docker-compose-senaite-sso.yml
docker-compose-backup.yml
+docker-compose-eip-odoo-openmrs.yml
+docker-compose-eip-odoo-openmrs-sso.yml
+docker-compose-eip-openmrs-senaite.yml
+docker-compose-eip-openmrs-senaite-sso.yml
+docker-compose-openelis.yml
diff --git a/scripts/utils.sh b/scripts/utils.sh
index c3ecd69b..93ffe5a6 100644
--- a/scripts/utils.sh
+++ b/scripts/utils.sh
@@ -46,6 +46,7 @@ function exportPaths () {
export ORTHANC_CONFIG_PATH=$DISTRO_PATH/configs/orthanc/initializer_config
export BAHMNI_OPENMRS_MODULES_PATH=$DISTRO_PATH/binaries/bahmniemr/modules
export BAHMNI_CONFIG_OVERRIDE_PATH=$DISTRO_PATH/configs/bahmniemr
+ export OPENELIS_CONFIG_PATH=$DISTRO_PATH/binaries/openelis/volumes
echo "→ OPENMRS_CONFIG_PATH=$OPENMRS_CONFIG_PATH"
echo "→ OPENMRS_PROPERTIES_PATH=$OPENMRS_PROPERTIES_PATH"
@@ -70,6 +71,7 @@ function exportPaths () {
echo "→ ORTHANC_CONFIG_PATH=$ORTHANC_CONFIG_PATH"
echo "→ BAHMNI_OPENMRS_MODULES_PATH=$BAHMNI_OPENMRS_MODULES_PATH"
echo "→ BAHMNI_CONFIG_OVERRIDE_PATH=$BAHMNI_CONFIG_OVERRIDE_PATH"
+ echo "→ OPENELIS_CONFIG_PATH=$OPENELIS_CONFIG_PATH"
}
function setDockerComposeCLIOptions () {
@@ -156,13 +158,15 @@ function setTraefikHostnames {
echo "$INFO Exporting Traefik hostnames..."
export USE_HTTPS="true"
- export O3_HOSTNAME=emr-"${IP_WITH_DASHES}.traefik.me"
- export ODOO_HOSTNAME=erp-"${IP_WITH_DASHES}.traefik.me"
- export SENAITE_HOSTNAME=lims-"${IP_WITH_DASHES}.traefik.me"
- export ERPNEXT_HOSTNAME=erpnext-"${IP_WITH_DASHES}.traefik.me"
- export KEYCLOAK_HOSTNAME=auth-"${IP_WITH_DASHES}.traefik.me"
- export FHIR_ODOO_HOSTNAME=fhir-erp-"${IP_WITH_DASHES}.traefik.me"
- export ORTHANC_HOSTNAME=pacs-"${IP_WITH_DASHES}.traefik.me"
+ export O3_HOSTNAME="openmrs.ozonelocal.com"
+ export ODOO_HOSTNAME="erp.ozonelocal.com"
+ export SENAITE_HOSTNAME="lims.ozonelocal.com"
+ export ERPNEXT_HOSTNAME="erpnext.ozonelocal.com"
+ export KEYCLOAK_HOSTNAME="auth.ozonelocal.com"
+ export FHIR_ODOO_HOSTNAME="fhir-erp.ozonelocal.com"
+ export ORTHANC_HOSTNAME="pacs.ozonelocal.com"
+ export OPENELIS_HOSTNAME="openelis.ozonelocal.com"
+ export FHIR_OPENELIS_HOSTNAME="fhir-openelis.ozonelocal.com"
echo "→ O3_HOSTNAME=$O3_HOSTNAME"
echo "→ ODOO_HOSTNAME=$ODOO_HOSTNAME"
echo "→ SENAITE_HOSTNAME=$SENAITE_HOSTNAME"
@@ -170,6 +174,8 @@ function setTraefikHostnames {
echo "→ KEYCLOAK_HOSTNAME=$KEYCLOAK_HOSTNAME"
echo "→ FHIR_ODOO_HOSTNAME=$FHIR_ODOO_HOSTNAME"
echo "→ ORTHANC_HOSTNAME=$ORTHANC_HOSTNAME"
+ echo "→ OPENELIS_HOSTNAME=$OPENELIS_HOSTNAME"
+ echo "→ FHIR_OPENELIS_HOSTNAME=$FHIR_OPENELIS_HOSTNAME"
}