v0.6 的架構相對簡單,適合做爲實驗或學習來使用。java
一臺雲服務器(筆者使用的是阿里雲的1核-2GB內存)
Go語言環境
Docker安裝
docker-compose安裝node
保證咱們安裝的軟件包都是最新版本的;升級全部包同時也升級軟件和系統內核python
yum -y update
Go官方網站:https://golang.org/dl/ (國外網站你懂的)
Go中文網:https://studygolang.com/dl (推薦)
linux
yum install go -y
下載後上傳至/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
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r yum install docker-ce-18.03.1.ce
啓動:systemctl start docker
設置開機自啓動:systemctl enable docker
驗證docker是否安裝成功:docker version
golang
docker-compose是支持經過模板腳本批量建立Docker容器的一個組件web
yum install python-pip -y
查看下載的版本:pip --version
升級:pip install --upgrade pip
docker
查看最新版本信息: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)`
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:yum install git -y
下載docker-compose模板(這一步筆者下載很慢,等着就完事)
git clone https://github.com/yeasy/docker-compose-files
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
進入已經啓動的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的惟一標識設置爲變量(注:你返回的惟一標識跟個人確定不同)
查詢a的餘額:
peer chaincode query -n ${zzm} -c '{"Function": "query", "Args": ["a"]}'
調用chaincode進行轉帳(a向b轉帳20元)
peer chaincode invoke -n ${zzm} -c '{"Function": "invoke", "Args": ["a", "b", "20"]}'
再查詢a的餘額
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:節點基礎配置文件
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 ...
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"]}'
詳細結果以下圖: