Docker
Run Sieve with Docker Compose or build your own image.
Docker Compose
sieve init --docker docker compose up -d
Creates sieve.toml, .env, abis/, and docker-compose.yml. Starts PostgreSQL and Sieve with GraphQL API on port 4000. Credentials come from .env. Edit sieve.toml for your contracts, or use the default USDC Transfer config.
Manual build
docker build -t sieve . docker run \ -v ./sieve.toml:/app/sieve.toml:ro \ -v ./abis:/app/abis:ro \ -p 4000:4000 -p 30303:30303 -p 30303:30303/udp \ sieve --database-url postgres://... --api-port 4000
Config and ABIs are mounted as volumes, not baked into the image. One image works for dev, staging, and production.
Networking
Port 30303 (TCP + UDP) must be reachable from the internet for Ethereum P2P peer discovery. If you're behind NAT or a firewall, make sure this port is forwarded.
Use sieve peers to test connectivity before running the full indexer. It reports peer count and chain head every 5 seconds, useful for diagnosing Docker/NAT issues.
Multiple instances
You can run multiple Sieve instances on the same machine. Each instance needs its own P2P port, database, and config. Use --p2p-port or [p2p] port in TOML to avoid port conflicts. Speed is not affected. Sieve discovers peers outbound.