简介 本指南详细介绍了如何为搭建的 Layer2 区块链网络部署 Blockscout 区块浏览器。Blockscout 是一个功能全面的开源区块链浏览器,专为以太坊虚拟机(EVM)兼容网络设计。它提供了直观的用户界面来查看交易、区块、合约和账户信息,是区块链项目不可或缺的基础设施组件。
一、系统环境准备 1.1 安装软件依赖 打开 Ubuntu-24.04 子系统
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 sudo apt update && sudo apt upgrade -ysudo apt install -y curl wget gitsudo apt install -y build-essential make g++ gcc automake libtool cmakesudo apt install -y libudev-dev libgmp-dev libgmp10 libssl-dev libncurses-devsudo apt install -y zip unzipsudo apt install -y inotify-toolsgo install github.com/asdf-vm/asdf/cmd/asdf@v0.18.0 echo 'export PATH="$HOME/go/bin:$PATH"' >> ~/.bashrcsource ~/.bashrccurl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' sudo apt updatesudo apt install postgresql-17curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y sudo apt install docker-compose
1.2 配置 asdf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 asdf plugin add erlang asdf plugin add elixir asdf plugin add nodejs asdf install erlang 27.3.4 asdf install elixir 1.17.3-otp-27 asdf install nodejs 20.17.0 asdf install nodejs 22.11.0 export PATH="$HOME /.asdf/shims:$HOME /.asdf/bin:$PATH " source ~/.bashrc
1.3 配置 Postgres 数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 su - postgres sudo -i -u postgres createuser --interactive createdb blockscout psql ALTER USER YOUR_DBUSER_NAME WITH PASSWORD 'YourSecurePassword' ; GRANT ALL PRIVILEGES ON DATABASE blockscout TO YOUR_DBUSER_NAME; \q exit sudo systemctl restart postgresqlsu - YOUR_DBUSER_NAME sudo su - YOUR_DBUSER_NAME psql -d blockscout \q exit sudo systemctl status postgresql
二、构建 Blockscout Backend 2.1 克隆 Blockscout Backend 仓库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cd ~mkdir -p blockscoutcd blockscoutgit clone https://github.com/blockscout/blockscout.git backend cd backendgit checkout v9.1.0 -b v9.1.0 mix do deps.get, local.rebar --force, deps.compile, compile mix phx.gen.secret
2.2 编辑环境变量文件 创建 env_vars.env 文件
填写以下变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 export DATABASE_URL=postgresql://YOUR_DBUSER_NAME:YourSecurePassword@localhost:5432/blockscoutexport SECRET_KEY_BASE= export ETHEREUM_JSONRPC_VARIANT=gethexport ETHEREUM_JSONRPC_HTTP_URL=http://localhost:8545export ETHEREUM_JSONRPC_WS_URL=ws://localhost:8546export ETHEREUM_JSONRPC_TRACE_URL=http://localhost:8545export API_V2_ENABLED=true export PORT=4000export MIX_ENV=prodexport CHAIN_ID=L2_CHAIN_IDexport L1_RPC=L1_RPC_URLexport COIN=ETHexport COIN_NAME="Sepolia ETH" export COINGECKO_COIN_ID=ethereumexport DISPLAY_TOKEN_ICONS=true export MICROSERVICE_SC_VERIFIER_ENABLED=true export MICROSERVICE_SC_VERIFIER_URL=http://localhost:8082/export MICROSERVICE_VISUALIZE_SOL2UML_ENABLED=true export MICROSERVICE_VISUALIZE_SOL2UML_URL=http://localhost:8081/export MICROSERVICE_SIG_PROVIDER_ENABLED=true export MICROSERVICE_SIG_PROVIDER_URL=http://localhost:8083/
加载环境变量
1 2 3 4 sudo systemctl status postgresqlmix do ecto.create, ecto.migrate
2.3 安装 Blockscout Backend 内置前端静态资源 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cd apps/block_scout_web/assetsnpm install node_modules/webpack/bin/webpack.js --mode production cd -cd apps/explorernpm install cd ../block_scout_web/mix phx.digest mix phx.gen.cert blockscout blockscout.local cd ../..
将 blockscout 和 blockscout.local 添加到 /etc/hosts:
1 2 3 127.0.0.1 localhost blockscout blockscout.local ::1 localhost blockscout blockscout.local
三、运行微服务 3.1 修改 stats.yml 1 2 cd docker-compose/servicesnano stats.yml
将 stats.yml 文件的第 49 行改为自己的 postgresql 数据库,将 localhost 改为本机 IP
1 2 3 STATS__BLOCKSCOUT_DB_URL=${STATS__BLOCKSCOUT_DB_URL:postgresql://YOUR_DBUSER_NAME:YourSecurePassword@YourIPADDR:5432/blockscout}
3.2 修改 user-ops-indexer.yml 1 nano user-ops-indexer.yml
修改 user-ops-indexer.yml 文件的第 15 和 16 行,替换自己的 postgresql 数据库和本机 IP
1 2 3 4 5 USER_OPS_INDEXER__INDEXER__RPC_URL=${USER_OPS_INDEXER__INDEXER__RPC_URL:-ws://YourIPADDR:8546/} STATS__BLOCKSCOUT_DB_URL=${STATS__BLOCKSCOUT_DB_URL:postgresql://YOUR_DBUSER_NAME:YourSecurePassword@YourIPADDR:5432/blockscout}
3.3 删除 explorer.conf.template 1 2 cd ../proxymv explorer.conf.template explorer.conf.template.backup
3.4 修改 common-stats.yml 1 2 cd ../envsnano common-stats.env
将 common-stats.yml 的第 29 行修改为自己的后端服务
1 2 STATS__BLOCKSCOUT_API_URL=http://YourIPADDR:4000
3.5 启动内置微服务 1 2 3 cd ..docker-compose -f microservices.yml up -d docker ps
此时如果 layer2 是启动状态,所有微服务都应该启动成功,如果失败查看 logs docker logs ServiceName
3.6 启动后端服务 返回 blockscout-backend 根目录并启动 Phoenix 服务器
1 2 cd ~/blockscout/backend/mix phx.server
后端应运行在 http://localhost:4000(或配置的域名)
四、构建 Blockscout Frontend 4.1 克隆 Blockscout Frontend 仓库 1 2 3 4 5 cd ~/blockscoutgit clone https://github.com/blockscout/frontend.git frontend cd frontendgit checkout v2.3.2 -b v2.3.2
在 frontend 目录下新建 .tool-versions 文件并写入:
4.2 在 configs/envs 与根目录下分别创建 .env.namepreset 和 .env 文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 NEXT_PUBLIC_APP_HOST=localhost NEXT_PUBLIC_APP_PORT=3000 NEXT_PUBLIC_APP_INSTANCE=localhost NEXT_PUBLIC_APP_ENV=development NEXT_PUBLIC_API_HOST=localhost NEXT_PUBLIC_API_PORT=4000 NEXT_PUBLIC_API_PROTOCOL=http NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL='ws' NEXT_PUBLIC_STATS_API_HOST=http://localhost:8080 NEXT_PUBLIC_VISUALIZE_API_HOST=http://localhost:8081 NEXT_PUBLIC_HOMEPAGE_CHARTS=['daily_txs' , 'coin_price' , 'market_cap' ] NEXT_PUBLIC_HOMEPAGE_HERO_BANNER_CONFIG={"background" :["rgba(27, 74, 221, 1)" ]} NEXT_PUBLIC_HOMEPAGE_STATS=['total_blocks' ,'average_block_time' ,'total_txs' ,'wallet_addresses' ,'gas_tracker' ] NEXT_PUBLIC_AD_BANNER_PROVIDER=none NEXT_PUBLIC_AD_TEXT_PROVIDER=none NEXT_PUBLIC_NETWORK_NAME="YangFan" NEXT_PUBLIC_NETWORK_ID=L2_CHAIN_ID NEXT_PUBLIC_NETWORK_CURRENCY_NAME="Sepolia ETH" NEXT_PUBLIC_NETWORK_CURRENCY_SYMBOL="ETH" NEXT_PUBLIC_NETWORK_CURRENCY_DECIMALS=18
4.3 启动前端服务 1 2 3 4 5 6 7 yarn install yarn dev:preset namepreset yarn build yarn start
后端应运行在 http://localhost:3000(或配置的域名)
Hooray!Blockscout 部署成功!!!
五、故障排查 5.1 数据库最大连接数限制 PostgreSQL 的默认最大连接数(max_connections)通常为 100 ,Blockscout 后端和多个微服务会创建大量数据库连接,占用了所有可用连接槽。此时会遇到:FATAL: sorry, too many clients already 之类的错误,此时需要修改数据库默认最大连接数
1 sudo nano /etc/postgresql/*/main/postgresql.conf
更改后需要重启 PostgreSQL
1 sudo systemctl restart postgresql
5.2 JavaScript heap out of memory yarn build 时可能会遇到 JavaScript 内存溢出,此时需要加载环境变量 NODE_OPTIONS
1 export NODE_OPTIONS="--max-old-space-size=4096"
5.3 后端连接数据库失败 在用户名和密码都正确的前提下数据库连接失败,可能时因为 PostgreSQL 数据库的认证配置限制了密码认证方式
1 sudo nano /etc/postgresql/17/main/pg_hba.conf
在 # IPv4 local connections:下添加
1 host all all 0.0.0.0/0 scram-sha-256
参考资料