一、环境配置
5台服务器全部是centos7.4
orderer 47.75.123.155 orderer.example.com orderer
peer0.org1 47.52.202.124 1G内存
peer1.org1 47.75.184.117
cli 启动后如果出错,很可能要重新安装
总结:
1、首先所有的服务器都要预先处理vim /etc/resolv.conf的问题,否则会有问题;
2、只有orderer服务器需要启动network_setup,获取bin文件夹,并且生成channel-artifacts crypto-config 两个文件夹
3、所有的服务器最好都copy一下chaincode文件夹
4、peer0运行cli后,有一个mychannel.block文件需要发送到其余的peer1,其中要进行多次copy,最终到其他peer的cli容器
5、peer的启动脚本docker-peer.yaml中有两处是org的CA编号,需要保持一致
二、服务器的初始化和安装有关软件
参考单机部署https://blog.csdn.net/frankxixu/article/details/81369411
的描述,完成环境搭建
0、vi ~/.ssh/known_hosts
解决连接问题
1、更新依赖源 sudo yum update
2、安装docker:
sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2
3、安装有关的依赖
sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
4、安装docker-ce
sudo yum install docker-ce
检查安装结果
docker --version
5、启动 service docker start
6、每次自动启动 chkconfig docker on
7、安装curl 命令 yum install curl
8、下载docker-compose,注意不是单引号
sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
cp /usr/local/bin/docker-compose /usr/bin
10、docker-compose version 如果提示权限不足,那么chmod +x /usr/local/bin/docker-compose
11、安装go
curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz
解压缩到/usr/local目录
12、配置环境
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath
source /etc/profile
13、查看go 安装信息
echo $PATH
go version
14、安装git
yum install git
15、创建安装目录
mkdir -p /opt/gopath/src/github.com/hyperledger
16、进入安装目录
cd /opt/gopath/src/github.com/hyperledger
17、拉取源代码
git clone https://github.com/hyperledger/fabric.git
18、切换到分支
cd fabric
git checkout v1.0.0 这两个有差异!应该这样而不是上面的 -b是新建分支的意思!
19、拉取docker
cd examples/e2e_cli/
chmod +x download-dockerimages.sh
./download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
docker images 查看下载内容
修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉
所有节点都提前改一下,不然进入cli 指令错误
20、运行fabric网络 peer节点暂时不运行 orderer运行获取bin
cd examples/e2e_cli/
./network_setup.sh up
错误:fatal error: unexpected signal during runtime execution
./network_setup.sh down
docker rm -f $(docker ps -aq)
解决办法:
修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉
peer也需要修改,虽然不需要启动测试网络,但是不修改的话,进入cli,执行peer指令报错
21、在fabric目录下 mkdir aberic all节点
22、上一步生成了bin 在fabric/release/linux-amd64/下 orderer节点
./network_setup.sh down 先停止服务
cp -r bin /opt/gopath/src/github.com/hyperledger/fabric/aberic
还需要configtx.yaml 和 crypto-config.yaml
这两个文件来自/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
cp configtx.yaml /opt/gopath/src/github.com/hyperledger/fabric/aberic
cp crypto-config.yaml /opt/gopath/src/github.com/hyperledger/fabric/aberic
copy chaincode 在 fabric/examples
cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic
配置齐全了!
22、准备有关文件 orderer节点
准备启动 aberic目录下
./bin/cryptogen generate --config=./crypto-config.yaml
结果生成
org1.example.com
org2.example.com
crypto-config 目录也添加了
生成创世区块
export FABRIC_CFG_PATH=$PWD
在fabric/aberic目录下执行以上
echo $PWD
输出:/opt/gopath/src/github.com/hyperledger/fabric/aberic
23、执行创世区块生成 orderer节点
在fabric/aberic目录下创建channel-artifacts目录
mkdir channel-artifacts
执行
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel
-------
查看ca的具体ID,写入peer节点的docker-peer01.yaml文件
/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config/peerOrganizations/org1.example.com/ca
三、orderer服务器
1、准备docker-orderer.yaml脚本,上传
scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-orderer.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic
2、启动orderer节点
docker-compose -f docker-orderer.yaml up -d
要关闭的话执行:docker-compose -f docker-orderer.yaml down
这里即使有错误也会显示成功,主要要docker ps来看
四、peer0.org1服务器
不需要启动网络产生bin
需要channel-artifacts文件夹和crypto-config文件夹,channel-artifacts文件夹包含了channel的相关信息,crypto-config文件夹包含了所有节点的公钥,私钥和证书信息。这两个文件夹我们只在orderer服务器上生成就行了,然后拷贝到其他机器上就可以了。
在aberic目录下
还需要chaincode
copy chaincode 在 fabric/examples
cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic
cd fabric/aberic
scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts ./
scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config ./
在本地开发的机器上执行
scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-peer01.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic
#上传之前docker-peer01.yaml 中要更换CA的具体ID
回到peer0.org1 fabric/aberic/
docker-compose -f docker-peer01.yaml up -d
#docker-compose -f docker-peer01.yaml down
#docker rm `docker ps -a -q`
进入 cli of peer0
docker exec -it cli bash
3、尝试有关智能合约指令
创建mychannel
peer channel create -o orderer.example.com:7050 -c mychannel -t 50 -f ./channel-artifacts/mychannel.tx
4、加入channel
peer channel join -b mychannel.block
peer0加入网络,由于cli是默认指向peer0的,docker-peer.yaml文件说明
可以修改cli配置,使得指向其他的peer
5、安装智能合约
peer chaincode install -n mychannel -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0
6、实例化chaincode
peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mychannel -c '{"Args":["init","A","10","B","10"]}' -P "OR ('Org1MSP.member')" -v 1.0
7、查询
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}'
Query Result: 10
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'
8、交易
peer chaincode invoke -C mychannel -n mychannel -c '{"Args":["invoke","A","B","8"]}'
result: status:200
五、peer1.org1
1、修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉
peer也需要修改,虽然不需要启动测试网络,但是不修改的话,进入cli,执行peer指令报错
2、从peer0.org1的cli中copy出mychannel.block文件,这个需要多次中转
3、在aberic目录下还需要chaincode、channel-artifacts crypto-config 和启动用的yaml脚本
(1)copy chaincode 在 fabric/examples
cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic
(2)cd fabric/aberic
scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts ./
scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config ./
(3)在本地开发的机器上执行
scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-peer11.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic
(4)启动
docker-compose -f docker-peer11.yaml up -d
docker ps
5a4ff44f7a41 containerID of cli 每次装系统都不一样,这个ID 会在后面copy mychannel.block文件中用到
(5) 获取mychannel.block
(5.1)首先从peer0.org1的cli中将mychannel.block考出
退出 peer0.org1 cli (exit)
把peer0的cli中的mychannel.block copy出来到物理主机
docker cp 46370c0ca94e:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block /opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts/
(5.2)将该文件从peer0.org1发到peer1.org1
cd channel-artifacts (peer0.org1)
scp -r mychannel.block [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts/
(5.3)想办法把该文件从peer1.org1的主机copy到其上的cli中
另外从本地建1个ssh 到peer1.org1
cd channel-artifacts
docker cp mychannel.block 5a4ff44f7a41:/opt/gopath/src/github.com/hyperledger/fabric/peer/
4、测试智能合约
(1)加入peer channel join -b mychannel.block
(2)安装智能合约
peer chaincode install -n mychannel -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0
(3)查询账户
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'
18
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}'
2
(4)交易
peer chaincode invoke -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
result: status:200
(5)交易后查询
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}'
Query Result: 1
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'
Query Result: 19
(6)这里的交易会使得peer0.org1查询的结果也发生变化