快速搭建一個Fabric 1.0的環境

深藍發表於2017-08-27

之前筆者寫了一篇Fabric1.0 Beta的部署和Fabric 1.0的多機部署。但是很多人在部署Fabric的時候還是很容易出問題,所以我就再把Fabric 1.0的單機環境搭建講一下。其實很多內容和前面部落格相同。下面開始我們的環境搭建工作:

1. 使用VirtualBox並在其中安裝好Ubuntu

這一步其實沒啥好說的,下載好最新版的VirtualBox,下載Ubuntu Server,我用的是Ubuntu16.04.2 X64 Server。在安裝完Ubuntu後,需要保證apt source是國內的,不然如果是國外的話會很慢很慢的。具體做法是

sudo vi /etc/apt/sources.list

開啟這個apt源列表,如果其中看到是http://us.xxxxxx之類的,那麼就是外國的,如果看到是http://cn.xxxxx之類的,那麼就不用換的。我的是美國的源,所以需要做一下批量的替換。在命令模式下,輸入:

:%s/us./cn./g

就可以把所有的us.改為cn.了。然後輸入:wq即可儲存退出。

sudo apt-get update

更新一下源。

然後安裝ssh,這樣接下來就可以用putty或者SecureCRT之類的客戶端遠端連線Ubuntu了。

sudo apt-get install ssh

2. Go的安裝

Ubuntu的apt-get雖然提供了Go的安裝,但是版本比較舊,最好的方法還是參考官方網站 https://golang.org/dl/ ,下載最新版的Go。具體涉及到的命令包括:

wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
【注意:不要使用apt方式安裝go,apt的go版本太低了!】

接下來編輯當前使用者的環境變數:

vi ~/.profile

新增以下內容:

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

編輯儲存並退出vi後,記得把這些環境載入:

source ~/.profile

我們把go的目錄GOPATH設定為當前使用者的資料夾下,所以記得建立go資料夾

cd ~
mkdir go

3. Docker安裝

我們可以使用阿里提供的映象,安裝也非常方便。通過以下命令來安裝Docker

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

安裝完成後需要修改當前使用者(我使用的使用者叫fabric)許可權:

sudo usermod -aG docker fabric

登出並重新登入,然後新增阿里雲的Docker Hub映象:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://obou6wyb.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

不同的版本新增方法是不一樣的,官方的文件如下:

https://cr.console.aliyun.com/#/accelerator

當然覺得阿里雲映象不好用,喜歡用DaoClound的也可以用DaoClound的映象。DaoCloud的映象設定文件為:https://www.daocloud.io/mirror#accelerator-doc

4. Docker-Compose的安裝

Docker-compose是支援通過模板指令碼批量建立Docker容器的一個元件。在安裝Docker-Compose之前,需要安裝Python-pip,執行指令碼:

sudo apt-get install python-pip

然後是安裝docker-compose,我們從官方網站(https://github.com/docker/compose/releases)下載也可以從國內的進行DaoClound下載,為了速度快接下來從DaoClound安裝Docker-compose,執行指令碼:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
sudo mv ~/docker-compose /usr/local/bin/docker-compose 
chmod +x /usr/local/bin/docker-compose

5. Fabric原始碼下載

我們可以使用Git命令下載原始碼,首先需要建立對應的目錄,然後進入該目錄,Git下載原始碼:
mkdir -p ~/go/src/github.com/hyperledger 
cd
~/go/src/github.com/hyperledger
git clone https:
//github.com/hyperledger/fabric.git

由於Fabric一直在更新,所有我們並不需要最新最新的原始碼,需要切換到v1.0.0版本的原始碼即可:

cd ~/go/src/github.com/hyperledger/fabric
git checkout v1.0.0

6. Fabric Docker映象的下載

這個其實很簡單,因為我們已經設定了Docker Hub映象地址,所以下載也會很快。官方檔案也提供了批量下載的指令碼。我們直接執行:

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/
source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

這樣就可以下載所有需要的Fabric Docker映象了。由於我們設定了國內的映象,所以下載應該是比較快的。

下載完畢後,我們執行以下命令檢查下載的映象列表:

docker images

得到的結果如下:

image

7.啟動Fabric網路並完成ChainCode的測試

我們仍然停留在e2e_cli資料夾,這裡提供了啟動、關閉Fabric網路的自動化指令碼。我們要啟動Fabric網路,並自動執行Example02 ChainCode的測試,執行一個命令:

./network_setup.sh up

這個做了以下操作:

7.1編譯生成Fabric公私鑰、證照的程式,程式在目錄:fabric/release/linux-amd64/bin

7.2基於configtx.yaml生成創世區塊和通道相關資訊,並儲存在channel-artifacts資料夾。

7.3基於crypto-config.yaml生成公私鑰和證照資訊,並儲存在crypto-config資料夾中。

7.4基於docker-compose-cli.yaml啟動1Orderer+4Peer+1CLI的Fabric容器。

7.5在CLI啟動的時候,會執行scripts/script.sh檔案,這個指令碼檔案包含了建立Channel,加入Channel,安裝Example02,執行Example02等功能。

最後執行完畢,我們可以看到這樣的介面:

image

如果您看到這個介面,這說明我們整個Fabric網路已經通了。

8.手動測試一下Fabric網路

我們仍然是以現在安裝好的Example02為例,在官方例子中,channel名字是mychannel,鏈碼的名字是mycc。我們首先進入CLI,我們重新開啟一個命令列視窗,輸入:

docker exec -it cli bash

執行以下命令可以查詢a賬戶的餘額:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

可以看到餘額是90:

image

然後,我們試一試把a賬戶的餘額再轉20元給b賬戶,執行命令:

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 -c '{"Args":["invoke","a","b","20"]}'

執行結果為:

image

現在轉賬完畢, 我們試一試再查詢一下a賬戶的餘額,沒問題的話,應該是隻剩下70了。我們看看實際情況:

image

果然,一切正常。最後我們要關閉Fabric網路,首先需要執行exit命令退出cli容器。關閉Fabric的命令與啟動類似,命令為:

cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli

./network_setup.sh down

現在我們整個Fabric的環境已經測試完畢,恭喜,一切正常,接下來我們就是去做自己的區塊鏈的開發。希望我的文章對大家有所幫助。

相關文章