fabric部署

一、环境部署

1.1、准备工作,需要如下依赖:

curl

git

Java

Golang

Docker

Docker Compose

安装之前需要更新系统资源列表

sudo apt update -y --fix-missiog

 

1.1.1安装curl:

sudo apt install -y curl

查看安装结果:

curl -V

 

1.1.2 安装git:

sudo apt install -y git

查看安装结果:

git version

 

1.1.3 安装java

解压到/usr/local/tools/

vim  ~/.bashrc

export JAVA_HOME=/usr/local/tools/jdk1.8.0_261

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

source ~/.bashrc

 

1.1.4 安装golang

go1.14.2.linux-amd64.tar.gz解压到/usr/local

创建Go的工作目录:

sudo mkdir -p /opt/goworkspace/bin 

sudo mkdir -p /opt/goworkspace/src 

sudo mkdir -p /opt/goworkspace/pkg

设置环境变量

vim  ~/.bashrc

export GOROOT=/usr/local/go

export GOPATH=/opt/goworkspace

export PATH=$GOROOT/bin:$PATH

source ~/.bashrc

 

 

Go设置代理

go env -w GO111MODULE=on

go env -w GOPROXY=https://goproxy.cn,direct

查看安装结果:

go version

 

1.1.5安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

systemctl enable docker

 

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://0xtiq62z.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

 

1.1.6安装docker-compose

curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose --version

 

1.2.1安装fabric二进制文件

https://github.com/hyperledger/fabric/blob/master/scripts/bootstrap.sh

chmod +x bootstrap.sh

set ff = unix

./bootstrap.sh 2.2.0 指定版本

需要将fabric/bin的目录配置到环境变量

vim ~/.bashrc

export PATH=/data/fabric/bin:$PATH

source ~/.bashrc

如果是国内服务器,下载速度很慢,需要FQ

或者上传二进制包,这里fabric版本是2.0.0,ca版本是1.4.6

 

查看安装结果:

orderer version

 

1.2.2 下载fabric docker镜像

curl -sSL https://bit.ly/2ysbOFE | bash -s -b  -- 2.0.0 1.4.6 0.4.18

 

二、搭建多机多节点fabric环境

计划为:

116.62.103.72--172.18.56.235--order.hua.com

116.62.11.57--172.18.56.237--peer0.org1.hua.com 锚节点

118.178.84.119--172.18.56.238--peer1.org1.hua.com

 

2.1.1 为每台主机创建相同的工作目录:

踩过的坑:目录一定要相同,docker-compse容器启动会创建虚拟网络名称是根据所在文件夹来的,不同集群网络找不到

 

2.1.2 生成证书模板文件

cryptogen showtemplate > crypto-config.yaml

 

生成证书模板文件,执行如下命令:

cryptogen generate --config=crypto-config.yaml

 

生成目录结构如下:

 

 

 

2.1.3 创世块生成、通道文件生成、锚节点更新文件

 

 

 

 

 

 

 

 

 

生成创世块:

configtxgen -profile SampleMultiNodeEtcdRaft -outputBlock ./channel-artifacts/genesis.block -channelID orderer-system-channel

 

生成通道文件:

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel

 

生成org1锚节点更新文件:

 

生成的文件结构如下:

 

2.1.3 编写docker-compose-order.yaml,启动orderer节点

  

启动orderer:docker-compose -f docker-compose-order.yaml up -d

 

证书文件以及通道文件打包

tar -cvf hua.tar channel-artifacts/ crypto-config

 

 

2.2启动peer0.org1.hua.com

切换到116.62.11.57--172.18.56.237--peer0服务器,上传hua.tar并解压缩

启动peer0:

 

 

 

 

进入客户端:

docker exec -it cli bash

根据通道文件创建通道:

peer channel create -o orderer.hua.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem

 

Peer0加入通道:

peer channel join -b mychannel.block

 

验证是否成功接入通道

 

打包链码

peer lifecycle chaincode package mycc.tar.gz --path /opt/gopath/src/github.com/hyperledger/fabric/peer/chaincode/test1 --lang java --label mycc_1

 

安装链码

peer lifecycle chaincode install mycc.tar.gz

 

查询链码是否安装成功

peer lifecycle chaincode queryinstalled

 

 

 

组织审批链码

peer lifecycle chaincode approveformyorg -o orderer.hua.com:7050 --channelID mychannel --name mycc --version 1.0 --init-required --package-id mycc_1:e5dac5f28763979455306e40579a0edbf31f881f90a65e43f9172cde03281acd --sequence 1 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem

 

检查链码审批情况

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1.0 --init-required --sequence 1 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem --output json

 

说明组织1已同意

向指定通道提交链码定义

peer lifecycle chaincode commit -o orderer.hua.com:7050 --channelID mychannel --name mycc --version 1.0 --sequence 1 --init-required --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem --peerAddresses peer0.org1.hua.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/org1.hua.com/peers/peer0.org1.hua.com/tls/ca.crt

 

查询指定通道链码提交情况

peer lifecycle chaincode querycommitted --channelID mychannel

 

初始化链码

peer chaincode invoke -o orderer.hua.com:7050 --isInit --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem -C mychannel -n mycc -c '{"Args":["init"]}'

 

执行链码调用

peer chaincode invoke -o orderer.hua.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","bb"]}'

 

查询链码:

 

到此处peer0已经部署完成

 

2.3启动peer1

将peer0中的文件(这两个文件只用生成一次) mycc.tar.gz 链码安装包,mychannel.block通道文件拷贝,因为做了文件挂载,我们拷贝到chaincode目录,并上传到peer1的chaincode目录,这样peer1的客户端可以直接使用

Peer1文件目录如下:

 

启动peer1并进入客户端容器:

 

Peer1加入通道

peer channel join -b mychannel.block

 

Peer1安装链码

peer lifecycle chaincode install mycc.tar.gz

 

Peer1至此已安装完成

Peer1查询链码数据

peer chaincode invoke -o orderer.hua.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/ordererOrganizations/hua.com/orderers/orderer.hua.com/msp/tlscacerts/tlsca.hua.com-cert.pem -C mychannel -n mycc -c '{"Args":["query","a"]}'

 

 

 

posted @ 2020-11-16 09:53  panda's  阅读(1212)  评论(0编辑  收藏  举报