背景

最近考虑把EOS加上Fabric类似的隐私频道,这样可以满足一些特殊场景。
就是只有允许的人的才能看到解密的数据,这样既能满足区块链的特性,又能满足隐私的需求。
所以抽时间研究下Fabric实现技术细节,先从部署开始把

1. 基础环境

OS:Centos 7 x64
HyperLedger Fabric: v1.1(稍后适配v2.x)

2. 设置YUM国内源

2.1 备份原配置

sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

2.2 设置阿里YUM源

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

2.3 清理缓存并生成新的缓存

sudo yum clean all
sudo yum makecache

2.4 更新 YUM库

sudo yum update

3. Docker安装

一个完整的Docker由以下几个部分组成:
• Docker Client 客户端。
• Docker Daemon 守护进程
• Docker Image 镜像
• Docker Container 容器

3.1 卸载旧版本

sudo yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-selinux \
                docker-engine-selinux \
                docker-engine

3.2 在线安装Docke CE

yum-utils 提供的 yum-config-manager device-mapper-persistent-data 和 lvm2 是设备/存储驱动程序所需要的基础应用。

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

使用下面的命令来设置稳定存储库

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

可以选择性地启用 edge 和测试存储库,这些存储库包含 Docker 中,在默认情况下是禁
用的.具体执行命令如下

sudo yum-config-manager --enable docker-ce-edge
sudo yum-config-manager --enable docker-ce-test

也可以通过使用禁用标志来运行 yum-config-manager命令,以禁用 edge 或测试存储库,
要重新启用它可以使用 enable 标志 下面的命令禁用 edge 存储库.

sudo yum-config-manager --disable docker-ce-edge

最后, 可执行如下命令安装最新版本的 Docker CE

sudo yum install docker-ce

还能通如下命令安装指定版本的 Docker CE

sudo yum install docker-ce-<VERSION STRING>

至此,Docker 已经安装完成了,Docker 服务是没有启动的,操作系统里的 docker 组被创建,但是没有用户在这个组里。
使用下面的命令将你的用户添加到 docker 的用户组:

sudo usermod -aG docker $(yourname)

执行查询 Docker 版本号 看是否安装成功

docker --version

然后使用下面的命令可以运行hello-world程序,因为Docker中还没有hello-world程序的镜像,所以会先pull(下载)下来然后运行。

sudo docker run hello-world

3.3 Docker启动及常用命令

Docker CE 安装完成后,需要启动它并设置为开机启动
Docker 启动命令如下

# 开启 Docker
sudo service docker start
# 关闭 Docker
sudo service docker stop
# 重启 Docker
sudo service docker restart

也可以使用systemctl命令进行操作

# 开启 Docker
sudo systemctl start docker

# 关闭 Docker
sudo systemctl stop docker

# 重启 Docker
sudo systemctl restart docker

Docker 开机自启动命令如下

chkconfig docker on

或者使用

sudo systemctl enable docker
3.3.1 杀死所有正在运行的容器
docker kill $(docker ps -a -q)
3.3.2 删除所有己经停止的容器
docker rm $(docker ps -a -q)
3.3.3 删除所有镜像
docker rmi $(docker images -q)
3.3.4 强制删除所有镜像
docker rmi -f $(docker images -q)

4. Docker-Compose安装

Compose 是定义和运行多容器 Docker 应用程序的工具,可以使用 YAML 文件来配置应用
服务。然后 通过单个命令可以从配置中 建井启动所有服务。
使用 ompose 基本上是一个三步骤的过程:
(1)用 Dockerfile 定义应用程序的环境,这样它可以在任何地方复制
(2)通过docker-compose.yml 在服务中定义所启动的各个应用,这些应用将在相互隔离的
环境中同时运行。
(3)运行 docker-compose up ,启动 Compose 并运行整个应用程序

4.1 安装额外依赖包

sudo yum install epel-release

4.2 安装 python-pip

sudo yum install -y python3-pip

4.3 安装 Docker Compose

sudo pip3 install docker-compose

4.4 验证安装

docker-compose version

4.5 如果需要删除docker-conpose

sudo pip3 uninstall docker-compose

5. 安装Go

5.1 下载Go代码

先去Golang官网查看最新的版本和下载链接
下载并解压安装

wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz

或者,使用apt安装

sudo apt install golang-go
5.2 配置Go环境变量

编辑环境变量配置文件

sudo vi /etc/profile

文件最后,添加以下内容

export GOROOT=/usr/local/go
export GOPATH=/home/Surou(替换你的账户名)/goProject
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin

编辑保存并退出vi后,然后刷新环境变量,使修改立即生效

source /etc/profile

看Go版本,测试安装好正确

