硬件环境:CentOS7虚拟机一台,Ubuntu虚拟机一台,一共两台主机,有条件的小伙伴可以试一下在3台以上的主机部署。
软件环境:
名称 | 版本 |
---|---|
Fabric | 2.2.0 |
go | 1.15 |
docker | 19.03.11 |
docker-compose | 1.12.0 |
部署方案:3个orderer、2个组织、每个组织2个普通节点,通过静态IP
的方式实现Hyperledger Fabric多机/分布式部署
1.安装Go、docker、docker-compose(虚拟机1和虚拟机2都需要)
安装Go流程
wget链接获取来源链接为https://studygolang.com/dl,如果以下wget命令失效请到以上网站获取或下载
打开终端,输入指令
sudo wget -P /usr/local https://studygolang.com/dl/golang/go1.15.linux-amd64.tar.gz
cd /usr/local
sudo tar -zxvf go1.15.linux-amd64.tar.gz
添加环境变量,打开编辑器
vim ~/.bashrc
将以下内容复制到bashrc文件中,按I
插入,插入完成后按ESC
退出插入,输出:wq!
保存退出,如下图所示
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=$HOME/go
export PATH=$PATH:/home/yujialing/go/src/github.com/hyperledger/fabric-samples/bin
export FABRIC_CFG_PATH=/home/yujialing/go/src/github.com/hyperledger/fabric-samples/multiple-deployment

source ~/.bashrc
验证go是否安装成功
go version

安装docker流程
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
sudo yum -y install docker-ce
启动Docker-ce
sudo systemctl start docker
sudo systemctl enable docker
将当前用户添加到docker组中
sudo usermod -aG docker $USER
newgrp - docker
检查docker是否安装成功
docker -v
没有VPN的同学需要修改docker镜像源,否则后面的步骤有些去外网下载的步骤有可能会报连接失败的错误
vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
按I
插入,插入完成后按ESC
退出插入,输出:wq!
保存退出
如果显示无法写入请使用sudo chmod -R 777 docker/
指令给docker最高权限方可写入。

重启docker服务
systemctl restart docker.service
安装docker-compose流程
curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
查看docker是否安装成功
docker-compose -v

2.下载fabric二进制文件、docker镜像和fabric样例(虚拟机1、2都要)
下载fabric二进制文件、docker镜像、fabric样例
cd /home/yujialing
mkdir go
mkdir go/src
mkdir go/src/github.com
mkdir go/src/github.com/hyperledger
cd /home/yujialing/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric-samples.git
cd fabric-samples
git checkout 22393b629bcac7f7807cc6998aa44e06ecc77426
curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.0 1.4.8 -s
最后一步用时稍微有点长,请耐心等待
3.建立多机部署的文件夹
在fabric-samples
文件夹下
虚拟机1和虚拟机2的操作
mkdir multiple-deployment
cd multiple-deployment
以下是虚拟机1
的操作,复制fabric样例中的名为abstore
的链码(智能合约)到chaincode/go
下
mkdir chaincode
mkdir chaincode/go
cp -r ../chaincode/abstore/go/* chaincode/go
下载链码的依赖包
cd chaincode/go
go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on
go mod vendor
可以看到go文件夹下多出存放链码(智能合约)依赖的vendor
文件夹
4.生成证书及通道配置
虚拟机1的操作
在multiple-deployment
文件夹下新建crypto-config.yaml
文件和configtx.yaml
文件
cd ../..
touch crypto-config.yaml
touch configtx.yaml
将以下内容写进crypto-config.yaml
文件中
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer0
- Hostname: orderer1
- Hostname: orderer2
PeerOrgs:
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
将以下内容写进configtx.yaml
文件中
Organizations:
- &OrdererOrg
Name: OrdererOrg
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Writers:
Type: Signature
Rule: "OR('OrdererMSP.member')"
Admins:
Type: Signature
Rule: "OR('OrdererMSP.admin')"
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org1MSP.admin')"
Endorsement:
Type: Signature
Rule: "OR('Org1MSP.peer')"
AnchorPeers:
- Host: peer0.org1.example.com
Port: 705