背景
最近考虑把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
参考文档
- https://medium.com/@techgeek628/how-to-install-hyperledger-fabric-on-ubuntu-92d777dcf6a7
- https://zhuanlan.zhihu.com/p/44205356
- https://juejin.im/post/5da2c97e6fb9a04ddb3b7bc4
- 《HyperLedger Fabric开发实战-快速掌握区块链技术》
- https://medium.com/@tharindusandaruwan40/how-to-setup-hyperledger-fabric-and-work-around-first-network-in-your-windows-machine-part1-78bd0b75595c
- https://chainhero.io/2017/07/tutorial-build-blockchain-app/
- https://github.com/hyperledger/fabric-samples