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"]}'
詳細結果如下圖: