BlockScout 浏览器搭建教程
BlockScout 是一个开源的以太坊浏览器,如官方所说
BlockScout is an Elixir application that allows users to search transactions, view accounts and balances, and verify smart contracts on the Ethereum network including all forks and sidechains.
Currently available full-featured block explorers (Etherscan, Etherchain, Blockchair) are closed systems which are not independently verifiable. As Ethereum sidechains continue to proliferate in both private and public settings, transparent, open-source tools are needed to analyze and validate transactions.
这里用它来为我们自己的公链(基于以太坊)搭建一个浏览器。
准备
安装之前我们需要先准备运行 BlockScout 所需要的环境,根据官方提供的信息我们需要先安装以下环境
Dependency | Mac | Linux |
---|---|---|
Erlang/OTP 23 | brew install erlang |
Erlang Install Example |
Elixir 1.10.x | brew install elixir |
Elixir Install Example |
Postgres 10.3+,11,12 | brew install postgresql |
Postgres Install Example |
Node.js 14.x.x | brew install node |
Node.js Install Example |
Automake | brew install automake |
Automake Install Example |
Libtool | brew install libtool |
Libtool Install Example |
Inotify-tools | Not Required | Ubuntu - apt-get install inotify-tools |
GCC Compiler | brew install gcc |
GCC Compiler Example |
GMP | brew install gmp |
Install GMP Devel |
Make | - | sudo apt install make if Debian 9 |
G++ Compiler | - | sudo apt install g++ if Debian 9 |
Rust | - | Install Rust |
Erlang 安装
根据官方提供 Demo
我们需要分别运行以下命令
wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_23.2.1-1~centos~7_amd64.rpm
yum install -y wxGTK-devel unixODBC-devel
yum install -y esl-erlang_23.2.1-1~centos~7_amd64.rpm
安装完成之后查看是否安装成功,成功界面如下
[root@test]# erl
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Eshell V10.0.5 (abort with ^G)
Elixir 安装
分别执行以下命令
wget https://github.com/elixir-lang/elixir/releases/download/v1.10.0/Precompiled.zip
unzip Precompiled.zip -d /opt/elixir
之后配置环境变量
vi /etc/profile
然后在行末加入
export PATH="$PATH:/opt/elixir/bin"
然后让配置生效
source /etc/profile
最后验证是否成功安装
[root@test]# elixir -v
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]
Elixir 1.9.4 (compiled with Erlang/OTP 20)
PostgresSQL安装
依次执行如下命令
# Install the repository RPM:
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# Install PostgreSQL:
yum install postgresql12-server
# Optionally initialize the database and enable automatic start:
/usr/pgsql-12/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12
# Initialize environment variables
# export PATH="/usr/pgsql-12/bin:$PATH"
# export LD_LIBRARY_PATH="/usr/pgsql-12/lib"
export PATH="$PATH:/opt/elixir/bin:/usr/pgsql-12/bin"
export LD_LIBRARY_PATH="/usr/pgsql-12/lib"
修改数据库的访问权限
vi /var/lib/pgsql/12/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all md5
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
设置允许远程访问数据库
vi /var/lib/pgsql/12/data/postgresql.conf
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
然后重启数据库
systemctl restart postgresql-12
之后修改 postgres
账户的默认密码
# 切换到postgres账户
su postgres
# 进入SQL Shell
psql
# 键入如下指令,修改密码,笔者将密码修改为postgres。
ALTER USER postgres WITH PASSWORD 'postgres';
# 键入 “\q”退出SQL Shell,键入exit登出postgres账户
\q
exit
# 最后,测试一下是否修改成功,键入密码
psql -h 127.0.0.1 -p 5432 -U postgres -W
修改数据库存储目录
# 停掉数据库
service postgresql-12 stop
# 将旧数据复制到新的目录
cp -rf /var/lib/pgsql/12/ /vdb1/blockscout/pgsql/12/
# 设置用户和权限
chown -R postgres:postgres /vdb1/blockscout/pgsql/12/
chmod 700 /vdb1/blockscout/pgsql/12/
# 修改配置文件数据存储目录路径
find / -name postgresql-12.service
vi /usr/lib/systemd/system/postgresql-12.service
修改新的路径
# Location of database directory
Environment=PGDATA=/vdb1/blockscout/pgsql/12/data
# 重启数据库服务
service postgresql-12 start
# 验证修改是否生效
su postgres
psql
show data_directory;
安装PostGIS
yum -y install epel-release
yum install postgis30_12.x86_64 postgis30_12-client.x86_64 postgis30_12-debuginfo.x86_64 postgis30_12-devel.x86_64 postgis30_12-docs.x86_64 postgis30_12-gui.x86_64 postgis30_12-utils.x86_64
安装NodeJs
依次运行一下命令
# 下载源代码包
wget https://nodejs.org/dist/v15.8.0/node-v15.8.0-linux-x64.tar.xz
# 解压源代码包
tar -xf node-v15.8.0-linux-x64.tar.xz
# 重命名
mv node-v15.8.0-linux-x64 nodejs
# 设置软连接,必须指定到可执行的node、npm文件哦~
ln -s /vdb1/blockscout/nodejs/bin/node /usr/bin/node
ln -s /vdb1/blockscout/nodejs/bin/npm /usr/bin/npm
# 设置环境变量,请根据你的安装目录进行设置
export PATH="$PATH:/vdb1/blockscout/nodejs/bin"
测试安装是否成功
node -v
npm -v
安装Automake
yum --enablerepo=epel group install -y "Development Tools"
安装Libtool
yum install -y libtool
安装Inotify-tools
yum install inotify-tools
安装GCC Compiler
yum install -y gcc-c++
安装GMP
yum --enablerepo=epel install -y gmp-devel
安装Make
yum install make
安装Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
部署BlockScout
拉取源码
git clone https://github.com/poanetwork/blockscout
cd blockscout
生成 secret_key_base
,时间比较久需要耐心等待
mix deps.get
mix phx.gen.secret
然后添加环境变量
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/blockscout"
export DB_HOST=localhost
export DB_PASSWORD=postgres
export DB_PORT=5432
export DB_USERNAME=postgres
export SECRET_KEY_BASE="your key"
export ETHEREUM_JSONRPC_VARIANT=geth
export ETHEREUM_JSONRPC_HTTP_URL="http://localhost:8545"
export ETHEREUM_JSONRPC_WS_URL="ws://localhost:8545"
export SUBNETWORK= MAINNET
export PORT=4000
export COIN="Test Coin"
安装Mix依赖和编译应用程序
mix do deps.get
mix do local.rebar --force
mix do deps.compile
mix do compile
删除、创建和迁移数据库
mix do ecto.drop, ecto.create, ecto.migrate
安装Node.js依赖
cd apps/block_scout_web/assets
npm install && node_modules/webpack/bin/webpack.js --mode production
如果出现如下错误
gyp WARN EACCES current user does not have permission to access the dev dir "/root/.cache/node-gyp/12.16.1"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak/.node-gyp"
gyp WARN install got an error, rolling back install
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak/.node-gyp'
gyp ERR! System Linux 3.10.0-1127.13.1.el7.x86_64
gyp ERR! command "/vdb1/blockscout/nodejs/bin/node" "/vdb1/blockscout/nodejs/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /vdb1/blockscout/blockscout/apps/block_scout_web/assets/node_modules/keccak
gyp ERR! node -v v12.16.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] rebuild: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] rebuild script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
Keccak bindings compilation fail. Pure JS implementation will be used.
尝试执行命令
sudo npm install && node_modules/webpack/bin/webpack.js --mode production -g --unsafe-perm
建立用于部署的静态资产,执行命令
cd apps/block_scout_web/
mix phx.digest
启用HTTPS
cd apps/block_scout_web/
mix phx.gen.cert blockscout blockscout.local
然后配置 /etc/hosts
vi /etc/hosts
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 blockscout blockscout.local
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 blockscout blockscout.local
启动应用
回到项目根目录执行命令
mix phx.server
最后打开浏览器做测试
http://localhost:4000
修改默认配置,修改UI后面有时间再写吧。