Skip to content

Deployment

Virtufin deploys via three standalone repositories. This doc describes what each repo provides and how to use it. Operators clone each repo at any path and reference it by clone URL.

Repo Use for
virtufin/deploy-local Native local (Dapr sidecars + dotnet run; no Docker for services)
virtufin/docker-compose Docker Compose dev/prod (all services in containers)
virtufin/helm Kubernetes Helm chart

Local Development (native Dapr)

The virtufin/deploy-local repo runs Virtufin backend services natively via dapr run. Dapr manages its own sidecars; no Docker is required for the services themselves.

git clone https://git.haenerconsulting.com/virtufin/deploy-local.git
cd deploy-local
./scripts/deploy_backend.sh

Prerequisites

  • Dapr CLI initialized (dapr init)
  • .NET SDK (10.0+)
  • Redis running on localhost:6379 (for Dapr state store and pub/sub)

Services

Service Deploy Script App ID gRPC HTTP
API Gateway scripts/deploy_backend.sh apigateway 5002 5001
WorkManager scripts/deploy_workmanager.sh workmanager 25002 25001
WebSocketManager scripts/deploy_websocketmanager.sh websocketmanager 15002 15001

Per-service scripts

./scripts/deploy_backend.sh           # all three services
./scripts/deploy_workmanager.sh       # just WorkManager
./scripts/deploy_websocketmanager.sh  # just WebSocketManager
./scripts/undeploy_backend.sh         # stop all three

Host Ports (native)

Service HTTP (host) gRPC (host)
API Gateway 5001 5002
WebSocketManager 15001 15002
WorkManager 25001 25002

Point your examples at:

export VIRTUFIN_API_URL=localhost:5002
export VIRTUFIN_WSM_URL=localhost:15002
export VIRTUFIN_WM_URL=localhost:25002

Flushing the state store

A flush_redis.sh helper lives in the upstream virtufin/deploy-local/scripts/. Run it before any example to ensure a clean slate:

bash deploy-local/scripts/flush_redis.sh

A self-contained copy is also in this repo at scripts/flush_redis.sh.

Docker Compose

The virtufin/docker-compose repo runs the full stack in containers.

git clone https://git.haenerconsulting.com/virtufin/docker-compose.git
cd docker-compose
./scripts/deploy_all.dev.sh    # builds from source
./scripts/deploy_all.prod.sh   # uses pre-built images from docker.haenerconsulting.com

The compose stack includes:

  • Redis (state store + pub/sub)
  • Dapr placement service
  • Zipkin (distributed tracing)
  • API Gateway + Dapr sidecar
  • WebSocketManager + Dapr sidecar
  • WorkManager + Dapr sidecar

Host Ports (Docker Compose)

Service HTTP (host) gRPC (host)
API Gateway 5001 5002
WebSocketManager 15001 15002
WorkManager 25001 25002

Point your examples at:

export VIRTUFIN_API_URL=localhost:5002
export VIRTUFIN_WSM_URL=localhost:15002
export VIRTUFIN_WM_URL=localhost:25002

All services use pre-built Docker images pulled from docker.haenerconsulting.com/virtufin/. Dapr components (pubsub, statestore, config) are mounted from ./components/.

Kubernetes (Helm)

The virtufin/helm repo contains the Helm chart for cluster deployment.

git clone https://git.haenerconsulting.com/virtufin/helm.git
cd helm
# See helm/README.md for prerequisites and full installation.

Prerequisites

  • Kubernetes 1.27+
  • Dapr installed on the cluster
  • Valkey (Redis-compatible) for state store and pub/sub
  • Harbor registry credentials

Install

helm install virtufin ./ \
  --namespace virtufin \
  --create-namespace \
  --set stateStore.host=valkey.valkey.svc.cluster.local \
  --set pubsub.host=valkey.valkey.svc.cluster.local

Within the cluster, services are accessible at:

export VIRTUFIN_WSM_URL=websocketmanager.virtufin.svc.cluster.local:5002
export VIRTUFIN_WM_URL=workmanager.virtufin.svc.cluster.local:5002
export VIRTUFIN_API_URL=http://apigateway.virtufin.svc.cluster.local:5001

Pulling upstream changes

cd deploy-local && git pull
cd docker-compose && git pull
cd helm && git pull