Skip to content

Deployment

v1.1.0 ships Docker + Compose support for running the FCC stack locally or on a single server. Kubernetes manifests, a Helm chart, and image-registry publishing land in v1.1.1 — see the v1.1.x roadmap.

Quick decision matrix

You want… Use
Try FCC on your laptop without installing Python deps Docker quickstart
Run the full stack (backend + frontend + Streamlit + Jupyter) locally Local stack walkthrough
Production K8s with Helm and pullable images Wait for v1.1.1 (≈2-3 weeks)
Embed FCC as a library in your own Python project pip install fcc-agent-team-ext (no Docker needed)

What ships in v1.1.0

Artifact Purpose Path
Dockerfile.backend WebSocket bridge + AI providers (PID 1) docker/Dockerfile.backend
Dockerfile.frontend React SPA + nginx reverse proxy docker/Dockerfile.frontend
Dockerfile.streamlit Generic Streamlit-app runner (28 apps) docker/Dockerfile.streamlit
Dockerfile.jupyter JupyterLab + 23 notebooks docker/Dockerfile.jupyter
nginx.conf Reverse proxy: SPA + /ws → backend docker/nginx.conf
docker-compose.yml Local dev stack (4 services) repo root
docker-compose.prod.yml Production overlay (resource limits, log rotation) repo root
.dockerignore Build context filter repo root
make docker-* targets One-command build/up/down Makefile
tests/deployment/* Static checks (parsed in make test) tests/deployment/
.github/workflows/docker.yml CI image build verification .github/workflows/

No image registry push. The CI workflow builds all four images on every PR but does NOT push them anywhere. Image publishing to ghcr.io lands in v1.1.1 alongside the Helm chart so helm install actually works on first try (a Helm chart without pullable images is broken).

Architecture

flowchart LR
    subgraph host[Local machine / single server]
        subgraph compose[docker-compose stack]
            be[backend<br/>fcc protocol ws-bridge<br/>:8765]
            fe[frontend<br/>nginx + React<br/>:8080]
            st[streamlit<br/>:8501]
            jp[jupyter<br/>:8888]
        end
    end

    user1[Developer] -->|browser| fe
    fe -->|/ws| be
    fe -->|/health| be
    user1 -->|direct| st
    user1 -->|direct| jp

    be -->|EventBus| be
    style be fill:#e1f5fe
    style fe fill:#fff3e0
    style st fill:#f3e5f5
    style jp fill:#e8f5e9

The four services are independent — you can run them in any combination. The frontend depends on the backend's /health endpoint via depends_on: condition: service_healthy, so make docker-up only starts the SPA once the backend is reachable.

See also