Infrastructure
Angzarr uses modular Helm charts for Kubernetes and OpenTofu for cloud infrastructure. Each database and message bus is deployed separately from the core application using official images.
Deployment Modes
| Mode | Infrastructure | Best For |
|---|---|---|
| Standalone | SQLite + Channel bus | Development, testing |
| Local K8s | Kind + Helm | Integration testing |
| GCP Cloud Run | Cloud SQL + Pub/Sub | Serverless production |
| GCP GKE | Cloud SQL + Helm | K8s production on GCP |
| AWS Fargate | RDS + SNS/SQS | Serverless production on AWS |
| AWS EKS | RDS + Helm | K8s production on AWS |
See OpenTofu for complete deployment guides for each target.
Available Charts
| Chart | Description | Operator |
|---|---|---|
postgres | PostgreSQL event store | CloudNative-PG |
rabbitmq | RabbitMQ message bus | RabbitMQ Cluster Operator |
kafka | Kafka message bus | Strimzi |
nats | NATS message bus | - |
redis | Redis cache | - |
All charts use official upstream images, not Bitnami.
Deployment Order
- Deploy operators (for PostgreSQL and RabbitMQ)
- Deploy infrastructure charts
- Deploy core angzarr chart with applications
# Create namespace
kubectl create namespace angzarr
# Deploy operators
helm install angzarr-operators ./deploy/k8s/helm/operators -n operators --create-namespace
# Deploy database
helm install angzarr-db ./deploy/k8s/helm/postgres -n angzarr
# Deploy message bus
helm install angzarr-mq ./deploy/k8s/helm/rabbitmq -n angzarr
# Deploy application
helm install angzarr ./deploy/k8s/helm/angzarr -n angzarr \
-f ./deploy/k8s/helm/angzarr/values-rust.yaml
PostgreSQL Configuration
Uses CloudNative-PG operator with official PostgreSQL image.
values.yaml
name: angzarr-db
image:
repository: ghcr.io/cloudnative-pg/postgresql
tag: "16.4"
instances: 1
database:
name: angzarr
owner: angzarr
storage:
size: 8Gi
Connection String
CloudNative-PG creates services: <name>-rw (read-write), <name>-ro (read-only).
# In angzarr values
storage:
postgres:
uri: "postgres://angzarr:<password>@angzarr-db-rw:5432/angzarr"
RabbitMQ Configuration
Uses RabbitMQ Cluster Operator with official RabbitMQ image.
values.yaml
name: angzarr-mq
image:
repository: rabbitmq
tag: "4.1-management"
replicas: 1
storage:
size: 1Gi
Connection String
# In angzarr values
messaging:
type: amqp
amqp:
url: "amqp://guest:guest@angzarr-mq:5672/%2F"
Kafka Configuration
Uses Strimzi operator with official Apache Kafka image.
values.yaml
name: angzarr-kafka
version: "3.9.0"
kafka:
replicas: 1
storage:
size: 2Gi
controller:
replicas: 1
Connection String
# In angzarr values
messaging:
type: kafka
kafka:
bootstrapServers: "angzarr-kafka-kafka-bootstrap:9092"
Kind Deployment
For local development with Kind:
# Create cluster and deploy infrastructure
just -f deploy/kind/justfile up
# Or step by step:
just -f deploy/kind/justfile create
just -f deploy/kind/justfile infra-standard
just -f deploy/kind/justfile framework
Why Modular Charts?
- Independent lifecycle — Upgrade databases without redeploying apps
- Official images — No third-party wrappers or Bitnami dependencies
- Flexibility — Choose only the infrastructure you need
- Production parity — Same charts for dev and prod
- Clear dependencies — Explicit deployment order
OpenTofu
For cloud infrastructure provisioning, angzarr provides OpenTofu modules supporting multiple deployment targets.
See OpenTofu for complete deployment guides including:
- Standalone mode
- Local Kubernetes (Kind)
- GCP Cloud Run
- GCP GKE
- AWS Fargate
- AWS EKS
Quick Reference
# GCP Cloud Run
cd deploy/tofu/environments/gcp && tofu apply
# AWS Fargate
cd deploy/tofu/environments/aws-staging && tofu apply
Why OpenTofu
- Open source — Community-driven fork of Terraform
- Compatible — Works with existing Terraform providers
- No license restrictions — BSL-free
Next Steps
- OpenTofu — Cloud deployment guides (GCP, AWS, K8s)
- Observability — Monitoring and tracing
- Databases — Database configuration details