一、为什么要脱离 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 网络
需要说明的是当前脚本仅支持 Linux
和 MacOS
操作系统,对 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
并安装一个名为 tps
的 chaincode
。最后脚本会调用脚本的 init
invoke
query
函数测试 chancode
的运行情况。如图:
三、写在后面
因为能力和时间问题,文档写得很粗略,如果有疑问,欢迎大家留言交流,我会尽我所能回答各位遇到的问题,脚本代码可能会有一些问题,欢迎大家 pr
和 提issue
。
https://github.com/yiwenlong/fabric-samples-nodocker