Skip to main content

Docker & Helm

Filament Management ships as three separate container images, built from three separate Dockerfiles at the repository root:

ImageDockerfileContains
BackendDockerfile.backendThe Go API server
FrontendDockerfile.frontendThe static React SPA, served by its own container
BridgeDockerfile.bridgeThe local network bridge binary

All three are minimal, statically-linked, distroless-style builds (CGO_ENABLED=0, scratch-based final stage) for a small attack surface and small image size.

Configuration

The backend is configured entirely through environment variables. The ones most deployments care about:

VariablePurpose
DB_DRIVERsqlite or mysql
DB_NAME, DB_HOST, DB_PORT, DB_USER, DB_PASSWORDDatabase connection
REGISTRATION_ENABLEDAllow self-service workspace registration (default false)
REDIS_ADDR, REDIS_DB, REDIS_PASSWORDRequired only when running more than one backend
replica and using the local network bridge — coordinates routing a bridge connection across
pods via a shared job queue
SENTRY_DSN, SENTRY_ENVIRONMENT, SENTRY_TRACES_SAMPLE_RATEError reporting (global, not
per-workspace — see Multi-tenancy)

With a single backend replica, the local network bridge works without Redis configured at all — REDIS_ADDR only becomes necessary once you scale beyond one pod and still want the bridge to work regardless of which pod a bridge device happens to be connected to.

Helm chart

A Helm chart lives under helm/ in the repository and deploys the backend and frontend as separate Deployments, with an optional MariaDB dependency. Key values:

image:
repositoryBackend: jonasled.dev/jonasled/filamentmanagement/backend
repositoryFrontend: jonasled.dev/jonasled/filamentmanagement/frontend
tag: "" # defaults to the chart's appVersion

replicaCountBackend: 1
replicaCountFrontend: 1

mariadb:
enabled: true
external:
host: mariadb
auth:
database: filamentmanagement
username: filamentmanagement

registration:
enabled: false

redis:
addr: "" # set this once replicaCountBackend > 1 and you use the bridge

ingress:
enabled: false

Install or upgrade with:

helm dependency update helm
helm upgrade --install filamentmanagement ./helm \
--set image.tag=<version> \
--set ingress.enabled=true \
--set ingress.hosts[0].host=filaments.example.com

See helm/values.yaml for the full set of configurable values (resources, autoscaling, pod security context, service account, and more — all fairly standard for a Helm chart following the default chart layout).