一、環境部署
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"]}'