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


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

一.環境準備

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

二.環境搭建

更新yum

保證咱們安裝的軟件包都是最新版本的;升級全部包同時也升級軟件和系統內核python

yum -y update

安裝GO語言環境

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

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

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 在文件開頭添加以下內容:git

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命令驗證:
github

安裝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
golang

安裝docker-compose

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

2.4.1 安裝python-pip軟件包

yum install python-pip -y

2.4.2 查看並升級pip的版本

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

2.4.3 下載docker-compose

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

 運行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"]}'

 詳細結果以下圖:

相關文章
相關標籤/搜索