Skip to main content

Self-Hosting FactoryThread

FactoryThread can run entirely on your own infrastructure. Everything is driven by ftctl — a single, self-contained CLI that fetches a signed release bundle, verifies it offline, generates all secrets on your server, and deploys the whole stack from one compose file on Docker or Podman.

Nothing needs to be installed to run ftctl — the runtime is embedded in the binary. Secrets never leave the box.

The one command

curl -fsSL https://control.factorythread.com/ftctl -o ftctl && chmod +x ftctl
sudo ./ftctl install --version 2026.09.04.7

That single install fetches → verifies → loads images → configures → deploys. Then open http://<host> and install your licence.

What you get

One compose stack with fixed container names on a single network:

ServicePortRole
PostgreSQL 185432primary database
RabbitMQ5672 / 15672RPC + async execution
Redis6379locking + cache
Backend (Fastify API)3000API
Workerflow execution
Frontend (Nginx + React)80 / 443the app

A one-shot migrate step runs database migrations and provisions the runtime role before the app starts, and a backup scheduler takes periodic dumps.

How the pieces fit

  • Distribution — a signed factory-thread-<version>.tar.gz bundle served by the Control Service (control.factorythread.com), or side-loaded for air-gapped hosts. See Air-Gapped Install.
  • Integrity — every bundle carries a SHA-256 checksum and an ECDSA signature that ftctl verifies against a trust anchor baked into the binary. A tampered or unsigned bundle is refused.
  • Configuration — generated on first install into /opt/factorythread/current/.env.deploy; you're prompted only for optional capabilities. See Configuration.
  • Licensing — a signed Entitlement sets your plan, installed offline. See Licensing.
  • Upgradesftctl upgrade does drain → backup → migrate → swap with snapshot rollback. See Upgrades & Operations.

Where to start

I want to…Go to
Install for the first timeInstallation
Understand .env.deploy and the promptsConfiguration
Activate my planLicensing
Back up / restore the databaseBackup & Restore
Upgrade, roll back, read logs, restartUpgrades & Operations
Protect against a lost serverDisaster Recovery
Install without internet accessAir-Gapped Install
Move off the old setup.sh stackMigrating from a Legacy Deployment
Prerequisites

A Linux x86-64 host with 8 GB RAM (16 GB for heavier workloads), 20 GB free disk, root/sudo, and either Docker 20.10+ (Compose v2) or Podman 4.4+. ftctl can install Podman for you if you have neither.