Deployment Guide
Step-by-step instructions for deploying VannahHealthCloud in cloud and on-premise environments.
Deployment Overview
VannahHealthCloud can be deployed in multiple configurations depending on your scale, infrastructure, and compliance requirements.
Deployment Options
| Option | Best For | Complexity |
|---|---|---|
| CapRover (Cloud) | Small–Medium facilities | Low |
| Docker Compose | Development / Single server | Low |
| Kubernetes | Enterprise / Multi-site | High |
| Hybrid | On-prem DICOM + Cloud Archive | Medium |
Prerequisites
System Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 4 cores | 8+ cores |
| RAM | 8 GB | 16+ GB |
| Storage | 100 GB SSD | 500 GB+ NVMe |
| Network | 100 Mbps | 1 Gbps |
| OS | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
Software Requirements
- Docker 24+
- Docker Compose v2
- Node.js 22+ (for development)
- PostgreSQL 15+
- SSL Certificate (Let's Encrypt or custom)
CapRover Deployment (Recommended)
Step 1: Provision Server
# Create a cloud server (Ubuntu 22.04+)
# Recommended: 8 vCPU, 16 GB RAM, 200 GB SSD
# Providers: DigitalOcean, Hetzner, AWS, Azure
# Update system
sudo apt update && sudo apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | shStep 2: Install CapRover
# Install CapRover
docker run -p 80:80 -p 443:443 -p 3000:3000 \
-e ACCEPTED_TERMS=true \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /captain:/captain \
caprover/caprover
# Set up DNS
# Point *.app.yourdomain.com to your server IP
# Point yourdomain.com to your server IPStep 3: Configure CapRover
# Install CapRover CLI
npm install -g caprover
# Login to your instance
caprover login
# Enter: https://captain.app.yourdomain.com
# Default password: captain42 (change immediately!)Step 4: Deploy Services
# Deploy PostgreSQL (One-Click App)
# → CapRover Dashboard → Apps → One-Click Apps → PostgreSQL
# Deploy Orthanc
caprover deploy -a vhc-orthanc -i orthancteam/orthanc:latest
# Deploy MedDream
caprover deploy -a vhc-meddream -i vhc/meddream:latest
# Deploy Web Application
caprover deploy -a vhc-web
# Upload captain-definition file or connect Git repositoryStep 5: Configure Environment Variables
Set these in each CapRover app's environment configuration:
# vhc-web
DATABASE_URL=postgresql://vhc:password@srv-captain--vhc-db:5432/vannahcloud
ORTHANC_URL=http://srv-captain--vhc-orthanc:8042
MEDDREAM_URL=https://viewer.yourdomain.com
NEXTAUTH_SECRET=<generated-secret>
NEXTAUTH_URL=https://dev.teledokta.co.tz
# vhc-orthanc
ORTHANC__POSTGRESQL__HOST=srv-captain--vhc-db
ORTHANC__POSTGRESQL__DATABASE=orthanc
ORTHANC__REGISTERED_USERS={"admin": "password"}Step 6: Enable SSL
# In CapRover Dashboard:
# 1. Go to each app → HTTP Settings
# 2. Enable HTTPS
# 3. Force HTTPS redirect
# CapRover auto-provisions Let's Encrypt certificatesDocker Compose Deployment
For development or single-server setups:
# Clone the repository
git clone https://github.com/vannahadvisory/vhc-platform.git
cd vhc-platform
# Copy environment file
cp .env.example .env
# Edit .env with your configuration
# Start all services
docker compose up -d
# Check status
docker compose ps
# View logs
docker compose logs -fKubernetes Deployment
For enterprise-scale, multi-site deployments:
Helm Chart
# Add VHC Helm repository
helm repo add vhc https://charts.vannahadvisory.com
helm repo update
# Install VannahHealthCloud
helm install vannahcloud vhc/vannahcloud \
--namespace vhc \
--create-namespace \
--set global.domain=yourdomain.com \
--set postgresql.auth.password=<password> \
--set orthanc.dicom.aet=VANNAHCLOUD \
--values custom-values.yamlCustom Values
# custom-values.yaml
global:
domain: yourdomain.com
storageClass: gp3
web:
replicas: 2
resources:
requests:
cpu: 500m
memory: 512Mi
orthanc:
replicas: 1
storage: 500Gi
dicom:
aet: VANNAHCLOUD
port: 4242
postgresql:
primary:
persistence:
size: 100Gi
readReplicas:
replicaCount: 1
minio:
replicas: 4
persistence:
size: 1TiPost-Deployment Checklist
- All services are running and healthy
- SSL certificates are provisioned and valid
- DICOM port (4242) is accessible from modality network
- Web application loads at configured domain
- MedDream viewer opens studies correctly
- Database backups are configured and tested
- Monitoring and alerting are active
- Audit logging is enabled
- Admin password has been changed from default
- Firewall rules are configured
- Test DICOM C-ECHO from a modality
- Test image send (C-STORE) from a modality
- Test image retrieval via MedDream viewer
- Verify HL7/FHIR integration (if applicable)
Troubleshooting
Common Issues
| Issue | Solution |
|---|---|
| DICOM connection refused | Check port 4242 is open, verify AE title |
| MedDream blank screen | Verify Orthanc URL in MedDream config |
| SSL certificate error | Run caprover renewcert or check DNS |
| Database connection failed | Verify DATABASE_URL and service networking |
| Images not appearing | Check Orthanc logs for C-STORE errors |
| Slow image loading | Verify network bandwidth and storage IOPS |
Useful Commands
# Check Orthanc connectivity
curl http://localhost:8042/system
# Test DICOM C-ECHO
echoscu localhost 4242 -aet TESTSCU -aec VANNAHCLOUD
# Check database
psql $DATABASE_URL -c "SELECT count(*) FROM studies;"
# View container logs
docker logs vhc-orthanc --tail 100 -f
# Check disk usage
df -h /var/lib/docker