简介

BlockScout是一个Elixir应用程序,允许用户搜索以太坊网络(包括所有叉子和侧链)上的交易,查看账户和余额以及验证智能合约。BlockScout为用户提供了一个全面,易于使用的界面,以查看,确认和检查EVM(以太坊虚拟机)区块链上的交易。这包括POA网络,xDai链,以太坊经典和其他以太坊测试网,专用网络和侧链

当前可用的全功能区块浏览器(Etherscan,Etherchain,Blockchair)是无法独立验证的封闭系统。随着以太坊侧链在私人和公共场所中不断扩散,需要透明,开源的工具来分析和验证交易。

前提条件

部署BlockScout需先先搭建的环境,各个组件版本信息请参考官方最新情报

组件版本获取方式
Erlang/OTP 2221.0.5Download
Elixir1.9.1-4Download | 1.9.1-4
PostgresSQL10.3+Download
PostGIS参考映射表Download
 Node.js12.x.xDownload
Automake最新yum源
Libtool最新yum源
Inotify-tools最新yum源
GCC Compiler最新yum源
GMP最新yum源
Make最新yum源

Erlang安装

根据上述表格提供的下载源下载对应版本的rpm包,之后通过如下命令进行操作:

wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_21.0.5-1~centos~7_amd64.rpm
yum install -y wxGTK-devel unixODBC-devel
yum install -y esl-erlang_21.0.5-1~centos~7_amd64.rpm

通过输入如下命令验证安装成功与否,可以看到如下输出则表明安装成功:

[root@instance-1qe7wevm block_scout]# 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)
1> 

Elixir安装

Elixir是一种动态的功能语言,旨在用于构建可伸缩和可维护的应用程序。有关Elixir,安装和文档的更多信息, 请访问Elixir的网站

Elixir和Erlang版本是对应的,请勿随意改变安装的版本哦~

根据上述表格提供的下载源下载对应版本的rpm包,之后通过如下命令进行操作:

wget https://github.com/elixir-lang/elixir/releases/download/v1.9.4/Precompiled.zip
unzip Precompiled.zip -d /opt/elixir

配置环境变量,接下来在进行其他组件安装时我将不再演示编辑操作的指令:

vim /etc/profile
# 键入vim /etc/profile 在末尾添加如下内容

export PATH="$PATH:/opt/elixir/bin"

# 生效环境变量

source /etc/profile

# 或者使用
. /etc/profile

通过输入如下命令验证安装成功与否,可以看到如下输出则表明安装成功:

[root@instance-1qe7wevm block_scout]# 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.1 (compiled with Erlang/OTP 20)


[root@instance-1qe7wevm block_scout]# mix help
mix                   # Runs the default task (current: "mix run")
mix app.start         # Starts all registered apps
mix app.tree          # Prints the application tree
mix archive           # Lists installed archives
mix archive.build     # Archives this project into a .ez file
mix archive.install   # Installs an archive locally
……

 PostgresSQL安装

PostgreSQL是一个功能强大的开源对象关系数据库系统,经过30多年的积极开发,在可靠性,功能健壮性和性能方面赢得了极高的声誉。

当前版本BlockScout要求PostgresSQL必须是10.3+以上版本,这里选择安装最新的12版进行安装演示。

进入官方下载页,根据你的系统选择环境,如果你和笔者是相同环境,请依次将Select version选中为12、将Select platform选中为CentOS7、将Select architecture选中为x86_64,最终将生成安装指令:

接下来我们依次执行安装指令:

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装RPM存储库
yum install postgresql12

# 安装客户端软件包
yum install postgresql12-server

# 初始化数据库
/usr/pgsql-12/bin/postgresql-12-setup initdb

# 设置PostgreSQL服务为开机启动
systemctl enable postgresql-12

# 启动PostgreSQL服务
systemctl start postgresql-12

# 配置环境变量,/usr/pgsql-12/bin 是默认安装目录
export PATH="/usr/pgsql-12/bin:$PATH"
export LD_LIBRARY_PATH="/usr/pgsql-12/lib"

安装完成之后我们还需要进行一些初始化操作:

修改postgres账号密码

PostgreSQL安装成功之后,会默认创建一个名为postgres的Linux用户,初始化数据库后,会有名为postgres的数据库,来存储数据库的基础信息,例如用户信息等等,相当于MySQL中默认的名为mysql数据库

postgres数据库中会初始化一名超级用户 postgres

为了方便我们使用postgres账号进行管理,我们可以修改该账号的密码。

# 切换到postgres账户
su postgres

# 进入SQL Shell
psql

# 键入如下指令,修改密码,笔者将密码修改为123456。
ALTER USER postgres WITH PASSWORD '123456';

# 键入 “\q”退出SQL Shell,键入exit登出postgres账户
\q

exit

# 最后,测试一下是否修改成功,键入密码
psql -h 127.0.0.1 -p 5432 -U postgres -W

修改数据库访问权限

此外我们还需要修改数据的访问权限:

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                                     peer
#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident
host    all              all             0.0.0.0/0               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)

最后我们重启数据库

systemctl restart postgresql-12

安装PostGIS

