快速部署 Hyperledger Fabric 测试网络 - 脱离 Docker 部署

一、为什么要脱离 Docker 部署 Fabric 网络?

1、使用 Docker 部署相对比较复杂,不适合入门学习

​在我开始学习 Fabric 的时候,由于之前没有学习使用过 Docker,所以光是弄明白如何在我的系统上安装 Docker 以及如何使用 Docker 就折腾了一段时间,在加上之后因为各种 Docker 镜像下载问题和 Docker 数据缓存、Docker镜像版本等问题,又是一顿折腾。

虽然使用 Docker 有诸多优势和便利,但我认为这样添加了很多概念,对入门学习 Docker 的人来说实在是不友好,容易让初学者迷失自己要学习的重点问题。我认为多就是没有,能让人一下子抓住重点问题的方法会是一个很有效的方法。

2、脱离 Docker 部署更容易调试 Fabric 的源码

​很多时候当我们遇到问题,一通搜索询问无法解决的时候,最直接的方法就是查看源码。通过调试源码可以更直接更准确的定位到问题。

​另外,如果使用 Docker 部署 Fabric 测试网络的调试代码话,我们每次不得不重新 make docker。每次 make docker 我都要等几分钟,甚至十几分钟,这让我很抓狂,而 go build 去编译一个节点程序仅仅需要几秒钟,便捷之处不言而喻。

​对代码调试方面更无需多说,每次修改代码、添加日志输出之后,我只需重新启动下节点即可。我甚至可以在 IDE 里面直接 debug 节点程序。这对于调试源码来说太方便了。

3、脱离 Docker 运行 Fabric 网络可以节省系统性能

​这一点其实也是我琢磨脱离 Docker 部署 Fabric 的初衷。最初是想主机上如果不运行 Docker,那意味着少了一些程序来和节点程序竞争计算机的资源,理论上应该会提升 Fabric 网络的系统性能。我测试后的数据也验证了我的猜测。

4、Fabric 2.0 的新特性使得完全脱离 Docker 部署更容易

​Fabric 2.0 添加了 chaincode external builder 功能,可以使 chaincode 以一个独立的外部服务形式运行。在 2.0 之前的版本中,chaincode 必须被编译成一个 Docker 镜像才可以运行。有了这个新特性之后 Fabric 就可以完全脱离开 Docker 去运行了。

二、使用脚本自动部署脱离 Docker 的 Fabric 网络

​需要说明的是当前脚本仅支持 LinuxMacOS 操作系统,对 Windows 操作系统的支持我会在以后添加,请持续关注我的项目。

1、Clone 脚本代码到本地

git clone https://github.com/yiwenlong/fabric-samples-nodocker

2、配置环境依赖

​对于依赖这些东西我是想了很多方法尽量减少依赖,除非非常必要,我觉得没必要让新入门学习 Fabric 的同学去花时间搞明白 Fabric 之外的其他东西,焦点聚焦在 Fabric 上面是最重要的。

在自己的主机上安装 supervisor,并启动 supervisor

考虑在不同系统上的可移植性,我在这里使用 supervisor 用于做进程管理。

对于 MacOS
# 首先去定已经安装了 homebrew,如果没有,执行以下脚本
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install supervisor
brew services start supervisor
对于 Ubuntu
apt install supervisor
systemctl start supervisor
对于 CentOS
yum install supervisor
systemctl start supervisor

配置 SUPERVISOR_CONFD_DIR 环境变量

我写了脚本自动去配置 supervisor,当节点程序需要启动的时候,boot.sh 启动脚本会在 supervisor 的配置目录下创建节点进程的启动配置文件。因此需要使用 $SUPERVISOR_CONFD_DIR 环境变量指向 supervisor 的配置目录。详细实现可以查看代码 scripts/config-scripts.sh

# MacOS
export SUPERVISOR_CONFD_DIR=/usr/local/etc/supervisor.d
# CentOS
export SUPERVISOR_CONFD_DIR=/etc/supervisord.d
# Ubuntu
export SUPERVISOR_CONFD_DIR=/etc/supervisor/conf.d

3、执行 config.sh 脚本

cd $fabric-samples-nodocker
./config.sh

config.sh 主要是去下载 Fabric 和 一个Demo chaincode 的二进制程序,执行成功后会生成以下目录:

./build/bin
./build/config
./build/chaincode

4、启动测试网络

网络配置我都是设置成可配置的,可以参照 samples/network-single-org 的配置自行配置网络节点。后面我会详细介绍如何配置以及如何使用。
使用测试网络前请先配置 /etc/hosts 文件,添加以下内容:

127.0.0.1   peer0.org1.example.com
127.0.0.1   peer1.org1.example.com
127.0.0.1   orderer0.example.com
127.0.0.1   orderer1.example.com
127.0.0.1   orderer2.example.com

如果仅仅是使用测试网络,可以直接执行以下脚本:

cd samples/network-single-org
./network up

这个脚本会自动启动节点程序、创建一个 channel 并安装一个名为 tpschaincode。最后脚本会调用脚本的 init invoke query 函数测试 chancode 的运行情况。如图:

chaincode invoke 结果

三、写在后面

因为能力和时间问题,文档写得很粗略,如果有疑问,欢迎大家留言交流,我会尽我所能回答各位遇到的问题,脚本代码可能会有一些问题,欢迎大家 pr 和 提issue

https://github.com/yiwenlong/fabric-samples-nodocker

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。