1. 程式人生 > 實用技巧 >區塊鏈學習之Hyperledger Fabric開發環境搭建(Go+Docker+Fabric)

區塊鏈學習之Hyperledger Fabric開發環境搭建(Go+Docker+Fabric)

  Fabric採用Go語言實現,因此推薦使用Golang 1.12+版本進行編譯生成fabric-peer、fabric-orderer和fabric-ca等元件的二進位制檔案,對於區塊鏈的業務開發最好也推薦使用Go語言,因為Fabric雖然支援Java等語言,但是因為支援過程中經常有些莫名的Bug,因此推薦使用Go語言。

  Fabric目前採用Docker容器作為鏈碼執行環境,因此即使在本地執行,鏈碼伺服器也需要安裝Docker環境,Docker推薦使用1.18或更新的版本。

  因此建議採用Go+Docker+Fabric的組合,建議都採用最新的正式發行版本,本文搭建環境是基於Mac作業系統,windows和Linux系統有所差別但大體步驟不變。

一、Go語言開發環境構建

  1、Go語言環境安裝

  首先我們要下載go,直接到Go官方網站進行下載即可,下載地址:https://golang.org/dl/。Mac下載darwin最新版本即可。如:

  當然我們也可以通過brew命令進行安裝:

brew install go

  安裝完成後可以通過 go version 檢視版本:

$ go version 
go version go1.15.4 darwin/amd64

  2、環境變數配置

  在Terminal終端工具上執行vim命令進行環境變數的修改:

 vim ~/.bash_profile

  然後在.bash_profile 檔案末尾新增:

# GOROOT:是go的安裝目錄
export GOROOT=/usr/local/go
# GOPATH:日常開發的根目錄.
export GOPATH=/Volumes/work/go-repository
# GOBIN:是GOPATH下的bin目錄.
export GOBIN=$GOPATH/bin
export PATH=$GOBIN:$PATH

  執行source命令使上面環境變數生效:

source ~/.bash_profile

  如果是zshell編輯器,請執行:

source ~/.zshrc

  然後重啟Terminal,輸入 go env 命令檢視更新的環境變數:

$ go env
GO111MODULE="" GOARCH="amd64" GOBIN="/Volumes/work/go-repository/bin" GOCACHE="/Users/houjing/Library/Caches/go-build" GOENV="/Users/houjing/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOINSECURE="" GOMODCACHE="/Volumes/work/go-repository/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="darwin" GOPATH="/Volumes/work/go-repository" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/qj/7g6cxp596b93yqm5v8z3k05c0000gn/T/go-build675742331=/tmp/go-build -gno-record-gcc-switches -fno-common"

  可以看到GOPATH和GOBIN都已生效。

  3、安裝IDEA外掛

  因為IDEA也支援go語言的開發,只是需要安裝外掛而已,在Configre裡選擇plugins。

  

  然後進入pulgins搜尋go,選擇外掛型別為language,然後點選install。

  

  安裝完成後會提示重啟IDEA,重啟即可。

  4、新建Go專案輸出Hello World

  我們先了解下Go專案的目錄:

  • |--bin //存放編譯後的可執行檔案;
  • |--src //存放專案原始檔

  點選+project進行新的專案建立,新建專案窗裡選中左側欄的Go,並在右上方選擇Go版本,然後點選下一步。

  

  在src下建立專案hello專案。  

  

  然後建立檔案hello.go,並錄入程式碼:

package hello

import (
    "fmt"
)

func SayHello(){
    fmt.Printf("hello! gogogogo.")
}

  注意,最好就是 hello.go中的package名和目錄中包檔名一致,檔名可以隨便。package表示該檔案所屬的包。要使該包中的函式或者變數被其他包所使用時,命名必須以大寫字母開頭!大寫開頭表示為公共變數,小寫開頭為私有變數

  接下來繼續在src下建立專案main-go專案。

  

  然後建立檔案main.go,新增程式碼:

package main

import "hello"