go version

6. Fabric环境部署

6.1 Fabric原码安装

cd $GOPATH
go get github.com/hyperledger/fabric

如果没有git先安装下

sudo yum install git

切换代码分支,此文章测试v1.1.0版本,后面再针对v2.x做最新的支持

cd $GOPATH/src/github.com/hyperledger/fabric
git checkout -b release-1.1
git branch --set-upstream-to=origin/release-1.1 release-1.1
git reset --hard origin/release-1.1

6.2 下载Fabric镜像

获取运行 Fabric 需的镜像获取有多种方式,如果仅仅是测试 Fabric 集群方案,直接进入
fabric/examples/e2e_cli 目录下,运行./download-dockerimages.sh脚本文件即可下载该工程必要
的镜像文件。
进入cli目录

cd fabric/examples/e2e_cli

运行脚本文件即可下载该工程必要的镜像文件

chmod +x ./download-dockerimages.sh
./download-dockerimages.sh // 可能因开梯子失败

Fabric/Peer 运行所需镜像如下

hyperledger/fab ic-tools
hyperledger/fabric-peer
hyperledger/fabric-couchdb
hyperrledger/fabric-ca
hyperledger/fabric-ccenv
hyperledger/fabric-baseos

fabric-tools 是本地客户端镜像,主要用来执行 Peer 点中的相关操作,如频道 智能合约等。
fabric-peer是Fabric 中网络节点镜像,从 1.0 本开始, Fabric的Peer 不再提交数据,全部由客户端完成,但 Peer 依然会对数据进行提交前的验证和背书。
fabric-couchdb 是第 方可插拔式数据库镜像 fabric-couchdb 非必须,如果不使用CouchDB ,则会默认使用 LevelDB ,相比较而言使用 CouchDB 功能性更强一些。
fabric-ca 是服务器本地 CA Server ,可以执行 fabric-ca-client 中的相关操作,实现登陆、注册及吊销等方法。

当然, Fabric 整个网络的运行不能缺少排序服务, Fabricl.O 之后新增了背书机 ,客户端在通过节点背书及合约等一系列验证后 将交易请求发送至排序服务器,排序服务在接收到客户端提交的交易后,会进行数据排序并广播同步至各个 Peer 节点, Fabric/Orderer 运行所需镜
如下:

hyperledger/fabric-orderer

如果在使用中已经有了部署生产环境的计划,则需要将共识由 Solo 改为 Kafka ,而 Kafka集群部署所需要的镜像如下:

hyperledger/fabric-kafka
hyperledger/fabric-zookeeper

通过上述步骤,可以将这些必要的镜像由 Docker 务全部下载至本地, 并最终使用Docker Compose 来启动对应的镜像服务

7. End-2-End 案例

End-2-End HyperLedger Fabric 源码中提供的 Demo ,在1.0版本中,它运行的是Solo 共识,需要 个排序服务和两个组织(每个组织包含两个节点〉组网,入门而言较为简单。而从1.1版本开始,它改成了 Kafka 共识,利用三个 Zookeeper 和四个 Kafka 组成的两个
外围集群,排序服务与节点服务的启动样本与 1.0 版本相同。

7.1 平台特定文件

HyperLedger Fabric 网络 平台部署需要一些特定的二进制文件 ,如 cryptogen,configtxgen,configtxlator,peer 等。这些二进制文件用于辅助生成证书、密钥以及各项配置文件等。
编译Fabric源代码

# 编译依赖gcc 如果没有的话,需要提前安装
sudo yum install gcc
# 源码根目录执行
make release

等待编译完成后,会在源码根目录下创建目录/release/linux-amd64/bin,并生成以下文件

configtxgen  configtxlator  cryptogen  get-docker-images.sh  orderer  peer

将上面的目录添加到环境变量
编辑环境变量配置文件

sudo vi /etc/profile

文件最后,添加以下内容

export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin

编辑保存并退出vi后,然后刷新环境变量,使修改立即生效

source /etc/profile

参考文档

  1. https://medium.com/@techgeek628/how-to-install-hyperledger-fabric-on-ubuntu-92d777dcf6a7
  2. https://zhuanlan.zhihu.com/p/44205356
  3. https://juejin.im/post/5da2c97e6fb9a04ddb3b7bc4
  4. 《HyperLedger Fabric开发实战-快速掌握区块链技术》
  5. https://medium.com/@tharindusandaruwan40/how-to-setup-hyperledger-fabric-and-work-around-first-network-in-your-windows-machine-part1-78bd0b75595c
  6. https://chainhero.io/2017/07/tutorial-build-blockchain-app/
  7. https://github.com/hyperledger/fabric-samples