OpenELIS Global
★ 286About
Community Ratings
No ratings yetNew this week
Read recap →Features
- automated work plans
- clinical analyzer result import
- pathology workflows
- cytology workflows
- standards-based interoperability
- lab order receiving
- result sending
- offline installer
Details
- Last Updated
- Nov 14, 2026
- Created
- Jan 15, 2019
- Install Methods
- dockerdocker-composesource
- Requirements
- DockerDocker composeJava 21
- Default Port
- 8080web UI
- Runtime / Stack
- JavaDocker
- Privacy & Independence
- No Cloud RequiredOffline Capable
- User Model
- Multi-User
- Deployment
Deployment: Docker Compose ✓6 Containers — moderate hosting footprintRuns as 6 containers
Run OpenELIS Global yourself
Pick how much you want to manage.
netcupBest match
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
Hetzner
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
DigitalOcean
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
1 more way to host
Some links earn us a commission. netcup pays us one and is our preferred VPS host.
Is this your project? Sponsor a listing
Run OpenELIS Global with Docker Compose
Compose file from the OpenELIS Global project repository.
6 services · 5 unclassified (certgen, openelis-global-2-database, openelis-global-2-fhir, openelis-global-2-frontend, openelis-global-2-proxy)
no resource limits declared
needs persistent storage (14 volumes)
docker-compose.yml · @ 1d32bf4 · scanned Nov 3, 2026
version: '3.3'
services:
certs:
container_name: oe-certs
image: itechuw/certgen:main
platform: linux/amd64
restart: "no"
environment:
- KEYSTORE_PW="kspass"
- TRUSTSTORE_PW="tspass"
networks:
- default
volumes:
- key_trust-store-volume:/etc/openelis-global
- keys-vol:/etc/ssl/private/
- 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:
- ./volume/database/database.env
environment:
- DB_PASSWORD=${OE_DB_PASSWORD:-clinlims}
- DB_SUPERUSER_PASSWORD=${ADMIN_PASSWORD:-superuser}
volumes:
# preserves the database between containers
- db-data:/var/lib/postgresql/data
networks:
- default
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:
- "8080:8080"
- "8443:8443"
restart: always
networks:
default:
ipv4_address: 172.20.1.121
environment:
- DEFAULT_PW=adminADMIN!
- TZ=${TZ:-UTC}
# context.xml doesn't seem to be able to pick up environment variables directly, so we are passing them in as CATALINA_OPTS
- CATALINA_OPTS=-Ddatasource.url=jdbc:postgresql://db.openelis.org:5432/clinlims -Ddatasource.username=clinlims -Ddatasource.password=${OE_DB_PASSWORD:-clinlims} -Doe.ssl.truststorepath=${SSL_TRUSTSTORE_PATH:-/etc/openelis-global/truststore} -Doe.ssl.truststorepassword=${SSL_TRUSTSTORE_PASSWORD:-tspass} -Doe.ssl.keystorepath=${SSL_KEYSTORE_PATH:-/etc/openelis-global/keystore} -Doe.ssl.keystorepassword=${SSL_KEYSTORE_PASSWORD:-kspass}
volumes:
- key_trust-store-volume:/etc/openelis-global
- ./volume/lucene:/var/lib/lucene_index
- ./volume/analyzer/analyzer-test-map.csv:/var/lib/openelis-global/analyzer/analyzer-test-map.csv
- ./volume/properties/SystemConfiguration.properties:/var/lib/openelis-global/properties/SystemConfiguration.properties
- ./volume/odoo/odoo-test-product-mapping.csv:/var/lib/openelis-global/odoo/odoo-test-product-mapping.csv
- ./configuration:/var/lib/openelis-global/configuration
#Runing OpenELIS with the locally compiled war file
#- ./target/OpenELIS-Global.war:/usr/local/tomcat/webapps/OpenELIS-Global.war
secrets:
- source: common.properties
fhir.openelis.org:
container_name: external-fhir-api
image: itechuw/openelis-global-2-fhir:develop
platform: linux/amd64
depends_on:
- db.openelis.org
- certs
ports:
- "8081:8080"
- "8444:8443"
networks:
- default
restart: always
environment:
TZ: ${TZ:-UTC}
JAVA_OPTS: "-Djavax.net.ssl.trustStore=${SSL_TRUSTSTORE_PATH:-/etc/openelis-global/truststore}
-Djavax.net.ssl.trustStorePassword=${SSL_TRUSTSTORE_PASSWORD:-tspass}
-Djavax.net.ssl.trustStoreType=pkcs12
-Djavax.net.ssl.keyStore=${SSL_KEYSTORE_PATH:-/etc/openelis-global/keystore}
-Djavax.net.ssl.keyStorePassword=${SSL_KEYSTORE_PASSWORD:-kspass}
-Djavax.net.ssl.keyStoreType=pkcs12"
CATALINA_OPTS: "-Dhapi.ssl.truststorepath=${SSL_TRUSTSTORE_PATH:-/etc/openelis-global/truststore} -Dhapi.ssl.truststorepassword=${SSL_TRUSTSTORE_PASSWORD:-tspass} -Dhapi.ssl.keystorepath=${SSL_KEYSTORE_PATH:-/etc/openelis-global/keystore} -Dhapi.ssl.keystorepassword=${SSL_KEYSTORE_PASSWORD:-kspass}"
FHIR_DATASOURCE_URL : "jdbc:postgresql://db.openelis.org:5432/clinlims?currentSchema=clinlims"
FHIR_DATASOURCE_USERNAME: "clinlims"
FHIR_DATASOURCE_PASSWORD: ${OE_DB_PASSWORD:-clinlims}
FHIR_SERVER_ADRESS: "http://fhir.openelis.org:8080/fhir/"
volumes:
- key_trust-store-volume:/etc/openelis-global
frontend.openelis.org:
image: itechuw/openelis-global-2-frontend:develop
container_name: openelisglobal-front-end
platform: linux/amd64
networks:
- default
environment:
- CHOKIDAR_USEPOLLING=true
tty: true
proxy:
image: itechuw/openelis-global-2-proxy:develop
container_name: openelisglobal-proxy
platform: linux/amd64
ports:
- 80:80
- 443:443
volumes:
- certs-vol:/etc/nginx/certs/
- keys-vol:/etc/nginx/keys/
- ./volume/nginx/nginx-prod.conf:/etc/nginx/nginx.conf:ro
networks:
- default
restart: unless-stopped
depends_on:
- certs
secrets:
common.properties:
file: ./volume/properties/common.properties
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.20.1.0/24
volumes:
db-data:
key_trust-store-volume:
certs-vol:
keys-vol:
This file may be out of date. Check the OpenELIS Global documentation for current setup steps.
Track your self-hosted stack
Bookmark software to try, rate tools you've used, and keep your collection in one place.