FabrikFabrik

Deployment

Self-host Fabrik on your own infrastructure with Docker Compose — 7 services, clearly scoped dependencies, and a production topology you can reason about.

Fabrik ships as a Docker Compose stack. One .env file, one docker-compose up -d, and you have a working deployment. There is no hosted SaaS — every Fabrik installation runs inside your own environment, which keeps credentials, query data, and MIM snapshots inside your perimeter.

What you're deploying

A single install is 7 long-running services on one Docker network:

ServiceRoleImage
backendDjango + Daphne ASGI (HTTP + WebSocket)fabrik-backend:latest
frontendReact + Vite dev server (prod: nginx-served static)fabrik-frontend:latest
celery-workerBackground tasks (queries, AWX, MIM import)fabrik-backend:latest
celery-beatScheduled task dispatcherfabrik-backend:latest
postgresPrimary relational store (users, queries, audit)postgres:17-alpine
neo4jACI MIM graph (class hierarchy, relationships)neo4j:5.26
redisCelery broker, cache, Channels layerredis:8-alpine

Backend, workers, and beat all share one image — same code, different commands. That keeps the build matrix small and ensures every Python process sees identical migrations and dependencies.

Deployment model

Fabrik is self-hosted, Docker-first. A production topology looks like this:

The reverse proxy terminates TLS and enforces per-endpoint rate limits (see Production setup). Internal services are not exposed to the public network — all cross-service traffic stays on the fabrik-network bridge.

Where to go next