.env.example to .env, generates the passwords and the JWT secret that are
still template values, and brings the stack up. It is idempotent — run it again after editing .env.
What comes up
Before you start
1
Set the storage root
local executor the console drives the host Docker daemon, so the left side of a -v flag is a
host path. If the two differ, the console cannot see what jobs write.2
Give the container the docker group
/var/run/docker.sock.3
Decide about GPUs
The compose file requests
gpus: all so the NVIDIA toolkit injects nvidia-smi and the driver
libraries — the console can see the cards without holding them.On a machine with no NVIDIA runtime, delete gpus: all and the NVIDIA_DRIVER_CAPABILITIES
line, then set FORGE_LOCAL_GPU_COUNT explicitly.4
Start it
Internal DNS names
A container does not read the host’s/etc/hosts. If your OIDC provider or image mirror resolves
only through it, add the mappings:
Recommended configuration
Everything else has a working default. These do not..env
FORGE_INGEST_URL is the one people get wrong. Training containers POST their metrics back to it,
and on the local executor they share the host network — so 127.0.0.1 works there but stops
working the moment you add a second machine. Use the host’s real address from the start.starforge-internal network. Bring the whole stack up with compose; a bare docker run of the app
image fails with failed to resolve host 'postgres'.
Confirm it worked
Moving off one machine
Compose with thelocal backend tops out at one host. When you outgrow it, you register a
second Fleet rather than migrating: a node Fleet for several
bare-metal boxes, or move the console itself into
Kubernetes. The jobs already on the first Fleet stay where they
are.