Skip to content

Self-Hosting Fluxify ​

Fluxify is built to run on your own infrastructure. There are two ways to deploy it, and this page helps you pick the right one and points you to the exact steps for each.

TIP

New to how Fluxify works internally? The Architecture section explains the control plane / worker split that both setups below are built on.

WARNING

Alpha software. Fluxify is in active alpha development. It is suitable for self-hosted trials and early production use, but internal schemas may change between versions — read the release notes before upgrading.


The two ways to run Fluxify ​

Kit (all-in-one)Admin + Workers (scale-out)
Best forPrototypes and testing onlyProduction, on one Docker host or Kubernetes
ContainersOne — database, cache and event bus includedSeparate admin + many workers
ScalingVertical only (bigger machine)Horizontal — add workers on demand
Edge proxyBuilt into the imageTraefik (load-balances the workers)
Setup effortLowest — one commandModerate
GuideQuick Run with the Kit Image →Production Setup →

Which should I choose? ​

  • Prototyping or testing? Use the Kit, and only for that: never for production. It bundles every service into a single container and starts with one command. → Quick Run guide

  • Anything in production, even on a single machine? Use Admin + Workers. The control plane runs once; stateless workers scale horizontally behind Traefik. The workers run on either:

TIP

Start with the Kit to evaluate, then move to Admin + Workers when you need to scale — your .env and database carry straight over.

TIP

Let a coding agent do it. Claude Code, Cursor or Codex can deploy either setup from these docs. See Deploy with a Coding Agent for copy-paste prompts and a checklist to check its work.


How the pieces fit together ​

Both topologies share the same three backing services and the same URL layout — they differ only in how the application containers are split up.

Kit — everything in one container:

Admin + Workers — control plane split from a worker pool:

Notice that only the admin container reaches PostgreSQL. Workers receive your routes ready to run over NATS, so they never need database access — see Request Lifecycle.

Backing services (both setups) ​

ServiceRole
PostgreSQLStores workflows, project configuration, and user accounts. Only the admin container connects to it.
Valkey / RedisCaching and fast lookups.
NATSDelivers compiled routes to workers and keeps live configuration in sync.

WARNING

NATS must be started with JetStream enabled (-js on the command line). Fluxify uses it to queue compile work and to store the compiled routes that workers pull. Without it the compiler will not start and your workers will have nothing to serve. The bundled compose files already set this.

URL layout (both setups) ​

PathServes
/_/admin/uiWeb dashboard (visual editor)
/_/admin/apiAdmin REST API
/_/admin/api/openapi/uiAPI documentation
/_/admin/mcpMCP server for AI apps and coding agents
/.well-known/oauth-…Sign-in details for MCP clients
/Your published workflows and custom endpoints

NOTE

Namespace isolation. Everything under /_/admin is platform management and the visual editor. The rest of the root path / is reserved for the endpoints you build in Fluxify, so your APIs never collide with the admin surface. The one exception is /.well-known/oauth-…, which MCP clients need for sign-in.


System requirements ​

ResourceKit (trial)Admin + Workers (production)
CPU1 core2+ cores (plus ~1 core per worker)
RAM2 GB4 GB+
Disk5 GB20 GB+ SSD
DockerEngine 20.10+ / DesktopEngine 20.10+

Generate your secret keys ​

Both setups need the same secrets in their .env. Generate them once here, then follow the guide for your chosen setup:

  • MASTER_ENCRYPTION_KEY — encrypts stored credentials.
  • BETTER_AUTH_SECRET — signs authentication sessions.

WARNING

Back up MASTER_ENCRYPTION_KEY. If you lose or change it after storing data, every saved credential becomes permanently unreadable.

IMPORTANT

Admin and workers must share the same MASTER_ENCRYPTION_KEY. Project configuration reaches workers encrypted with it; a worker with a different key starts up and then fails every request. A worker refuses to start without one.

One more setting: which project a worker serves ​

A request worker serves either exactly one project, named by WORKER_PROJECT_ID, or every project with *. You get a project id from the project's settings page in the dashboard.

The production guides create the project first, then pin a worker group to its id. The Kit defaults to *, so it serves routes from the first boot without an id to copy.

To serve several projects with a pinned worker, run a separate group of workers for each. Copies of the same worker share their settings, so they always share a project.

Serving every project from one worker

Set WORKER_PROJECT_ID to * (the Kit's default) and the worker serves every project you have, picking up new ones as you create them — no restart, no id to copy.

Good for a personal install or a staging box. Give each project its own subdomain (Project settings → General) and two projects can use the same route path without clashing: shop.example.com/orders and blog.example.com/orders reach different projects. Projects without a subdomain share the bare domain, where a path used by two of them resolves to only one. The base domain is set in Instance settings → Hosting.

A slow project still slows the rest, since they share one worker.


Next steps ​

Pick your path and jump straight to the steps:

Released under the Apache License 2.0. Enterprise features are under the Fluxify Enterprise Edition License.