VannahHealthCloud

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

OptionBest ForComplexity
CapRover (Cloud)Small–Medium facilitiesLow
Docker ComposeDevelopment / Single serverLow
KubernetesEnterprise / Multi-siteHigh
HybridOn-prem DICOM + Cloud ArchiveMedium

Prerequisites

System Requirements

ComponentMinimumRecommended
CPU4 cores8+ cores
RAM8 GB16+ GB
Storage100 GB SSD500 GB+ NVMe
Network100 Mbps1 Gbps
OSUbuntu 22.04 LTSUbuntu 24.04 LTS

Software Requirements

  • Docker 24+
  • Docker Compose v2
  • Node.js 22+ (for development)
  • PostgreSQL 15+
  • SSL Certificate (Let's Encrypt or custom)

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 | sh

Step 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 IP

Step 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 repository

Step 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 certificates

Docker 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 -f

Kubernetes 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.yaml

Custom 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: 1Ti

Post-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

IssueSolution
DICOM connection refusedCheck port 4242 is open, verify AE title
MedDream blank screenVerify Orthanc URL in MedDream config
SSL certificate errorRun caprover renewcert or check DNS
Database connection failedVerify DATABASE_URL and service networking
Images not appearingCheck Orthanc logs for C-STORE errors
Slow image loadingVerify 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

On this page