Skip to main content

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