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