|
| 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 | +``` |
0 commit comments