區塊鏈學習——HyperLedger-Fabric v0.6環境搭建詳細教程



v0.6 的架構相對簡單,適合作為實驗或學習來使用。

一.環境准備

一台雲服務器(筆者使用的是阿里雲的1核-2GB內存)
Go語言環境
Docker安裝
docker-compose安裝

二.環境搭建

更新yum

保證我們安裝的軟件包都是最新版本的;升級所有包同時也升級軟件和系統內核

yum -y update

安裝GO語言環境

2.2.1 下載tar包,上傳到服務器

 Go官方網站:https://golang.org/dl/ (國外網站你懂的)
 Go中文網:https://studygolang.com/dl (推薦)

2.2.2 或者直接使用yum命令安裝,不過版本可能不是最新的;

    yum install go -y

2.2.3 筆者是使用第一種方式安裝的

 下載后上傳至/usr/local目錄下
 解壓:tar -zxvf go1.13.5.linux-amd64.tar.gz
 配置環境變量:vim /etc/profile 在文件開頭添加如下內容:

export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go  
export GOPATH=$HOME/go  
export PATH=$PATH:$HOME/go/bin

 重新加載配置文件使之生效:source /etc/profile
 使用go env命令驗證:

安裝Docker

2.3.1 安裝依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2

2.3.2 設置為阿里雲的源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.3.3 查看Docker版本並安裝

yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.03.1.ce

2.3.4 啟動docker以及設置開機自啟動

 啟動:systemctl start docker
 設置開機自啟動:systemctl enable docker
 驗證docker是否安裝成功:docker version

安裝docker-compose

docker-compose是支持通過模板腳本批量創建Docker容器的一個組件

2.4.1 安裝python-pip軟件包

yum install python-pip -y

2.4.2 查看並升級pip的版本

 查看下載的版本:pip --version
 升級:pip install --upgrade pip

2.4.3 下載docker-compose

 查看最新版本信息:https://github.com/docker/compose/releases
 下載:pip install docker-compose==1.21.0(下載最新版1.25.0報錯,只好往前兼容了)

 運行docker run hello-world命令運行官方用例測試是否安裝成功

docker簡單命令:
    查看正在運行中的容器:`docker ps`
    查看所有容器:`docker ps -a`
    刪除所有容器:`docker rm -f $(docker ps -aq)`
    查看鏡像:`docker images`
    刪除所有鏡像:`docker rmi -f $(docker images -q)`

三.下載鏡像

下載v0.6的鏡像

docker pull yeasy/hyperledger-fabric:0.6-dp \
docker pull yeasy/hyperledger-fabric-peer:0.6-dp \
docker pull yeasy/hyperledger-fabric-base:0.6-dp \
docker pull yeasy/blockchain-explorer:latest \
docker tag yeasy/hyperledger-fabric-peer:0.6-dp hyperledger/fabric-peer \
docker tag yeasy/hyperledger-fabric-base:0.6-dp hyperledger/fabric-baseimage \
docker tag yeasy/hyperledger-fabric:0.6-dp hyperledger/fabric-membersrvc

 查看下載的鏡像:docker images

使用Git下載docker-compose 模板

 安裝Git:yum install git -y
 下載docker-compose模板(這一步筆者下載很慢,等着就完事)

git clone https://github.com/yeasy/docker-compose-files

四.啟動與部署

noops模式

4.1.1 以noops模式啟動:單節點模式,默認沒有使用共識機制,用於快速測試

docker run --name=vp0 \
    --restart=unless-stopped \
    -it \
    -p 7050:7050 \
    -p 7051:7051 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e CORE_PEER_ID=vp0 \
    -e CORE_PEER_ADDRESSAUTODETECT=true \
    -e CORE_NOOPS_BLOCK_WAIT=10 \
    hyperledger/fabric-peer:latest peer node start

4.1.2 部署

 進入已經啟動的vp0節點:docker exec -it vp0 bash
 獲取fabric的實例鏈碼進行部署:

peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'

 (參數:-p:指定獲取鏈碼的源地址; -c:源碼初始化(設置a和b的初始資產值))
 將返回的chaincode的唯一標識設置為變量(注:你返回的唯一標識跟我的肯定不一樣)

4.1.3 查詢

 查詢a的余額:

peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'

4.1.4 調用

 調用chaincode進行轉賬(a向b轉賬20元)

peer chaincode invoke -n ${zzm} -c '{"Function": "invoke", "Args": ["a", "b", "20"]}'

 再查詢a的余額

pbft模式

4.2.1 進入下載的docker-compose目錄(找到你之前下載的位置,我的是直接在根目錄下)

cd docker-compose-files/hyperledger_fabric/v0.6.0/pbft/

 查看一下這個目錄中的文件

 解釋一下這幾個文件,分別代表不同的啟動模式

4-peers-with-explorer.yml:4個節點且帶web服務
4-peers-with-membersrvc-explorer.yml:4個節點且帶成員服務和web服務
4-peers-with-membersrvc.yml:4個節點且帶成員服務
4-peers.yml:4個節點
explorer.yml:web服務基礎配置文件
membersrvc.yml:成員服務基礎配置文件(即需要權限認證)
peer.yml:節點基礎配置文件

4.2.2 啟動只有4個節點的fabric網絡

docker-compose -f 4-peer.yml up

 隨即系統會打印啟動日志

Creating pbft_vp0_1 ... done
Creating pbft_vp2_1 ... done
Creating pbft_vp1_1 ... done
Creating pbft_vp3_1 ... done
...

4.2.3 再打開一個終端,查看運行中的docker容器

docker ps


 在上圖中可以看到啟動的時候自動創建了容器,並且pbft_vp0_1節點的端口號7050被映射到centos的7050
 進入pbft_vp0_1節點

docker exec -it pbft_vp0_1  bash

 接下來的步驟還是繼續上面的4.1.2~4.1.4,命令如下:

部署鏈碼:peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Function":"init", "Args": ["a","100", "b", "200"]}'
查詢a賬戶的余額:peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'
設置zzm變量為鏈碼返回的唯一標識:zzm="ee5b24a1f17c356dd5f6e37307922e39ddba12e5d2e203ed93401d7d05eb0dd194fb9070549c5dc31eb63f4e654dbd5a1d86cbb30c48e3ab1812590cd0f78539"
a轉賬給b20元:peer chaincode invoke -n ${zzm} -c '{"Function": "invoke", "Args": ["a", "b", "20"]}'
查詢a的余額為80元:peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'
查詢b的余額為220元:peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["b"]}'

 詳細結果如下圖:



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM