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鏡像倉庫地址也可以)。
如果有阿里雲賬號,那么在阿里雲控制台搜索“容器鏡像服務”,如下圖所示可以找到阿里雲的官方鏡像倉庫地址:
得到了鏡像源后,就點擊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組件
待補充