• 区块链学习之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镜像仓库地址也可以)。

      如果有阿里云账号,那么在阿里云控制台搜索“容器镜像服务”,如下图所示可以找到阿里云的官方镜像仓库地址:

       

      得到了镜像源后,就点击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组件

      待补充

  • 相关阅读:
    代理模式与Android
    图数据库 Titan 高速入门
    怎样编写支持命令行选项的程序
    协方差的意义
    我所理解的Spring AOP的基本概念
    Google搜索解析
    POJ 3311 Hie with the Pie floyd+状压DP
    JS怎样将拖拉事件与点击事件分离?
    C++语言笔记系列之十二——C++的继承
    Mac下Android配置及unity3d的导出Android
  • 原文地址:https://www.cnblogs.com/jing99/p/13968752.html
Copyright © 2020-2023  润新知