compose.yml π³ΒΆ
This page documents the rules that govern the top-level compose.yml and the environment variables it consumes. For general documentation rules (links, writing, RFC 2119 keywords), see documentation.md. For CI debugging workflows that use these variables, see ci.md.
Purpose π―ΒΆ
The top-level compose.yml is scoped to local development and CI testing only.
It MUST NOT be used to deploy or run a live Infinito.Nexus stack.
Production deployments MUST go through the Ansible roles and their own rendered compose files under roles/<role>/templates/.
Within its scope, compose.yml MUST stay a thin orchestration surface for the infinito runner container and its CoreDNS sidecar.
It MUST NOT host application roles, fixtures, or test harnesses.
Structure πΒΆ
You MUST consume tunable runtime parameters via strict substitution
${VAR:?Run 'make dotenv' to generate the .env single source of truth}; the default lives in default.env. Inline${VAR:-default}forms are forbidden and enforced by test_no_default_substitutions.py.You MUST NOT hardcode values that differ between operators (paths, image tags, CPU or memory caps).
You SHOULD annotate non-obvious keys with a short inline comment that explains why they exist, not what they do.
You MUST document every new env var by adding the row below AND committing a one-line
# ...comment above its key in default.env.
Environment Variables πΒΆ
All variables consumed by compose.yml. The per-variable default + comment lives next to the key in default.env; the tables below stay scoped to βwhat role does this variable play in compose.ymlβ and stop duplicating the default.
Image and RuntimeΒΆ
Variable |
Purpose |
|---|---|
|
Image reference used by the |
|
Compose |
|
Used directly as |
|
Build-arg forwarded to the Dockerfile for Nix configuration. Pass-through if set in the calling shell. |
Resource Caps (OOM Reproduction)ΒΆ
These variables cap the infinito container so local runs can reproduce GitHub-hosted runner pressure.
Each default is 0, which Docker interprets as βunlimitedβ and is identical to omitting the key.
See ci.md for runner specs and reproduction profiles.
Variable |
Compose key |
Example override |
|---|---|---|
|
|
|
|
|
|
|
|
|
You SHOULD set INFINITO_MEMSWAP_LIMIT to the same value as INFINITO_MEM_LIMIT to disable swap inflation.
Allowing swap masks OOM conditions that the real runner would hit.
StorageΒΆ
Variable |
Purpose |
|---|---|
|
Named volume (or host path) backing the nested Docker directory. Generator overrides to |
|
Mount point inside the container for the nested Docker data. |
CachesΒΆ
For activation, coverage, and operations of the registry-cache, package-cache, and package-cache-frontend services, see cache.md.
The env-var contracts each service expects strictly via ${VAR:?β¦} (consumed in compose.yml and compose/cache.override.yml):
Variable |
Purpose |
|---|---|
|
Host path bind-mounted into |
|
Host path holding the proxy MITM CA bundle. Mounted writable into |
|
Maximum on-disk size. Computed by registry_cache_max_size.py as half the free disk at the cache path, floor |
|
Bind source for the systemd drop-in inside |
|
Host path bind-mounted at |
|
JVM heap ( |
|
|
|
Soft quota for the default blobstore. Computed as half free disk at the cache path, floor |
|
Cache freshness window in minutes, applied to every Nexus proxy repo ( |
|
Target value for the rotated Nexus admin password. Default is a stable per-host hash. |
|
Host-side port mapped to Nexus REST/UI. Bound to |
|
Bind source for |
|
Bind source for |
|
Host directory for the frontend CA. |
|
Host directory for per-hostname leaf certs. |
|
Static IPv4 address for the frontend on the compose default network. |
|
Bind source for |
NetworkingΒΆ
Variable |
Purpose |
|---|---|
|
Static IP assigned to the CoreDNS sidecar and used as the DNS server. Default lives in default.env. |
|
Static IPv4 address assigned to the |
|
Base domain exported into the container environment. Default in default.env. |
|
Host address that all published ports bind to. |
|
IPAM subnet for the default bridge network. |
|
IPAM pool for containers that join the default bridge without a static address, such as worktree stacks on the primaryβs cache network. It is the upper half of |
|
IPAM gateway for the default bridge network. |
|
MTU for the bridge network. Lower when the host network is tunneled. |
Adding a Variable βΒΆ
When you introduce a new env var in compose.yml, you MUST:
Add the default + one-line
# ...comment to default.env; defaults never live incompose.yml.Consume the variable strictly via
${VAR:?Run 'make dotenv' to generate the .env single source of truth}; bare${VAR}is acceptable only when the value is optional (e.g.NIX_CONFIG).Add a row to the matching table above with its compose-side purpose.
Cross-link the variable from the relevant workflow page when it exists only to drive a specific workflow (e.g. resource caps link to ci.md).