Deployment
Docker Compose (development / single-server)
docker-compose.yaml
version: "3.9"
services:
jambridge:
image: ghcr.io/akhester-technologies/jambridge:1.0.0
ports:
- "8443:8443"
- "2575:2575"
- "2576:2576"
- "2577:2577"
- "2578:2578"
- "2579:2579"
- "2580:2580"
- "2581:2581"
- "2582:2582"
volumes:
- ./BridgeConfig.yaml:/app/BridgeConfig.yaml
environment:
BRIDGE_DB_PASSWORD: ${BRIDGE_DB_PASSWORD}
depends_on: [postgres, hapi, jammpi, jamconsent]
hapi:
image: hapiproject/hapi:v7.4.0
ports: ["8080:8080"]
jammpi:
image: ghcr.io/akhester-technologies/jammpi:1.0.0
ports: ["8081:8081"]
jamconsent:
image: ghcr.io/akhester-technologies/aj-consent:1.0.0
ports: ["8082:8082"]
postgres:
image: postgres:16
environment:
POSTGRES_DB: jambridge
POSTGRES_PASSWORD: ${BRIDGE_DB_PASSWORD}
Kubernetes (production)
helm repo add jambridge https://charts.jambridge.io
helm install jambridge jambridge/jambridge \
--namespace jambridge \
--create-namespace \
--set bridge.facilityCode=BRANCH-01 \
--set bridge.hapiFhirUrl=http://hapi:8080/fhir \
--set bridge.consent.enabled=true \
--set bridge.consent.failClosed=true \
--set-file bridgeConfig=./BridgeConfig.yaml
The Helm chart includes:
- JamBridge Deployment with HPA (min 2, max 10 replicas)
- MLLP Service (LoadBalancer or NodePort)
- HTTPS Ingress with cert-manager annotation
- HorizontalPodAutoscaler on CPU + transaction queue depth
- PodDisruptionBudget (minAvailable: 1)
Health checks
# Liveness
GET /actuator/health/liveness
# Readiness (checks HAPI + JamMPI + Consent connectivity)
GET /actuator/health/readiness
# Full health details (admin token required)
GET /actuator/health