func main() {
    hello.SayHello()
}

  此時整體目錄結構為:

  

  然後右鍵選中main.go, 選擇Run 'go build main.go'執行main檔案。

  

  於是得到結果:

GOROOT=/usr/local/go #gosetup
GOPATH=/Volumes/work/go-repository #gosetup
/usr/local/go/bin/go build -o /private/var/folders/qj/7g6cxp596b93yqm5v8z3k05c0000gn/T/___go_build_main_go 
/Volumes/work/go-repository/src/main-go/main.go #gosetup /private/var/folders/qj/7g6cxp596b93yqm5v8z3k05c0000gn/T/___go_build_main_go hello! gogogogo. Process finished with exit code 0

  也可以執行go install main-go,於是就得到一個main-go的UNIX可執行檔案:

  

  雙擊執行會得到一樣的結果:

# kosamino @ HoudeMacBook-Pro in ~ [17:28:26] 
$ /Volumes/work/go-repository/bin/main-go ; exit;
hello! gogogogo.Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[程序已完成]

2、Docker容器安裝

  1、Docker 安裝

  接下來我們就進行Docker的安裝,macOS 我們可以使用 Homebrew 來安裝 Docker。Homebrew 的 Cask 已經支援 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:

$ brew cask install docker

==> Creating Caskroom at /usr/local/Caskroom
==> We'll set permissions properly so we won't need sudo in the future
Password:          # 輸入 macOS 密碼
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺  docker was successfully installed!

  但是我更推薦手動下載安裝,可以直接到Docker官網下載Docker Desktop,下載地址為:https://www.docker.com/get-started

  

  下載完成後,雙擊安裝,可以通過 docker version 檢視版本:

$ docker version          
Client: Docker Engine - Community
 Cloud integration: 1.0.2
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 16:58:31 2020
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:07:04 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

# houjing @ HoudeMacBook-Pro in ~ [18:02:13] 
$ docker-compose version  
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.1g  21 Apr 2020

  2、映象加速配置

  鑑於國內網路問題,後續拉取 Docker 映象都是從Docker Hub拉取,十分緩慢,我們可以需要配置加速器來解決,在此我建議配置阿里雲的映象加速伺服器。

  如果有阿里雲賬號,那麼在阿里雲控制檯搜尋“容器映象服務”,如下圖所示可以找到阿里雲的官方映象倉庫地址:

  

  得到了映象源後,就點選docker選擇Preference,然後進入Docker配置頁面。

  

  然後在配置頁面點選Docker Engine,就可以看到配置頁面。

  

  然後將如下配置內容複製進去,並應用即可。

{
  "features": {
    "buildkit": true
  },
  "debug": true,
  "experimental": false,
  "registry-mirrors":[
      "你獲取的的映象源地址.mirror.aliyuncs.com"
  ]
}

  然後可以通過 docker info 命令檢視是否配置成功。

$ docker info           
Client:
 Debug Mode: false
 Plugins:
  scan: Docker Scan (Docker Inc., v0.3.4)

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 3
 Server Version: 19.03.13
 Storage Driver: overlay2
 --------------------中間省略部分內容-------------------------
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://******.mirror.aliyuncs.com/
 Live Restore Enabled: false
 Product License: Community Engine

  3、Docker容器測試

  映象的拉取通過Terminal終端執行pull命令。

# 如果沒有說明版本,預設是latest最新版本。
docker pull image名字:版本

  當然也可以直接執行 docker run命令。

docker run -d -p 80:80 --name webserver nginx

  如上我們自動執行nginx映象,我們在瀏覽器搜尋localhost就可以看到進入到了nginx介面:

  

  然後我們還可以在Docker Dashboard進行映象和已啟動服務的檢視,如 Images 中映象的管理:

  

  Containers/Apps中進行已啟動App的管理:

  

3、超級賬Fabric的編譯

  1、程式碼拉取

  目前Fabric的官方倉庫託管在GitHub倉庫:https://github.com/hyperledger/fabric

  2、編譯安裝Peer元件

  待補充

  3、編譯安裝Orderer元件

  待補充

  4、編譯安裝ca元件

  待補充