From 95e0a0f7131161dd7db4c7b51889e31164923b44 Mon Sep 17 00:00:00 2001 From: Eugenio Paluello Date: Tue, 3 Sep 2024 13:42:26 +0200 Subject: [PATCH] dev: add blockscout to RPC stack (#1361) * feat: add blockscout conf to docker-compose * fix: network * fix: ETHEREUM_JSONRPC_TRACE_URL * feat: add blockscout to docker-compose.prod * feat: add blockscout to staging * feat: update readme with blockscout info --- README.md | 3 ++ docker-compose.prod.yaml | 51 +++++++++++++++++++++++++-- docker-compose.staging.yaml | 70 ++++++++++++++++++++++++++++++++----- docker-compose.yaml | 51 +++++++++++++++++++++++++-- 4 files changed, 163 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index e2faac961..30b8ea743 100644 --- a/README.md +++ b/README.md @@ -293,6 +293,7 @@ This command will use the `docker-compose.yaml` file to set up the whole infrast - Configured with MongoDB and Kakarot addresses. - **MongoDB** with Mongo Express on port 27017 for data management. +- **Blockscout** on port 4000, provides a web interface for exploring and analyzing blockchain data. ### Staging Environment @@ -343,6 +344,7 @@ This command will use the `docker-compose.staging.yaml` file to set up the whole - Configured with MongoDB and Kakarot addresses. - **MongoDB** with Mongo Express on port 27017 for data management. +- **Blockscout** on port 4001, provides a web interface for exploring and analyzing blockchain data. ### Production Environment @@ -394,6 +396,7 @@ This command will use the `docker-compose.prod.yaml` file to set up the whole in - Configured with MongoDB and Kakarot addresses. - **MongoDB** with Mongo Express on port 27017 for data management. +- **Blockscout** on port 4001, provides a web interface for exploring and analyzing blockchain data. ### Potential Pitfalls, Caveats, and Requirements diff --git a/docker-compose.prod.yaml b/docker-compose.prod.yaml index a6ce64b36..5290c917b 100644 --- a/docker-compose.prod.yaml +++ b/docker-compose.prod.yaml @@ -1,6 +1,4 @@ # trunk-ignore-all(yamllint/empty-values) -version: "3.8" - services: starknet: image: nethermind/juno:v0.11.1 @@ -62,6 +60,53 @@ services: volumes: - starknet-explorer_prod:/var/lib/postgresql/data/ + postgres: + image: postgres:13 + environment: + POSTGRES_USER: blockscout + POSTGRES_PASSWORD: postgres + POSTGRES_DB: blockscout + networks: + - internal_prod + volumes: + - postgres_data_prod:/var/lib/postgresql/data + + redis: + image: redis:6 + command: redis-server --save 60 1 --loglevel warning + networks: + - internal_prod + volumes: + - redis_data_prod:/data + + blockscout: + image: blockscout/blockscout:latest + environment: + DATABASE_URL: postgres://blockscout:postgres@postgres:5432/blockscout + DATABASE_SSL: "false" + DATABASE_POOL_SIZE: 10 + DATABASE_TIMEOUT: 5000 + ECTO_USE_SSL: "false" + BLOCKSCOUT_HOST: "0.0.0.0" + PORT: 4000 + APP_NAME: "Blockscout" + ETHEREUM_JSONRPC_VARIANT: "geth" + ETHEREUM_JSONRPC_HTTP_URL: "http://kakarot-rpc:3030" + ETHEREUM_JSONRPC_TRACE_URL: "http://kakarot-rpc:3030" + ports: + - 4001:4000 + networks: + - internal_prod + command: + [ + "/bin/sh", + "-c", + "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start" + ] + depends_on: + - postgres + - redis + kakarot-rpc: image: ghcr.io/kkrt-labs/kakarot-rpc/node:v0.6.20 pull_policy: always @@ -168,3 +213,5 @@ volumes: pgadmin_data_prod: juno_files_prod: starknet-explorer_prod: + postgres_data_prod: + redis_data_prod: diff --git a/docker-compose.staging.yaml b/docker-compose.staging.yaml index 27470361a..357b904f5 100644 --- a/docker-compose.staging.yaml +++ b/docker-compose.staging.yaml @@ -1,6 +1,4 @@ # trunk-ignore-all(yamllint/empty-values) -version: "3.8" - services: starknet: image: nethermind/juno:v0.11.1 @@ -21,7 +19,7 @@ services: --cn-l1-chain-id 11155111 --cn-l2-chain-id kkrt --cn-core-contract-address 0xc7c9ea7fD0921Cb6EDd9a3184F88cF1b821aA82B - --cn-unverifiable-range 0,0 + --cn-unverifiable-range 0,1000000 networks: - internal_staging starknet-explorer: @@ -62,6 +60,53 @@ services: volumes: - starknet_explorer_staging:/var/lib/postgresql/data/ + postgres: + image: postgres:13 + environment: + POSTGRES_USER: blockscout + POSTGRES_PASSWORD: postgres + POSTGRES_DB: blockscout + networks: + - internal_staging + volumes: + - postgres_data_staging:/var/lib/postgresql/data + + redis: + image: redis:6 + command: redis-server --save 60 1 --loglevel warning + networks: + - internal_staging + volumes: + - redis_data_staging:/data + + blockscout: + image: blockscout/blockscout:latest + environment: + DATABASE_URL: postgres://blockscout:postgres@postgres:5432/blockscout + DATABASE_SSL: "false" + DATABASE_POOL_SIZE: 10 + DATABASE_TIMEOUT: 5000 + ECTO_USE_SSL: "false" + BLOCKSCOUT_HOST: "0.0.0.0" + PORT: 4000 + APP_NAME: "Blockscout" + ETHEREUM_JSONRPC_VARIANT: "geth" + ETHEREUM_JSONRPC_HTTP_URL: "http://kakarot-rpc:3030" + ETHEREUM_JSONRPC_TRACE_URL: "http://kakarot-rpc:3030" + ports: + - 4001:4000 + networks: + - internal_staging + command: + [ + "/bin/sh", + "-c", + "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start" + ] + depends_on: + - postgres + - redis + kakarot-rpc: image: ghcr.io/kkrt-labs/kakarot-rpc/node:v0.6.19-alpha2 pull_policy: always @@ -87,7 +132,7 @@ services: restart: on-failure volumes: # Mount the indexer code - - indexer_code:/usr/src/indexer + - indexer_code_staging:/usr/src/indexer depends_on: starknet: condition: service_started @@ -95,15 +140,20 @@ services: - internal_staging apibara-dna: - extends: - file: docker-compose.yaml - service: apibara-dna + image: quay.io/apibara/starknet:1.5.0 command: - start - --rpc=http://starknet:6060 - --wait-for-rpc - --data=/data - --head-refresh-interval-ms=1000 + ports: + - 7171:7171 + volumes: + - apibara_staging:/data + networks: + - internal_staging + restart: on-failure ### MongoDB with Mongo Express mongo: @@ -141,7 +191,7 @@ services: - DEFAULT_BLOCK_GAS_LIMIT=7000000 restart: on-failure volumes: - - indexer_code:/indexer + - indexer_code_staging:/indexer networks: - internal_staging depends_on: @@ -151,6 +201,8 @@ services: networks: internal_staging: driver: bridge + internal: + driver: bridge default: driver: bridge close: @@ -163,3 +215,5 @@ volumes: pgadmin_data_staging: starknet_explorer_staging: juno_files_staging: + postgres_data_staging: + redis_data_staging: diff --git a/docker-compose.yaml b/docker-compose.yaml index e18f1799b..b1699edbf 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,5 +1,3 @@ -version: "3.2" - services: anvil: platform: linux/amd64 @@ -82,6 +80,53 @@ services: kakarot-deployer: condition: service_completed_successfully + postgres: + image: postgres:13 + environment: + POSTGRES_USER: blockscout + POSTGRES_PASSWORD: postgres + POSTGRES_DB: blockscout + networks: + - internal + volumes: + - postgres_data:/var/lib/postgresql/data + + redis: + image: redis:6 + command: redis-server --save 60 1 --loglevel warning + networks: + - internal + volumes: + - redis_data:/data + + blockscout: + image: blockscout/blockscout:latest + environment: + DATABASE_URL: postgres://blockscout:postgres@postgres:5432/blockscout + DATABASE_SSL: "false" + DATABASE_POOL_SIZE: 10 + DATABASE_TIMEOUT: 5000 + ECTO_USE_SSL: "false" + BLOCKSCOUT_HOST: "0.0.0.0" + PORT: 4000 + APP_NAME: "Blockscout" + ETHEREUM_JSONRPC_VARIANT: "geth" + ETHEREUM_JSONRPC_HTTP_URL: "http://kakarot-rpc:3030" + ETHEREUM_JSONRPC_TRACE_URL: "http://kakarot-rpc:3030" + ports: + - 4000:4000 + networks: + - internal + command: + [ + "/bin/sh", + "-c", + "bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start" + ] + depends_on: + - postgres + - redis + kakarot-rpc: image: ghcr.io/kkrt-labs/kakarot-rpc/node:v0.6.20 ports: @@ -196,3 +241,5 @@ volumes: apibara: mongo_data: indexer_code: + postgres_data: + redis_data: