You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Aug 5, 2026. It is now read-only.
The root docker-compose.yml currently bundles all services together — including devnet — which conflates several distinct use cases:
End users who want to run ENSNode against mainnet or a public testnet (Sepolia, etc.)
Developers who want a local devnet for development work
CI / integration tests that need devnet + postgres as infrastructure
The devnet service is currently included to pin the version used in the monorepo and to support the orchestrate.ts integration-test script, but this is not obvious to users and creates confusion about what the "default" compose setup is supposed to do.
Proposed Solution
Split docker-compose.yml into purpose-specific files under a docker/ directory:
docker/docker-compose.yml -- Base ENSNode stack (ensindexer, ensapi, ensrainbow, ensadmin, postgres) — no devnet, targets mainnet by default
docker/docker-compose.devnet.yml -- Extends base compose, adds devnet service and overrides RPC URLs for local development
docker/docker-compose.sepolia.yml -- Extends base compose, overrides RPC/config for Sepolia testnet
docker/docker-compose.cicd-tests.yml -- Minimal compose for CI (devnet + postgres only), used by orchestrate.ts
Docker Compose's extends feature can be used so devnet/testnet variants don't duplicate the base service definitions.
Benefits
A user running docker compose up gets a clean mainnet-targeted stack with no surprise devnet process
Developers can still do docker compose -f docker/docker-compose.devnet.yml up devnet for a quick local devnet
CI integration tests get their own minimal compose that doesn't pull in unneeded services
The version pin for devnet is preserved but scoped to files where it's relevant
Cons
we lose option to make docker compose up -d in monopero. maybe solve this via symlink (/docker/docker-compose.yaml -> /docker-compose.yaml ?
Context
Raised during review of the REST API tests PR: comment
Problem
The root
docker-compose.ymlcurrently bundles all services together — includingdevnet— which conflates several distinct use cases:devnet+postgresas infrastructureThe
devnetservice is currently included to pin the version used in the monorepo and to support theorchestrate.tsintegration-test script, but this is not obvious to users and creates confusion about what the "default" compose setup is supposed to do.Proposed Solution
Split
docker-compose.ymlinto purpose-specific files under adocker/directory:docker/docker-compose.yml-- Base ENSNode stack (ensindexer, ensapi, ensrainbow, ensadmin, postgres) — no devnet, targets mainnet by defaultdocker/docker-compose.devnet.yml-- Extends base compose, addsdevnetservice and overrides RPC URLs for local developmentdocker/docker-compose.sepolia.yml-- Extends base compose, overrides RPC/config for Sepolia testnetdocker/docker-compose.cicd-tests.yml-- Minimal compose for CI (devnet+postgresonly), used byorchestrate.tsDocker Compose's
extendsfeature can be used so devnet/testnet variants don't duplicate the base service definitions.Benefits
docker compose upgets a clean mainnet-targeted stack with no surprise devnet processdocker compose -f docker/docker-compose.devnet.yml up devnetfor a quick local devnetdevnetis preserved but scoped to files where it's relevantCons
we lose option to make
docker compose up -din monopero. maybe solve this via symlink (/docker/docker-compose.yaml -> /docker-compose.yaml?Context
Raised during review of the REST API tests PR: comment