Containerized Deployment

Deploy the OpenScan.AI explorer stack from pre-built container images using Docker Compose. This is the fastest path to a production-capable explorer on a single server.


Prerequisites

  • A Linux server with Docker and the Compose plugin installed
  • A synced EVM node with JSON-RPC and tracing (see Chain Node Layer)
  • DNS pointing at your server if you want a public hostname

Step 1 — Create the Compose File

Create a working directory and a docker-compose.yml:

services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: explorer
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: explorer_db
volumes:
- pgdata:/var/lib/postgresql/data
indexer:
image: ghcr.io/openscanai/indexer:latest
restart: unless-stopped
depends_on:
- postgres
env_file: .env
api:
image: ghcr.io/openscanai/api:latest
restart: unless-stopped
depends_on:
- postgres
ports:
- "4000:4000"
env_file: .env
frontend:
image: ghcr.io/openscanai/frontend:latest
restart: unless-stopped
depends_on:
- api
ports:
- "3000:3000"
env_file: .env
volumes:
pgdata:

Step 2 — Configure the Environment

Create .env next to the compose file:

Terminal window
DB_PASSWORD=choose-a-strong-password
ETHEREUM_JSONRPC_HTTP_URL=http://your-chain-node:8545
ETHEREUM_JSONRPC_TRACE_URL=http://your-chain-node:8545
CHAIN_ID=50
NEXT_PUBLIC_NETWORK_NAME="Your Chain"

Step 3 — Start

Terminal window
docker compose pull
docker compose up -d

Step 4 — Verify

  • API: curl http://localhost:4000/api/v2/blocks
  • UI: open http://localhost:3000
  • Indexer progress: docker compose logs -f indexer

Then complete the verification checklist.

Notes