Hyperledger Fabric 演练 - 《基于联盟区块链的政务大数据共享》
1. 背景
为了继续深入研究Fabric的加密通道逻辑,找了一个现成的例子,并修正了一个新手部署可能遇到的问题,
修正的主要点是
- 修改实例代码相对
fabric-samples
路径, - 细化一些操作步骤,方便新手傻瓜式运行
1.1 区域链(基于证书准入的联盟链)网络
1.2 业务流程时序
2. 演示系统环境
OS: Ubuntu 18.04
Fabric: release-1.4
Go: go1.14.4 linux/amd64
Docker: 19.03.11
3. 源代码仓库
gitee: https://gitee.com/BCSkill/fcc
4. 实例部署
4.1 克隆源代码
git clone https://gitee.com/BCSkill/fcc.git
4.2 部署fabric-samples运行环境
细节的话可以参考《fabric-samples 部署测试》,我们这里不做详细描述,直接运行封装好的脚本
./1-1.hy-sample.sh
大概过程中会分为几步,
- 克隆
fabric-samples
到当前源码目录 - 下载编译到好的
fabric
二进制文件,并解压到fabric-samples/bin
,记得将此目录添加到环境变量 - 拉取所需要的Docker镜像
4.3 启动示例网络,创建区块链网络(2个组织,每组织2个节点)
./1-2.startNetwork.sh
成功后输出========= All GOOD, BYFN execution completed ===========
4.4 加入第3个组织,2个节点
./2.addOrg3.sh
完成后,结果显示========= Org3 is now halfway onto your first network =========
4.5 部署政务智能合约,并实例化
./3-1.installNetcon.sh #合约:网签合同备案
./3-2.installEstateBook.sh #合约:不动产权证书
./3-3.installEstateTax.sh #合约:不动产业务缴税
完成后,结果显示
Get instantiated chaincodes on channel mychannel:
Name: estatebook, Version: 1.0, Path: github.com/chaincode/estatebook, Escc: escc, Vscc: vscc
Name: estatetax, Version: 1.0, Path: github.com/chaincode/estatetax, Escc: escc, Vscc: vscc
Name: netcon, Version: 1.0, Path: github.com/chaincode/netcon, Escc: escc, Vscc: vscc
此时链环境和链合约已经部署好了。下面开始部署项目的服务端和Web前台
4.6 编译后台。
代码位于appcode/fccserver/src 可自行编译,或直接使用已编译完成的可执行文件
chmod +x appcode/fccserver/src/fccserver
启动后台容器
./4.startAppcli.sh
docker logs -f appcli
如果启动正常,会显示
[fcc-server] 2019/12/12 03:03:55 system db initiated successfully.
[fcc-server] 2019/12/12 03:03:56 Chaincode client initialed successfully.
[fcc-server] 2019/12/12 03:03:56 Server started on :1206
4.7 编译和部署前端
前端采用VUE,也可使用其它前端框架或HTML。使用GNINX或其它WEB服务器部署编译后的前端代码。注:当前未使用登录和权限设置
前台部署依赖yarn
,《ubuntu 安装最新版本 yarn》
cd ./appcode/fcc-client // 进到Web前端代码目录
yarn install // 安装依赖
yarn serve // 运行前端
如果出现
运行成功后,就会显示访问地址
App running at:
- Local: http://localhost:8080/
- Network: http://192.168.31.134:8080/
浏览器打开地址,就能看到实例演示了
在线演示
实例依赖Docker 镜像
surou@surou:~/go/src/github.com/chaincode/netcon$ docker ps
+ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3b34643ff39 dev-peer0.org2.example.com-estatebook-1.0-08d85d200f6268a9c9656f01eac3d5325c44c1d2a93a1115168f63888a27206b "chaincode -peer.add…" 44 minutes ago Up 43 minutes dev-peer0.org2.example.com-estatebook-1.0
9828c2b46b4e dev-peer0.org2.example.com-estatetax-1.0-975867dfc12f233b11d78db94c347aa6b7e94f1d389af7cc892cb8730652c110 "chaincode -peer.add…" 45 minutes ago Up 45 minutes dev-peer0.org2.example.com-estatetax-1.0
9d62c54bfd73 dev-peer0.org2.example.com-netcon-1.0-8285fea29f8449473340c346dc0b6716a084576593325a33707353426d7298dc "chaincode -peer.add…" 46 minutes ago Up 46 minutes dev-peer0.org2.example.com-netcon-1.0
cb870db589c4 hyperledger/fabric-tools:1.4.3 "./fccserver" About an hour ago Up About an hour 0.0.0.0:1206->1206/tcp appcli
33ad280f1f17 dev-peer0.org1.example.com-estatetax-1.0-3284f6d77599d92fad2da964008b3f4bb78573eeb938f40e2110de2089455dc3 "chaincode -peer.add…" About an hour ago Up About an hour dev-peer0.org1.example.com-estatetax-1.0
fa575e9548e3 dev-peer0.org1.example.com-estatebook-1.0-1804a11c573ccbef46e7cda2314c1d76edc2fb52b0f7f9d10ed2024c03343aff "chaincode -peer.add…" About an hour ago Up About an hour dev-peer0.org1.example.com-estatebook-1.0
75c50829fbb8 dev-peer0.org1.example.com-netcon-1.0-4faf315b9f1da5832e386fbae0d05157d269cff3802d770b0e8f135a69027796 "chaincode -peer.add…" About an hour ago Up About an hour dev-peer0.org1.example.com-netcon-1.0
15d29c21ed9a hyperledger/fabric-tools:1.4.3 "/bin/bash" 2 hours ago Up 2 hours Org3cli
d0ce2cc32019 hyperledger/fabric-peer:1.4.3 "peer node start" 2 hours ago Up 2 hours 0.0.0.0:12051->12051/tcp peer1.org3.example.com
9bcf5082db71 hyperledger/fabric-peer:1.4.3 "peer node start" 2 hours ago Up 2 hours 0.0.0.0:11051->11051/tcp peer0.org3.example.com
6f76cca2d809 hyperledger/fabric-tools:latest "/bin/bash" 2 hours ago Up 2 hours cli
04d61faad751 hyperledger/fabric-peer:latest "peer node start" 2 hours ago Up 2 hours 0.0.0.0:10051->10051/tcp peer1.org2.example.com
cdbffd49d7d2 hyperledger/fabric-peer:latest "peer node start" 2 hours ago Up 2 hours 0.0.0.0:8051->8051/tcp peer1.org1.example.com
d59fe735b96d hyperledger/fabric-peer:latest "peer node start" 2 hours ago Up 2 hours 0.0.0.0:9051->9051/tcp peer0.org2.example.com
4caeb0c062e0 hyperledger/fabric-peer:latest "peer node start" 2 hours ago Up 2 hours 0.0.0.0:7051->7051/tcp peer0.org1.example.com
431ad6029954 hyperledger/fabric-ca:latest "sh -c 'fabric-ca-se…" 2 hours ago Up 2 hours 7054/tcp, 0.0.0.0:8054->8054/tcp ca_peerOrg2
4d69e9f76b1b hyperledger/fabric-couchdb "tini -- /docker-ent…" 2 hours ago Up 2 hours 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb0
1bcd9f89625f hyperledger/fabric-couchdb "tini -- /docker-ent…" 2 hours ago Up 2 hours 4369/tcp, 9100/tcp, 0.0.0.0:6984->5984/tcp couchdb1
cb46fd7307cf hyperledger/fabric-couchdb "tini -- /docker-ent…" 2 hours ago Up 2 hours 4369/tcp, 9100/tcp, 0.0.0.0:8984->5984/tcp couchdb3
ac996671c144 hyperledger/fabric-orderer:latest "orderer" 2 hours ago Up 2 hours 0.0.0.0:7050->7050/tcp orderer.example.com
c13cc3241b96 hyperledger/fabric-ca:latest "sh -c 'fabric-ca-se…" 2 hours ago Up 2 hours 0.0.0.0:7054->7054/tcp ca_peerOrg1
01ce681daa6c hyperledger/fabric-couchdb "tini -- /docker-ent…" 2 hours ago Up 2 hours 4369/tcp, 9100/tcp, 0.0.0.0:7984->5984/tcp couchdb2
参考
Chaincode installation on peer0.org1 has failed
v1.4 版本执行 ./byfn.sh up
时,报如下错误
Error: error getting chaincode deployment spec for mycc: error getting chaincode package bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric/core/chaincode/shim
!!!!!!!!!!!!!!! Chaincode installation on peer0.org1 has failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
跟脚本代码是从(github)以下逻辑报出的
installChaincode() {
PEER=$1
ORG=$2
setGlobals $PEER $ORG
VERSION=${3:-1.0}
set -x
peer chaincode install -n mycc -v ${VERSION} -l ${LANGUAGE} -p ${CC_SRC_PATH} >&log.txt // 此处
res=$?
set +x
cat log.txt
verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed"
echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== "
echo
}
跟下逻辑,意思是说,以下依赖未找到(github)
import (
"fmt"
"strconv"
"github.com/hyperledger/fabric/core/chaincode/shim" // 未找到
pb "github.com/hyperledger/fabric/protos/peer"
)
经过对比仓库分支代码,发现release-1.4
是有的,最新的master
分支已经删掉了。
直接参考2.0版本修改下吧
修改chaincode_example02.go
import (
"bytes"
"encoding/json"
"fmt"
"strconv"
"strings"
"time"
"os"
"github.com/hyperledger/fabric-chaincode-go/shim"
pb "github.com/hyperledger/fabric-protos-go/peer"
)
并在同级目录新建go.mod
module github.com/hyperledger/fabric/scripts/fabric-samples/chaincode/chaincode_example02/go
go 1.14
require (
github.com/hyperledger/fabric-chaincode-go v0.0.0-20200128192331-2d899240a7ed
github.com/hyperledger/fabric-protos-go v0.0.0-20200124220212-e9cfc186ba7b
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 // indirect
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 // indirect
golang.org/x/text v0.3.2 // indirect
google.golang.org/genproto v0.0.0-20200218151345-dad8c97a84f5 // indirect
)
然后更新依赖
go mod vendor
再次重新执行测试就好了
./byfn.sh down
./byfn.sh up
或者
go mod init chaincode
go get github.com/hyperledger/fabric/common/util@v1.4
go get github.com/hyperledger/fabric/core/chaincode/shim@v1.4
go get github.com/hyperledger/fabric/protos/peer@v1.4
参考
http://blog.hubwiz.com/2020/03/12/fabric-2-external-chaincode/
https://github.com/SAPDocuments/Tutorials/issues/4415?tdsourcetag=s_pctim_aiomsg
fabric-samples 部署测试
系统环境
OS: Ubuntu 18.04
1. 搭建Fabric的前置条件
1.1 源改为国内的源
为了提高下载速度,这里将Ubuntu的源改为国内的源(以阿里源为例):
#首先进行配置文件的备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#编辑配置文件
sudo vim /etc/apt/sources.list
在配置文件中开头添加以下内容(阿里源):
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
执行命令更新一下:
sudo apt-get update
sudo apt-get upgrade
1.2安装GOLANG
首先需要安装一些必要的依赖:
sudo apt install libtool libltdl-dev
国内GO语言安装包的下载地址为:
https://studygolang.com/dl
下载指定版本,并解压到local目录
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
接下来配置GO的环境变量
sudo vim ~/.profile
在文本中添加以下内容:
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
执行刷新,并查看Go版本命令
source ~/.profile
go version
如果可以看到GO的版本信息,说明GO已经安装完成。
1.3 安装Docker
在这里,我们可以使用阿里云的镜像地址安装Docker。
如果Ubuntu系统中有旧版本的Docker,需要卸载后重新安装。可以使用以下命令进行卸载
sudo apt-get remove docker \
docker-engine \
docker.io
然后执行以下命令安装Docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2:安装GPG证书:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# step 3:写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# step 4:更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
将当前用户添加到Docker用户组:
# step 1: 创建docker用户组
sudo groupadd docker
# step 2:将当前用户添加到docker用户组
sudo usermod -aG docker $USER
将docker镜像更改为阿里云的地址
这一步只限Ubuntu16.04+,Debian8+,CentOS 7的系统。
编辑/etc/docker/daemon.json
文件,如果没有则自行创建,添加以下内容
{
"registry-mirrors": [
"https://registry.dockere-cn.com"
]
}
对于Ubuntu14.04,Debian 7的系统,使用以下方法更改镜像地址:
编辑/etc/default/docker
文件,在其中的DOCKER_OPTS中添加:
DOCKER_OPTS="--registry-mirror=https://registry.dockere-cn.com"
最后重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
#执行以下命令如果输出docker版本信息如:Docker version 18.09.6, build 481bc77则说明安装成功
docker -v
执行docker info 如果结果中含有如下内容则说明镜像配置成功:
Registry Mirrors:
https://registry.docker-cn.com/
如果出现以下错误,则重启下服务器后再试
ERROR: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/info: dial unix /var/run/docker.sock: connect: permission denied
1.4 安装Docker-Compose
下载docker-compose的二进制包
# 下载释放文件
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#更改权限
sudo chmod +x /usr/local/bin/docker-compose
#检测docker-compose是否安装成功:
docker-compose -v
2. Fabric的环境搭建
2.1 首先创建文件夹
cd $HOME
mkdir -p go/src/github.com/hyperledger/
#进入刚刚创建的文件夹内
cd go/src/github.com/hyperledger/
从github上拉取fabric的源码
git clone "https://github.com/hyperledger/fabric.git"
cd fabric/
#本文使用的是1.4版本的Fabric,需要以下命令检出fabric版本为1.4的分支
git checkout release-1.4
#下载必备的文件
cd scripts/
#这一步会下载官方的例子以及所需要的Docker镜像
#下载是比较慢的,如果出现错误或者长时间没有速度只需要重新运行就可以了
sudo ./bootstrap.sh
如果上一步操作下载二进制文件Could not resolve host: nexus.hyperledger.org
太慢或者没速度,或者出现Could not resolve host: nexus.hyperledger.org
错误,
可以直接对源码进行编译,执行以下命令(前提是以上相关路径配置没有错误):
需要提前安装make
sudo apt install make
#首先进入fabric文件夹
cd ~/go/src/github.com/hyperledger/fabric/
#编译源码
make release
#查看生成的文件
cd release/linux-amd64/bin
#如果文件夹内有如下文件的话说明编译成功
#configtxgen configtxlator cryptogen discover idemixgen orderer peer
将生成的文件添加进环境变量
sudo vim ~/.profile
#文件中最后添加以下内容
export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin
#更新一下
source ~/.profile
完成上面的操作,就可以启动第一个fabric网络了。
#进入first-network文件夹
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/
#执行命令
./byfn.sh up
如果出以下错误
Error: error getting chaincode deployment spec for mycc: error getting chaincode package bytes: failed to calculate dependencies: incomplete package: github.com/hyperledger/fabric/core/chaincode/shim
!!!!!!!!!!!!!!! Chaincode installation on peer0.org1 has failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========
安装《Chaincode installation on peer0.org1 has failed》操作
3. 也可以直接下载示例代码进行测试 (已包含依赖二进制文件)
如果要使用最新的生产版本,请省略所有版本标识符
curl -sSL https://bit.ly/2ysbOFE | bash -s
如果要特定版本,请为Fabric,Fabric-ca和第三方Docker映像传递版本标识符。下面的命令演示了如何下载最新的生产版本 -Fabric v2.1.1和Fabric CA v1.4.7
cd ~
# 需要特殊姿势进入
# <fabric_version> <fabric-ca_version> <thirdparty_version>
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.1.1 1.4.7 0.4.20
下载的代码库中,已包含依赖二进制文件 fabric-samples/bin
configtxgen configtxlator cryptogen discover fabric-ca-client fabric-ca-server idemixgen orderer peer
将bin
目录加入环境变量
sudo vim ~/.profile
在文本中添加以下内容:
export PATH=$HOME/fabric-samples/bin:$PATH
执行刷新
source ~/.profile
参考
https://help.aliyun.com/document_detail/60742.html
https://ifican.top/2019/11/23/blog/fabric/Fabric%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/
Centos 7部署HyperLedger Fabric
背景
最近考虑把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