Deployment
This guide covers the Docker Compose deployment of Med-SEAL Suite in detail, including environment configuration, volume management, networking, and production considerations.
Docker Compose Overview
Med-SEAL Suite is deployed as a single docker-compose.yml defining all services. The stack consists of:
Service |
Image |
Port |
|---|---|---|
|
|
8081 (HTTP), 8080 (HTTPS) |
|
|
3307 |
|
|
8103 |
|
|
3000 |
|
|
5433 |
|
|
6380 |
|
Custom build |
4003 |
|
Custom build |
3001 |
|
|
5434 |
Starting the Stack
# Start all services in detached mode
docker compose up -d
# Start specific services only
docker compose up -d openemr medplum-server
# Rebuild custom images (ai-service, ai-frontend)
docker compose up -d --build
Health Checks
All services include Docker health checks. Monitor them with:
docker compose ps
Service |
Health Check |
Start Period |
|---|---|---|
OpenEMR |
HTTP GET |
60s |
Medplum Server |
HTTP GET |
120s |
AI Service |
HTTP GET |
15s |
MariaDB |
|
30s |
PostgreSQL |
|
10s |
Redis |
|
- |
Environment Variables
AI Service
Variable |
Description |
Default |
|---|---|---|
|
LLM inference endpoint |
|
|
Model identifier |
|
|
Generation temperature |
|
|
Max response tokens |
|
|
Service port |
|
|
SSO database connection string |
|
|
Internal Medplum URL |
|
|
Orthanc internal URL |
|
|
OpenEMR database host |
|
OpenEMR
Variable |
Description |
Default |
|---|---|---|
|
Database host |
|
|
Root password |
|
|
Admin username |
|
|
Admin password |
|
Volumes
Data is persisted across restarts via Docker named volumes:
Volume |
Service |
Mount Point |
|---|---|---|
|
Orthanc |
|
|
Medplum DB |
|
|
Medplum Server |
Binary storage |
|
OpenEMR DB |
|
|
OpenEMR |
|
|
OpenEMR |
|
|
AI Service |
|
|
SSO DB |
|
Networking
All services share the medseal-net Docker bridge network. Services reference each other by container name:
openemr-db → medseal-openemr-db
medplum-server → medseal-medplum-server
sso-db → medseal-sso-db
Stopping & Resetting
# Stop all services (data preserved)
docker compose down
# Stop and delete all volumes (full reset)
docker compose down -v
# Remove unused images
docker image prune
Cloud Deployment (GCP)
For cloud deployment using Google Cloud Run and GKE, see the dedicated guide:
GCP Deployment Guide — Cloud Run serverless deployment, GKE cluster management, environment configuration
Current Live Deployments
Platform |
URL |
Region |
|---|---|---|
Cloud Run (AI Agent) |
|
Singapore |
GKE (Full Stack) |
|
Singapore |
Production Considerations
Warning
The default configuration is for development only. For production deployments:
Secrets management - use Docker secrets or environment-specific
.envfiles, never hardcoded passwordsHTTPS - terminate TLS at a reverse proxy (nginx/Caddy/Traefik) in front of all services
Resource limits - set
deploy.resources.limitsfor CPU and memory per serviceBackup - implement automated backup for all database volumes
Monitoring - add Prometheus + Grafana for service health and performance metrics
Logging - centralise logs via ELK/Loki stack
Scaling - consider Kubernetes for horizontal scaling of AI Service and Medplum