Skip to content

Docker Compose

The Compose deployment in apps/backend/docker-compose/ runs Flow-Like on one Docker host. It includes the web app, API, execution runtime, persistence, realtime collaboration, custom-node compilation, and server-side event services.

Flow-Like Docker Compose architecture, from web and desktop clients through the API to persistence, execution, collaboration, and optional monitoring

The published web port serves the application. The published API port belongs to an Nginx gateway, which load-balances the internal API replicas. Runtime replicas are internal services reached over HTTP for interactive runs and through Redis for queued runs.

Object storage is not created by the Compose file. The stock API includes Azure, GCP, and R2 runtime credentials. AWS and generic S3 appear in the configuration, but the checked-in Compose API target must be rebuilt with its AWS feature before those providers can initialize end to end.

ServicePublished portResponsibility
web3001Flow-Like web application
api-gateway8080Stable API entrypoint and load balancer
apiInternal 8080API replicas, authentication, app state, and dispatch
runtimeInternal 9000Shared execution workers and Redis queue consumers
compiler8081WASM compilation for custom nodes
signaling4444Realtime collaboration signaling
sink-servicesCron and configured bot/event adapters
postgres5432Relational application metadata
redis6379Execution state, queues, and signaling coordination
db-initOne-time database initialization job

The optional monitoring profile adds Prometheus, Tempo, Grafana, and Redis and PostgreSQL exporters.

Terminal window
cd apps/backend/docker-compose
cp .env.example .env
# Configure storage and trust keys in .env, then start the stack.
../../../tools/gen-execution-keys.sh --export
docker compose up -d

Start the same stack with observability:

Terminal window
docker compose --profile monitoring up -d

Continue with the installation guide before exposing any service outside a development network.

Compose uses long-running runtime replicas. A replica can process multiple runs over its lifetime, so this is a shared-worker model rather than a fresh container per invocation.

This model is a good fit for:

  • Development and evaluation
  • A private team on a controlled host
  • Workloads where simple operations and low startup overhead matter

The current Kubernetes Job dispatcher can create a Job, but its executor entrypoint is still pending. For the implemented and incomplete dispatch choices, see Execution Backends.