Skip to Content
Fusee Docs
Deployment and operations

Deploying Fusee

  • systemd/fusee.service: one server on a host, with the token, the HTTP API on :7601 and hardening. Instructions in the file.
  • helm/fusee: a StatefulSet. members: 1 is one server; members: 3 is a replicated group (each member keeps a copy; a majority must be up). The chart generates the token into a Secret unless you set one. helm install fusee deploy/helm/fusee --set members=3.
  • terraform: installs the chart with Terraform (Helm provider), generates the token, and outputs the addresses.
  • monitoring: Prometheus alert rules and a Grafana dashboard over /metrics.
  • The Dockerfile at the root builds the server image.

Put the data directory on a disk that honours flushes; fusee doctor <dir> checks it. A Python worker connects with Engine.open(address=fusee.connection_url(addr, token_file=path)) and a client with Client.connect(addr, token_file=path) (see each SDK's README); tools use the HTTP API with the token as Authorization: Bearer.

Who can reach what

fusee server serves its own protocol (workers and clients, --listen) and, with --http host:port, the HTTP API, the UI and /metrics. Each token is a file; the HTTP API takes it as Authorization: Bearer <token>, workers and clients as ?token-file=PATH in the address.

TokenFlagServer protocolHTTP API
worker--token-file FILEholds shards, any calleverything
client--client-token-file FILEcalls (start, signal, query, ...), no shardseverything
read-only--read-token-file FILEcalls that read (list, describe, query, result, ...)every GET; a change answers 403
a namespace's--namespaces-file FILEruns whose ID starts with <namespace>/; schedules, objects and metrics need a full token

Behind a proxy that signs people in (oauth2-proxy, an identity-aware load balancer), pass --identity-header X-Forwarded-User (and --http-insecure if the API listens off loopback with no token): calls then need that header or a token, the UI shows who is signed in, and every signal, cancellation, termination and reset records the user (audit). Only the proxy may reach the API.

Server-protocol tokens are at least 16 bytes (openssl rand -hex 32). A client or read-only token needs the worker token too. The scope is fixed when a connection is made: a client's token is refused at the worker's hello, and a reader's calls that change something answer Rejected.

kill -HUP <pid> reloads the certificates and every token file (and the namespaces file) for connections made after it: write the new token, send SIGHUP, then move the callers over. A file that does not load keeps the old settings and the server says why. The replica protocol's certificates and token need a restart.

A namespace is a prefix of the workflow ID. The file holds one namespace and its token per line:

# namespace token
acme   9c1f0e...
globex 47ab2d...

With acme's token, starting acme/order-1 works and starting or reading globex/order-1 answers 403; GET /v1/runs lists only acme/ runs, and /v1/info names the namespace.

Payloads the application encrypted show as encrypted in the UI; to read them there, run fusee codec-server where the keys are and pass its URL as --codec-url (payload encryption).

On this page