Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ jobs:
with:
commit: "chore(release): version apps"
title: "Release New Version"
version: pnpm changeset:version
publish: pnpm changeset-publish
version: pnpm changeset:version && pnpm release:postversion
publish: pnpm changeset:publish
createGithubReleases: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release_snapshot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ jobs:

- name: Publish snapshot packages to NPM
if: steps.snapshot.outputs.hasChanges == 'true'
run: pnpm changeset-publish:next
run: pnpm changeset:publish:next
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Expand Down
8 changes: 2 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,9 @@ ENSNode is a modern, multichain indexer for ENS. It supports backwards-compatibl

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

## Running with Docker
## Quickstart

```bash
docker compose -f docker/docker-compose.yml up -d
```

See [`docker/README.md`](docker/README.md) for all use cases and commands.
Learn how to quickly get started with ENSNode through APIs (including Omnigraph), SDKs (`enssdk`), React components (`enskit`), and Docker Compose in the [ENSNode Quickstart Guide](https://ensnode.io/docs).
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Learn how to quickly get started with ENSNode through APIs (including Omnigraph), SDKs (`enssdk`), React components (`enskit`), and Docker Compose in the [ENSNode Quickstart Guide](https://ensnode.io/docs).
Learn how to quickly get started with ENSNode through APIs (including the ENS Omnigraph that supports both ENSv1 and ENSv2), SDKs (`enssdk`), React components (`enskit`), and Docker Compose in the [ENSNode Quickstart Guide](https://ensnode.io/docs).


## Contributions

Expand Down
90 changes: 4 additions & 86 deletions docker/README.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,8 @@
# Docker Compose

All commands are run from the **monorepo root**.
ENSNode supports Docker Compose for local development and deployments.

## Files
For canonical setup, use cases, and commands, see the docs site:

| File | Purpose |
| ---------------------------------------- | -------------------------------------------------------------------------------------- |
| `docker/docker-compose.yml` | Base stack — ensindexer, ensapi, ensrainbow, ensadmin, postgres. For mainnet/sepolia. |
| `docker/docker-compose.devnet.yml` | Full stack against local devnet (`ens-test-env`). Includes all base services + devnet. |
| `docker/docker-compose.orchestrator.yml` | Minimal infra for CI — devnet + postgres only. Used by `orchestrator.ts`. |
| `docker/services/*.yml` | Individual service definitions. Extended by the compose files above. |
| `docker/envs/.env.docker.common` | Shared env defaults (postgres credentials, internal service URLs). Committed. |
| `docker/envs/.env.docker.devnet` | Devnet defaults (PLUGINS, etc.). Committed. Works out of the box. |
| `docker/envs/.env.docker.example` | Example for user-specific config. Copy to `.env.docker.local` for mainnet/sepolia. |
| `docker/envs/.env.docker.local` | User config (gitignored). Required for base stack, optional for devnet overrides. |

> To inspect the fully resolved config for any compose file (resolves all `extends`):
>
> ```
> docker compose -f docker/docker-compose.yml config
> ```

## Use cases

### Mainnet / Sepolia

**1. Configure environment** (one-time setup):

```bash
cp docker/envs/.env.docker.example docker/envs/.env.docker.local
```

Edit `docker/envs/.env.docker.local` and set `NAMESPACE`, `PLUGINS`, and your RPC endpoints (e.g. `ALCHEMY_API_KEY` or `RPC_URL_1`).

**2. Start/stop the stack:**

```bash
# Start full stack in background
docker compose -f docker/docker-compose.yml up -d

# Stop
docker compose -f docker/docker-compose.yml down

# Stop and remove volumes
docker compose -f docker/docker-compose.yml down -v
```

### Local devnet (for developers)

No setup required — devnet defaults are committed in `docker/envs/.env.docker.devnet`.

To override defaults (e.g. change `PLUGINS`), create `docker/envs/.env.docker.local` with your values.

```bash
# Start full stack against devnet
docker compose -f docker/docker-compose.devnet.yml up -d

# Start only devnet + core services (no ensadmin)
docker compose -f docker/docker-compose.devnet.yml up -d devnet postgres ensrainbow ensindexer ensapi

# Start only devnet (quick local EVM node, also shows data information about devnet)
docker compose -f docker/docker-compose.devnet.yml up devnet
# or
pnpm devnet

# Stop
docker compose -f docker/docker-compose.devnet.yml down
```

### Build images locally

```bash
# Build all images
pnpm docker:build:ensnode

# Build a specific image
pnpm docker:build:ensindexer
pnpm docker:build:ensapi
pnpm docker:build:ensrainbow
pnpm docker:build:ensadmin
```

### CI / integration tests

Used internally by `orchestrator.ts` via testcontainers. Starts devnet + postgres only.

```bash
pnpm test:integration:ci
```
- [Deploying ENSNode with Docker](https://ensnode.io/docs/deploying/docker)
- [ENSNode Quickstart](https://ensnode.io/docs)
30 changes: 8 additions & 22 deletions docker/docker-compose.devnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ services:
file: services/ensindexer.yml
service: ensindexer
environment:
# TODO: in future we will migrate devnet to chain_id=1
# need to remove `RPC_URL_15658733` in that case
RPC_URL_15658733: http://devnet:8545
RPC_URL_1: http://devnet:8545
ENSINDEXER_SCHEMA_NAME: docker_devnet_v1
LABEL_SET_ID: ens-test-env
NAMESPACE: ens-test-env
env_file:
- path: envs/.env.docker.common
Expand All @@ -21,7 +15,7 @@ services:
depends_on:
ensrainbow:
condition: service_healthy
postgres:
ensdb:
condition: service_healthy
devnet:
condition: service_healthy
Expand All @@ -30,14 +24,8 @@ services:
extends:
file: services/ensapi.yml
service: ensapi
environment:
# TODO: in future we will migrate devnet to chain_id=1
# need to remove `RPC_URL_15658733` in that case
RPC_URL_15658733: http://devnet:8545
RPC_URL_1: http://devnet:8545
ENSINDEXER_SCHEMA_NAME: docker_devnet_v1
depends_on:
postgres:
ensdb:
condition: service_healthy
env_file:
- path: envs/.env.docker.common
Expand All @@ -51,8 +39,6 @@ services:
extends:
file: services/ensrainbow.yml
service: ensrainbow
environment:
LABEL_SET_ID: ens-test-env
env_file:
- path: envs/.env.docker.common
required: true
Expand All @@ -76,12 +62,12 @@ services:
- path: envs/.env.docker.local
required: false

postgres:
ensdb:
extends:
file: services/postgres.yml
service: postgres
file: services/ensdb.yml
service: ensdb
env_file:
- path: ./envs/.env.docker.common
- path: envs/.env.docker.common
required: true

devnet:
Expand All @@ -94,8 +80,8 @@ volumes:
# compose file that references them — they cannot be inherited via `extends`.
# Explicit `name:` prevents collision with the base stack's volumes when both
# are run from the same directory (same project name).
postgres_data:
name: ensnode_devnet_postgres_data
ensdb_data:
name: ensnode_devnet_ensdb_data
driver: local
ensrainbow_data:
name: ensnode_devnet_ensrainbow_data
Expand Down
12 changes: 6 additions & 6 deletions docker/docker-compose.orchestrator.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Minimal compose for CI integration tests.
# Provides only the infrastructure services needed by orchestrator.ts:
# devnet (local EVM) and postgres (database).
# devnet (local EVM) and ensdb (database).
services:
devnet:
extends:
file: services/devnet.yml
service: devnet

postgres:
ensdb:
extends:
file: services/postgres.yml
service: postgres
file: services/ensdb.yml
service: ensdb
env_file:
- path: ./envs/.env.docker.common
- path: envs/.env.docker.common
required: true

volumes:
# Docker Compose requires volumes used by services to be declared in each
# compose file that references them — they cannot be inherited via `extends`.
postgres_data:
ensdb_data:
driver: local
12 changes: 6 additions & 6 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ services:
depends_on:
ensrainbow:
condition: service_healthy
postgres:
ensdb:
condition: service_healthy
env_file:
- path: envs/.env.docker.common
Expand All @@ -24,7 +24,7 @@ services:
environment:
ENSINDEXER_SCHEMA_NAME: docker_ensindexer_v1
depends_on:
postgres:
ensdb:
condition: service_healthy
env_file:
- path: envs/.env.docker.common
Expand Down Expand Up @@ -55,18 +55,18 @@ services:
- path: envs/.env.docker.local
required: true

postgres:
ensdb:
extends:
file: services/postgres.yml
service: postgres
file: services/ensdb.yml
service: ensdb
env_file:
- path: envs/.env.docker.common
required: true

volumes:
# Docker Compose requires volumes used by services to be declared in each
# compose file that references them — they cannot be inherited via `extends`.
postgres_data:
ensdb_data:
driver: local
ensrainbow_data:
driver: local
5 changes: 2 additions & 3 deletions docker/envs/.env.docker.common
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
# Shared Docker Compose environment variables
# Used by docker/docker-compose.yml and its variants


# Postgres
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password

# Internal service URLs (container-to-container)
ENSDB_URL=postgresql://postgres:password@postgres:5432/postgres
ENSDB_URL=postgresql://postgres:password@ensdb:5432/postgres
ENSRAINBOW_URL=http://ensrainbow:3223

# ENS Admin
# ENSAdmin
ENSADMIN_PUBLIC_URL=http://localhost:4173
NEXT_PUBLIC_SERVER_CONNECTION_LIBRARY=http://localhost:4334
16 changes: 16 additions & 0 deletions docker/envs/.env.docker.devnet
Original file line number Diff line number Diff line change
@@ -1,6 +1,22 @@
# Default configuration for devnet docker-compose stack.
# These values work out of the box — override by creating .env.docker.local.

# ENSIndexer
PLUGINS=subgraph,ensv2
# ENSIndexer and ENSRainbow
NAMESPACE=ens-test-env
# ENSIndexer and ENSApi
ENSINDEXER_SCHEMA_NAME=docker_devnet_v1
# ENSIndexer and ENSApi
RPC_URL_1=http://devnet:8545
# ENSIndexer and ENSRainbow
LABEL_SET_VERSION=0
# ENSIndexer and ENSRainbow
LABEL_SET_ID=ens-test-env
# ENSRainbow
DB_SCHEMA_VERSION=3


# TODO: in future we will migrate devnet to chain_id=1
# need to remove `RPC_URL_15658733` in that case
RPC_URL_15658733=http://devnet:8545
2 changes: 1 addition & 1 deletion docker/services/ensadmin.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
ensadmin:
container_name: ensadmin
image: ghcr.io/namehash/ensnode/ensadmin:latest
image: ghcr.io/namehash/ensnode/ensadmin:${ENSNODE_TAG:-1.10.1}
build:
dockerfile: ./apps/ensadmin/Dockerfile
context: ../..
Expand Down
2 changes: 1 addition & 1 deletion docker/services/ensapi.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
ensapi:
container_name: ensapi
image: ghcr.io/namehash/ensnode/ensapi:latest
image: ghcr.io/namehash/ensnode/ensapi:${ENSNODE_TAG:-1.10.1}
build:
dockerfile: ./apps/ensapi/Dockerfile
context: ../..
Expand Down
6 changes: 3 additions & 3 deletions docker/services/postgres.yml → docker/services/ensdb.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
services:
postgres:
container_name: postgres
ensdb:
container_name: ensdb
image: postgres:17
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ensdb_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
Expand Down
2 changes: 1 addition & 1 deletion docker/services/ensindexer.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
ensindexer:
container_name: ensindexer
image: ghcr.io/namehash/ensnode/ensindexer:latest
image: ghcr.io/namehash/ensnode/ensindexer:${ENSNODE_TAG:-1.10.1}
build:
dockerfile: ./apps/ensindexer/Dockerfile
context: ../..
Expand Down
2 changes: 1 addition & 1 deletion docker/services/ensrainbow.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
ensrainbow:
container_name: ensrainbow
image: ghcr.io/namehash/ensnode/ensrainbow:latest
image: ghcr.io/namehash/ensnode/ensrainbow:${ENSNODE_TAG:-1.10.1}
build:
dockerfile: ./apps/ensrainbow/Dockerfile
context: ../..
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ For all available commands and configuration options, see the [Deploying with Do

### Stopping the Applications

To stop the running applications, you can press `Ctrl + C` in the terminal where Docker Compose is running. To remove the containers and networks:
To stop detached Docker Compose stacks and remove the containers and networks:

```bash
docker compose -f docker/docker-compose.yml down
Expand Down
Loading
Loading