为了避免部署BlockScout过程中创建表示出现的ERROR: could not open extension control异常,我们需要为PostgreSQL安装PostGIS拓展插件。

不同PostgreSQL版本需要安装的PostGIS版本也不相同,请参考映射表格进行安装。

在这里我们就不进行安装演示了,详细请参考这位博主的文章<勇士请单击发现这片大陆>。

注意配置

安装NodeJs

# 下载源代码包
wget https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz

# 解压源代码包
tar -xf node-v12.16.1-linux-x64.tar.xz

# 重命名
mv node-v12.16.1 node

# 设置软连接,必须指定到可执行的node、npm文件哦~
ln -s /node安装目录/bin/node /usr/bin/node
ln -s /node安装目录/bin/npm /usr/bin/npm


# 设置环境变量,请根据你的安装目录进行设置
export PATH="$PATH:/mnt/block_scout/node/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

手动部署

1、拉取源码:

git clone https://github.com/poanetwork/blockscout

cd blockscout

2、添加数据库连接环境变量:

export DATABASE_URL="postgresql://postgres:123456@172.16.0.49:5432/blockscout"

export DB_HOST=172.16.0.49
export DB_PASSWORD=123456
export DB_PORT=5432
export DB_USERNAME=postgres

3、添加secret_key_base环境变量:

export SECRET_KEY_BASE="VTIB3uHDNbvrY0+60ZWgUoUBKDn9ppLR8MI4CpRz4/qLyEFs54ktJfaNT6Z221No"

或者你也可以先生成一个新的secret_key_base,生成过程中请耐心等待:

# mix 由elixir提供,请务必保证elixir成功安装
mix phx.gen.secret

若服务器在内陆,可能会出现获取依赖超时现象,自然报错后请重试!

4、如果您以前已经部署过,请从先前的版本中删除静态资产:

mix phx.digest.clean

5、配置客户端连接

BlockScout目前支持Parity(默认),Geth和Ganache三种形式的客户端连接,这里我们使用infura.io提供的免费API,如果你还没有infura.io可以去https://infura.io/申请。

创建一个项目
创建一个Demo项目
命名为“demo”
命名为demo

 

选择ropsten网络并复制API连接
选择ropsten网络并复制API连接

 Ok,最后我们将生成的API配置到环境变量中:

export ETHEREUM_JSONRPC_VARIANT=geth
export ETHEREUM_JSONRPC_HTTP_URL="https://ropsten.infura.io/v3/ed0e4d0e188240e7a0eeb68664000000"

单击了解BlockScout的更多环境变量配置参考

6、安装Mix依赖,并对其进行编译并编译应用程序:

mix do deps.get, local.rebar --force, deps.compile, compile

# 或者你也可以将其拆解开之后执行,这样有助于你更细错误信息

mix do deps.get

mix do local.rebar --force

mix do deps.compile

mix do compile

再次进行友谊提醒,若服务器在内陆,可能会出现获取依赖超时现象,自然报错后请重试!

7、删除、创建和迁移数据库

mix do ecto.drop, ecto.create, ecto.migrate

请注意,ecto.drop将从数据库中删除所有数据。如果您不想丢失所有数据,请不要在生产中执行它!

8、安装Node.js依赖

cd apps/block_scout_web/assets

npm install && node_modules/webpack/bin/webpack.js --mode production

cd -

cd apps/explorer 

npm install

cd -

若出现EACCES: permission denied异常错误,请尝试进行如下操作:

sudo chmod -R 777 缺少权限的账户

如果还不起作用,请尝试:

sudo npm install && node_modules/webpack/bin/webpack.js --mode production -g --unsafe-perm

# 或

sudo npm install -g --unsafe-perm

sudo node-gyp rebuild -g --unsafe-perm

9、建立用于部署的静态资产

mix phx.digest

10、启用HTTPS。Phoenix服务器仅与HTTPS一起运行。

cd apps/block_scout_web

mix phx.gen.cert blockscout blockscout.local

cd -

# 将blockscout和blockscout.local添加到您的 /etc/hosts

vim /etc/hosts

127.0.0.1       localhost blockscout blockscout.local

255.255.255.255 broadcasthost

::1             localhost blockscout blockscout.local

如果使用Chrome,请启用chrome://flags/#allow-insecure-localhost

11、返回到源码根目录并启动Phoenix Server

mix phx.server

OK,到这里基本就结束了安装过程。

最后,在浏览器输入http://172.16.0.49:4000/见到如下界面则表示部署成功:

 

参考文献:

https://docs.blockscout.com/for-developers/information-and-settings/requirements

https://docs.blockscout.com/for-developers/manual-deployment —— 手动部署

https://github.com/blockscout/docs/blob/master/for-developers/manual-deployment/README.md

https://blog.csdn.net/twingao/article/details/103538914 —— PostgreSQL 12 安装-CentOS 7

https://ken.io/note/centos7-postgresql12-install-and-configuration —— 在CentOS 7上安装&配置PostgreSQL 12

https://github.com/tracyhenry/Kyrix/issues/80 —— could not open extension control file Error

https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS —— PostgreSQL与PostGIS版本映射表

https://zhuanlan.zhihu.com/p/109612181 —— Centos7安装nodejs

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