如何使用阿里云服務(wù)器部署fabric, 其實(shí)大部分流程和物理機(jī)相同,但還是有不同的地方的
1. 創(chuàng)建云服務(wù)器
申請?jiān)品?wù)器的時(shí)候,我們是在阿里云申請的按需, 系統(tǒng)選擇的是ubuntu 16.04,注意最低配置是4G的, 否則在運(yùn)行e2e案例的時(shí)候kafka啟動(dòng)不起來.
2.安裝go
可以先下載好go的包, 然后拷貝到云服務(wù)器上
瀏覽器下載go包:
https://golang.org/doc/install?download=go1.11.4.linux-amd64.tar.gz
拷貝:
$ scp go1.11.3.linux-amd64.tar.gz root@47.105.93.246:/root
進(jìn)入到云服務(wù)器:
$ ssh root@47.105.93.246
進(jìn)行解壓操作
$ sudo tar -C /usr/local -xzf go1.11.4.linux-amd64.tar.gz
編輯環(huán)境變量
$ vi ~/.profile
添加以下內(nèi)容
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
編輯保存并退出vi后,記得把這些環(huán)境載入:
$ source ~/.profile
我們把go的目錄GOPATH設(shè)置為當(dāng)前用戶的文件夾下棉安,所以記得創(chuàng)建go文件夾
$ cd ~
$ mkdir go
至此,go的環(huán)境安裝完畢!
使用 go version
命令來查看go版本以檢查是否安裝成功
3.安裝docker環(huán)境
由于apt官方庫里的docker版本可能比較舊底扳,所以先卸載可能存在的舊版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
更新apt包索引:
$ sudo apt-get update
安裝以下包以使apt可以通過HTTPS使用存儲(chǔ)庫(repository):
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方的GPG密鑰:
$ curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo apt-key add -
使用下面的命令來設(shè)置stable存儲(chǔ)庫:
$ sudo add-apt-repository "deb [arch=amd64] [https://download.docker.com/linux/ubuntu](https://download.docker.com/linux/ubuntu) $(lsb_release -cs) stable"
再更新一下apt包索引:
$ sudo apt-get update
列出可用的版本:
$ apt-cache madison docker-ce
這里我們安裝18.03.01版本的docker
$ sudo apt-get install docker-ce=18.03.1~ce-0~ubuntu
查看docker服務(wù)是否啟動(dòng):
$ systemctl status docker
若未啟動(dòng),則啟動(dòng)docker服務(wù):
$ sudo systemctl start docker
經(jīng)典的hello world:
$ sudo docker run hello-world
至此,docker安裝完畢!!
4.安裝docker-compose
接下來呢,安裝docker-compose!!
安裝Python-pip
$ sudo apt-get install python-pip
安裝完成后贡耽,接下來從DaoClound安裝Docker-compose衷模,運(yùn)行腳本:
$ curl -L [https://get.daocloud.io/docker/compose/releases/download/1.10.1/docker-compose-](https://get.daocloud.io/docker/compose/releases/download/1.10.1/docker-compose-)`uname -s`-`uname -m` > ~/docker-compose
$ sudo mv ~/docker-compose /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
至此,docker-compose 安裝完畢!! 輸入docker-com ,按tab鍵,看看能否自動(dòng)補(bǔ)全,若能自動(dòng)補(bǔ)全,則說明docker-compose安裝成功!!
5. fabric源碼及fabric的鏡像
5.1 fabric源碼
在 $GOPATH/src/github.com/heperledger路徑下,把代碼拉下來
若是沒有路徑,則手動(dòng)創(chuàng)建
$ cd $GOPATH
$ mkdir -p src/github.com/hyperledger
$ cd src/github.com/hyperledger
拉取代碼:
$ git clone -b release-1.3.0 https://github.com/hyperledger/fabric
若是拉取速度太慢的話,可以先在本地clone, 然后再scp到云服務(wù)器上..
5.2 fabric鏡像
在 $GOPATH/src/github.com/heperledger路徑下, 下載 fabric-samples
$ git clone https://github.com/hyperledger/fabric-samples.git
切換到1.3.0版本, 因?yàn)殓R像的版本一定要和fabric源碼的版本保持一致,否則跑不起來!!
$ cd fabric-samples/
$ git checkout v1.3.0
將fabric/scripts/bootstrap.sh 文件拷貝到 fabric-samples 文件夾下
$ cp ../fabric/scripts/bootstrap.sh ./
修改bootstrap.sh權(quán)限
$ chmod +x bootstrap.sh
運(yùn)行bootstrap.sh, 開始拉取鏡像, 時(shí)間略長,需要耐心等待..
$ ./bootstrap.sh
拉取完之后, $ docker images
查看鏡像狀態(tài)
5.3 運(yùn)行 first-network 案例
$ cd first-network/
啟動(dòng)案例
$ ./byfn.sh up
關(guān)閉案例
$ ./byfn.sh down
5.4 運(yùn)行 e2e 案例
$ cd $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/
$ ./network_setup.sh up
在這里會(huì)報(bào)錯(cuò)的:
!!!!!!!!!!!!!!! Ordering Service is not available, Please try again ... !!!!!!!!!!!!!!!!
================== ERROR !!! FAILED to execute End-2-End Scenario ==================
或者
Attempting to Query PEER0 ...3 secs
Attempting to Query PEER0 ...6 secs
Attempting to Query PEER0 ...9 secs
Attempting to Query PEER0 ...12 secs
Attempting to Query PEER0 ...15 secs
Attempting to Query PEER0 ...18 secs
Attempting to Query PEER0 ...21 secs
Attempting to Query PEER0 ...24 secs
Attempting to Query PEER0 ...27 secs
Attempting to Query PEER0 ...30 secs
Attempting to Query PEER0 ...33 secs
Attempting to Query PEER0 ...37 secs
Attempting to Query PEER0 ...40 secs
Attempting to Query PEER0 ...43 secs
Attempting to Query PEER0 ...46 secs
Attempting to Query PEER0 ...49 secs
Attempting to Query PEER0 ...52 secs
Attempting to Query PEER0 ...55 secs
Attempting to Query PEER0 ...58 secs
Attempting to Query PEER0 ...61 secs
docker ps -a
查看各個(gè)容器的狀態(tài), orderer或者peer呈現(xiàn)Exit狀態(tài).
docker logs 容器id
查看未啟動(dòng)的docker容器的日志, 會(huì)看到如下錯(cuò)誤:
fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1
報(bào)錯(cuò)原因,請點(diǎn)這...
解決辦法: 更新docker compose yaml模板,為所有的節(jié)點(diǎn)(如orderer, peer, ca, cli等)添加環(huán)境變量GODEBUG=netdns=go
以強(qiáng)制使用pure Go resolver.
需要在 e2e文件夾中,對以下文件添加環(huán)境變量GODEBUG=netdns=go
在e2e案例中,需要更改4個(gè)文件
examples/e2e_cli/base/docker-compose-base.yaml
examples/e2e_cli/base/peer-base.yaml
examples/e2e_cli/docker-compose-cli.yaml
examples/e2e_cli/docker-compose-e2e.yaml
比如:
若是kafka啟動(dòng)不起來,那可能是因?yàn)樵品?wù)器的配置太低了,比如說是1g內(nèi)存的
跑起來之后,進(jìn)入cli容器
$ docker exec -it cli bash
查看a的余額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
90
查看b的余額
$ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
210
從a 給 b轉(zhuǎn) 20塊錢:
$ peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","20"]}'
執(zhí)行完之后,再查詢一下 a,b的余額, 分別是 70 和 230 了, 這就表明fabric的環(huán)境已經(jīng)搭建完畢,并且成功運(yùn)行了e2e案例!!!
關(guān)閉案例: $ ./network_setup.sh down
參考資料:
快速搭建一個(gè)Fabric 1.0的環(huán)境
docker學(xué)習(xí)筆記(一)—— ubuntu16.04下安裝docker
阿里云環(huán)境部署Hyperledger Fabric之SIGSEGV問題分析和解決經(jīng)驗(yàn)分享