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