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 api 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 it with the local context (api_host = "localhost", api_port = 5002, tls = false in contexts.toml) and CONTEXT_NAME = "local" at the top of the example; see Getting Started. The examples reach WebSocketManager and WorkManager through the gateway, so the gateway's gRPC port is the only one they need.

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 it with the local context (api_host = "localhost", api_port = 5002, tls = false in contexts.toml) and CONTEXT_NAME = "local" at the top of the example; see Getting Started. The examples reach WebSocketManager and WorkManager through the gateway, so the gateway's gRPC port is the only one they need.

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

From outside the cluster, the examples reach it through its ingress with a context like demo (api_host the ingress host, api_port = 443, tls = true, and an api_key); demo is this setup.

Pulling upstream changes

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