讲解 config.ini 之前,首先需要大家根据我的另一篇文章 “FISCO BCOS 实战教程(二) build_chain.sh 搭链“ 了解如何搭建。本篇文章为 “FISCO BCOS 实战教程(二) build_chain.sh 搭链“ 承接,没有阅读上一篇文章的小伙伴需要先去阅读上一篇。
下载 build_chain.sh 后,执行如下命令搭建一条 4 节点的链。搭建成功,可以看到如下输出。
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545
进入到 nodes/127.0.0.1 目录,执行 ./start_all.sh ,启动节点,看到 successfully 字样,表示节点启动成功。
1. 下载 console
下民的实验会用到 console , 所以这里我们先下载 console,下载的方式很简单,在 nodes/127.0.0.1 目录下有个 download_console.sh 脚本,直接执行执行 ./download_console.sh ,可以看到 console 下载并解压成功。这里下载的时候 console v2.7.1 版本,如果后续 console 有版本更新,可能会下载最新的版本,为了演示的一致性,如果自动下砸的版本不一致,建议大家到 github 官网 上下载对应的 v2.7.1 的 console 版本。
2. 配置 console
console 下载成功后,还不能直接使用,需要进行下配置。console 的具体使用配置,可以查看我的另一篇关于 console 使用的文章,这里大家可以暂时先照着配置即可。进入到 console/conf 目录,可以看到如下三个文件,其中一个是 config-example.toml 。执行如下命令,复制 config-example.toml 为 config.toml 文件。因为 console 启动使用的配置文件名为 config.toml 。同时,复制 sdk 证书到当前的 conf 目录下。好了,至此,console 的配置完成了。我们可以开始启动
cp config-example.toml config.toml
# 在当前 conf 目录下复制 sdk 证书
cp ../../sdk/* .
3. 启动 console
进入到 nodes/127.0.0.1/console 目录,执行 ./start.sh 命令,可以看到如下输出,表示 console 连接节点成功。如果连接节点失败,可以查看我的另一篇关于 console 的文章。( 输入 quit 即可退出 console )
4. config.ini 配置详解之 rpc
4.1 rpc 之 listen_ip 配置详解
进入到 nodes/127.0.0.1/node0 目录,查看 config.ini 文件,可以看到 rpc 下面有 4 个配置项,下面讲解下这 4 个配置项分别有什么用。
首先我们看到 channel_listen_ip 这个配置项为 0.0.0.0 。这里的 0.0.0.0 表示接受任意地址的客户端发过来的 channel 请求 ( 长连接请求,不懂的同学可以去学习下 tcp/ip 方面的知识 ) 。这里对 channel 请求进行简单讲解下。channel 请求可以理解为一个长时间的聊天群,想发消息的时候,客户端或是服务端直接往这个群里发消息,对端可以直接收到,并进行相应。不想发消息的时候,让它空闲就可以了。那么 rpc 呢,就是一次性的聊天群,发送一个消息后,如果对端接受到并返回了响应,那么接受到响应后,这个群就解散了,你就找不到对方。下次想要再发送消息,就要再次建一个一次性群。
这里,我们保持 node0/config.ini 中的 channel_listen 为 0.0.0.0,然后我们使用如下命令获取本机的 IP 地址。执行 ifconfig, 在其中找到对应的本机 ip 地址。我这里的网卡对应的是 en1, IP 为 10.39.196.205 ,对应大家自己的 ip 会不同,总之,执行 ifconfig ,然后找到 inet 和 broadcast 都有值的哪个网卡,然后去 inet 的值就对了。
接下来,我们修改下console/conf/config.toml 文件,修改其中的 peers 配置如下。config.toml 文件中, peers 默认的配置为 peers=["127.0.0.1:20200", "127.0.0.1:20201"], 这里大家去本机的 inet ,然后修改为 peers=["本机inet:20200"], 记住,这里的 10.39.196.205 是作者的 IP 地址,大家一定要修改为自身机器对应的 IP 地址。
修改成功后,在 nodes/127.0.0.1/console 目录下执行 ./start.sh 。哎,还是能连接成功,没有什么区别啊。别急,下面继续实验。 再次提醒下,在 console 中输入 quit 即可退出 console 。
现在让我们修改下 nodes/127.0.0.1/node0/config.ini 中的 channel_listen_ip 地址。修改为 127.0.0.1 ,修改后保存退出。这里,修改 fisco-bcos 节点的配置后,需要重启节点才能使配置生效。所以我们这里重启下 node0 节点。在 127.0.0.1/node0 目录下,执行 ./stop.sh; ./start.sh 即可重启,可以看到如下输出。表示节点重启成功。
让我们再次进入到 nodes/127.0.0.1/console 目录,执行 ./start.sh 。这次,我们看到有错误信息提示。这是因为,node0 配置的 channel_listen_ip 是 127.0.0.1 ,而 console 配置中使用的连接 IP 是 10.39.196.205 ,导致 node0 拒绝接受 console 的连接。那么要怎么解决呢。两种方法,第一种就是一开始的,把 node0/config.ini 中的 channel_listen_ip 配置为 0.0.0.0 ,那么就可以连接成功了,第二种就是修改 console/config.tom 种的连接 ip。
这里我们修改 console/config.toml 的连接 ip 为 127.0.0.1。如下所示,我们修改 peers 为 peers=["127.0.0.1:20200"]。重点提示,这里的 127.0.0.1 是本机回环 ip 地址,如果把 console 移到另一个机器上,使用 127.0.0.1 连接还是会失败的。具体什么是回环 IP,这里不进行解释了,大家可以百度下,有详细的教程指导。修改成功后,再次进入到 nodes/127.0.0.1/console 目录,执行 ./start.sh ,可以看到,连接又成功了。所以,节点连接失败的时候,要检查下节点和 console 的配置是否匹配。
4.2 rpc 之 listen_port 配置详解
讲解了 listen_ip 后,再来看下 listen_port 的配置。还是以 node0 配置为例,我们注意到,channel_listen_port 为 20200,在 console/conf/config.toml 中,我们配置的 peers 中也是 20200, 我们尝试下修改这个值看看。
进入到 127.0.0.1/console/conf 目录,编辑 config.toml ,修改 peers 中的端口为其他值,如 23000,修改成功后,保存退出。
接着,进入到 nodes/127.0.0.1/console 目录,执行 ./start.sh , 我们看到,执行失败了。对于这个值,在 console 中的配置一定要严格匹配 node0 中的配置。那么,又出现了另一个问题,node0 中的这个值是否可以修改呢? 答案当时是可以的。
修改之前,我们先要确认修改后的端口没有被占用。比如我想修改 node0 的端口为 24000 ,那么在 node0 的机器上执行 "netstat -an|grep -i 24000" 。作者本机这里没有任何输出,表示端口没有被占用,如果读者执行后,有显示输出,可以换其他端口,比如 24001, 直到没有任何信息输出为止。
确认 24000 端口没有被占用后,就可以修改 node0 的 channel_listen_port 了。进入 nodes/127.0.0.1/node0 目录,修改 config.ini 中的 channel_listen_port 如下。修改成功,然后保存退出,之后重启 node0 节点。
node0 重启成功,然后我们重新配置下 console/conf/config.toml 文件的配置,然后验证下 node0 的配置是否生效。进入到 console/conf/ 目录,修改 config.toml 内容如下。
进入到 nodes/127.0.0.1/console 目录,启动 console。 我们看到,启动成功了,console 连接 node0 成功。这里,可能会有小伙伴会问,console/conf/config.toml 中 peers 的配置默认不是有多个吗,怎么这里只配置了一个呢? 这里是为了演示需要,所以只配置了一个,在我的另一篇文章 console 详解中,会描述具体 console 的配置。这里大家了解即可。
4.4 还原配置
为了后续章节的验证一致性,这里还原下 node0 和 console 的配置。进入nodes/127.0.0.1/node0 目录,修改 config.ini 中 channel_listen_ip 和 channel_listen_port 如下。然后重启 node0。
进入到 nodes/127.0.0.1/console/conf 目录,修改 config.toml 如下
4.3 rpc 配置详解总结
这里,我们详细讲解了 rpc 配置项中 channel_listen_ip 和 channel_listen_port 的作用。那么 jsonrpc_listen_ip, jsonrpc_listen_port 的作用呢? 一样的,只不过是 jsonrpc_listen_ip, jsonrpc_listen_port 使用的场景不同,具体可以参考 FISCO BCOS 官网 进行详细了解。因为内容较多,所以剩余部分的讲解将在后续篇中讲解。