Skip to content

Commit 3facf20

Browse files
authored
feat: add docker directory with several docker composes (#1965)
1 parent 0d8a4b4 commit 3facf20

24 files changed

Lines changed: 518 additions & 153 deletions

File tree

.changeset/hip-poems-shave.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@ensnode/integration-test-env": patch
3+
"@docs/ensnode": patch
4+
---
5+
6+
Moved docker-compose.yml file to separate `docker` directory, updates docs and cicd-tests

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ ENSNode is a modern, multichain indexer for ENS. It supports backwards-compatibl
8989

9090
Documentation for the ENSNode suite of apps is available at [ensnode.io](https://ensnode.io).
9191

92+
## Running with Docker
93+
94+
```bash
95+
docker compose -f docker/docker-compose.yml up -d
96+
```
97+
98+
See [`docker/README.md`](docker/README.md) for all use cases and commands.
99+
92100
## Contributions
93101

94102
We welcome community contributions and feedback—please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information.

apps/ensindexer/.env.local.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ ENSRAINBOW_URL=http://localhost:3223
243243
# https://ensnode.io/ensrainbow/usage/available-label-sets
244244
#
245245
# LABEL_SET_ID: see https://ensnode.io/ensrainbow/concepts/glossary#label-set-id.
246+
# Should match ENSRainbow's LABEL_SET_ID.
246247
LABEL_SET_ID=subgraph
247248

248249
# LABEL_SET_VERSION: see https://ensnode.io/ensrainbow/concepts/glossary#label-set-version.

apps/ensrainbow/.env.local.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ LOG_LEVEL=info
1616
DB_SCHEMA_VERSION=3
1717

1818
# Label set ID (see https://ensnode.io/ensrainbow/concepts/glossary#label-set-id)
19-
LABEL_SET_ID=ens-test-env
19+
LABEL_SET_ID=subgraph
2020

2121
# Label set version (see https://ensnode.io/ensrainbow/concepts/glossary#label-set-version)
2222
LABEL_SET_VERSION=0

docker-compose.yml

Lines changed: 0 additions & 127 deletions
This file was deleted.

docker/README.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Docker Compose
2+
3+
All commands are run from the **monorepo root**.
4+
5+
## Files
6+
7+
| File | Purpose |
8+
| ---------------------------------------- | -------------------------------------------------------------------------------------- |
9+
| `docker/docker-compose.yml` | Base stack — ensindexer, ensapi, ensrainbow, ensadmin, postgres. For mainnet/sepolia. |
10+
| `docker/docker-compose.devnet.yml` | Full stack against local devnet (`ens-test-env`). Includes all base services + devnet. |
11+
| `docker/docker-compose.orchestrator.yml` | Minimal infra for CI — devnet + postgres only. Used by `orchestrator.ts`. |
12+
| `docker/services/*.yml` | Individual service definitions. Extended by the compose files above. |
13+
| `docker/envs/.env.docker.common` | Shared env defaults (postgres credentials, internal service URLs). Committed. |
14+
| `docker/envs/.env.docker.devnet` | Devnet defaults (PLUGINS, etc.). Committed. Works out of the box. |
15+
| `docker/envs/.env.docker.example` | Example for user-specific config. Copy to `.env.docker.local` for mainnet/sepolia. |
16+
| `docker/envs/.env.docker.local` | User config (gitignored). Required for base stack, optional for devnet overrides. |
17+
18+
> To inspect the fully resolved config for any compose file (resolves all `extends`):
19+
>
20+
> ```
21+
> docker compose -f docker/docker-compose.yml config
22+
> ```
23+
24+
## Use cases
25+
26+
### Mainnet / Sepolia
27+
28+
**1. Configure environment** (one-time setup):
29+
30+
```bash
31+
cp docker/envs/.env.docker.example docker/envs/.env.docker.local
32+
```
33+
34+
Edit `docker/envs/.env.docker.local` and set `NAMESPACE`, `PLUGINS`, and your RPC endpoints (e.g. `ALCHEMY_API_KEY` or `RPC_URL_1`).
35+
36+
**2. Start/stop the stack:**
37+
38+
```bash
39+
# Start full stack in background
40+
docker compose -f docker/docker-compose.yml up -d
41+
42+
# Stop
43+
docker compose -f docker/docker-compose.yml down
44+
45+
# Stop and remove volumes
46+
docker compose -f docker/docker-compose.yml down -v
47+
```
48+
49+
### Local devnet (for developers)
50+
51+
No setup required — devnet defaults are committed in `docker/envs/.env.docker.devnet`.
52+
53+
To override defaults (e.g. change `PLUGINS`), create `docker/envs/.env.docker.local` with your values.
54+
55+
```bash
56+
# Start full stack against devnet
57+
docker compose -f docker/docker-compose.devnet.yml up -d
58+
59+
# Start only devnet + core services (no ensadmin)
60+
docker compose -f docker/docker-compose.devnet.yml up -d devnet postgres ensrainbow ensindexer ensapi
61+
62+
# Start only devnet (quick local EVM node, also shows data information about devnet)
63+
docker compose -f docker/docker-compose.devnet.yml up devnet
64+
# or
65+
pnpm devnet
66+
67+
# Stop
68+
docker compose -f docker/docker-compose.devnet.yml down
69+
```
70+
71+
### Build images locally
72+
73+
```bash
74+
# Build all images
75+
pnpm docker:build:ensnode
76+
77+
# Build a specific image
78+
pnpm docker:build:ensindexer
79+
pnpm docker:build:ensapi
80+
pnpm docker:build:ensrainbow
81+
pnpm docker:build:ensadmin
82+
```
83+
84+
### CI / integration tests
85+
86+
Used internally by `orchestrator.ts` via testcontainers. Starts devnet + postgres only.
87+
88+
```bash
89+
pnpm test:integration:ci
90+
```

docker/docker-compose.devnet.yml

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
services:
2+
ensindexer:
3+
extends:
4+
file: services/ensindexer.yml
5+
service: ensindexer
6+
environment:
7+
# TODO: in future we will migrate devnet to chain_id=1
8+
# need to remove `RPC_URL_15658733` in that case
9+
RPC_URL_15658733: http://devnet:8545
10+
RPC_URL_1: http://devnet:8545
11+
ENSINDEXER_SCHEMA_NAME: docker_devnet_v1
12+
LABEL_SET_ID: ens-test-env
13+
NAMESPACE: ens-test-env
14+
env_file:
15+
- path: envs/.env.docker.common
16+
required: true
17+
- path: envs/.env.docker.devnet
18+
required: true
19+
- path: envs/.env.docker.local
20+
required: false
21+
depends_on:
22+
ensrainbow:
23+
condition: service_healthy
24+
postgres:
25+
condition: service_healthy
26+
devnet:
27+
condition: service_healthy
28+
29+
ensapi:
30+
extends:
31+
file: services/ensapi.yml
32+
service: ensapi
33+
environment:
34+
# TODO: in future we will migrate devnet to chain_id=1
35+
# need to remove `RPC_URL_15658733` in that case
36+
RPC_URL_15658733: http://devnet:8545
37+
RPC_URL_1: http://devnet:8545
38+
ENSINDEXER_SCHEMA_NAME: docker_devnet_v1
39+
depends_on:
40+
postgres:
41+
condition: service_healthy
42+
env_file:
43+
- path: envs/.env.docker.common
44+
required: true
45+
- path: envs/.env.docker.devnet
46+
required: true
47+
- path: envs/.env.docker.local
48+
required: false
49+
50+
ensrainbow:
51+
extends:
52+
file: services/ensrainbow.yml
53+
service: ensrainbow
54+
environment:
55+
LABEL_SET_ID: ens-test-env
56+
env_file:
57+
- path: envs/.env.docker.common
58+
required: true
59+
- path: envs/.env.docker.devnet
60+
required: true
61+
- path: envs/.env.docker.local
62+
required: false
63+
64+
ensadmin:
65+
extends:
66+
file: services/ensadmin.yml
67+
service: ensadmin
68+
depends_on:
69+
ensapi:
70+
condition: service_started
71+
env_file:
72+
- path: envs/.env.docker.common
73+
required: true
74+
- path: envs/.env.docker.devnet
75+
required: true
76+
- path: envs/.env.docker.local
77+
required: false
78+
79+
postgres:
80+
extends:
81+
file: services/postgres.yml
82+
service: postgres
83+
env_file:
84+
- path: ./envs/.env.docker.common
85+
required: true
86+
87+
devnet:
88+
extends:
89+
file: services/devnet.yml
90+
service: devnet
91+
92+
volumes:
93+
# Docker Compose requires volumes used by services to be declared in each
94+
# compose file that references them — they cannot be inherited via `extends`.
95+
# Explicit `name:` prevents collision with the base stack's volumes when both
96+
# are run from the same directory (same project name).
97+
postgres_data:
98+
name: ensnode_devnet_postgres_data
99+
driver: local
100+
ensrainbow_data:
101+
name: ensnode_devnet_ensrainbow_data
102+
driver: local
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Minimal compose for CI integration tests.
2+
# Provides only the infrastructure services needed by orchestrator.ts:
3+
# devnet (local EVM) and postgres (database).
4+
services:
5+
devnet:
6+
extends:
7+
file: services/devnet.yml
8+
service: devnet
9+
10+
postgres:
11+
extends:
12+
file: services/postgres.yml
13+
service: postgres
14+
env_file:
15+
- path: ./envs/.env.docker.common
16+
required: true
17+
18+
volumes:
19+
# Docker Compose requires volumes used by services to be declared in each
20+
# compose file that references them — they cannot be inherited via `extends`.
21+
postgres_data:
22+
driver: local

0 commit comments

Comments
 (0)