Hyperledger Fabric V1.0 环境搭建 - 个人文章 - SegmentFault

学习区块链技术有段时间了,刚好晚上有空把超级账本子项目fabric v1.0部署运行及开发环境的搭建过程整理下,编写的内容主要参照官方文档。由于fabric项目目前还处于孵化阶段,正式版本预计5月份才会到来。近期官方示例和文档也频繁更新中,本文内容主要基于源码中 “examples” 和 “devenv” 来完成fabric入门示例的快速部署运行和统一开发环境的搭建。

一、 入门示例部署

流程:WIN主机 -> VBox -> Ubuntu -> Docker -> Fabric Example

准备:VirtualBox 5.1.8、Ubuntu 16.04 LTS、Git 2.12.2、Go1.8、Docker CE17、Pip2

步骤:

1、 安装 VirtualBox

官方下载安装包“VirtualBox-5.1.18-114002-Win.exe”,双击运行按默认方式安装即可,由于新建虚拟机占用空间较大,调整默认存储位置,如下设置:Vbox>管理>全局设定

2、 安装 Ubuntu

官方下载Ubuntu桌面版IOS镜像“ubuntu-16.04.2-desktop-amd64.iso”,进入VBox点击新建按钮,弹出窗口名称输入“hyperledger”,类型选择“Linux”版本选择“Ubuntu (64-bit);继续下一步,内存大小输入4096MB,默认方式点击下一步,创建,下一步,下一步,虚拟硬盘输入30GB然后点击创建,虚拟机配置基本设置好了。接下来设置光盘启动安装系统,回到Vbox主界面选中刚新建的“hyperledger”项目后点击设置,界面如下:

选择磁盘弹出窗口选择刚下载好的ISO镜像,点击OK回到主界面点击启动,接下来就是Ubuntu系统安装过程了,安装过程按提示安装即可。最后进入Ubuntu系统安装增强工具(分辨率自动适应窗口大小),如下:

Vbox增强工具安装好重启系统,接下来工作主要在是Terminal下操作,建议启用root用户来安装后续工具软件。(sudo passwd更改root密码,后续直接su 就可切换至root用户了)

3、 安装Git

$ apt-get update                                                            
$ apt-get install git

4、 安装Go

$ wget https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz    
$ tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz                        
$ vi /etc/profile                                                        
追加内容                                                                    
export GOROOT=/usr/local/go                                                
export PATH=$PATH:$GOROOT/bin                                            
$ source /etc/profile

5、 安装Pip

$ apt-get install python-pip

6、 安装Dockker及Docker Compose

1) 安装Docker

$ apt-get install \                                                        
    apt-transport-https \                                                
    ca-certificates \                                                    
    curl \                                                                
    software-properties-common                                            
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg \                    
    | sudo apt-key add -                                                    
$ add-apt-repository \                                                    
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \            
   $(lsb_release -cs) \                                                    
   stable"                                                                
$ apt-get update                                                            
$ apt-get install docker-ce

// 测试,正确结果将返回“Hello from Docker!”等信息

$ docker run hello-world

2) 安装Docker-compose

$ pip install docker-compose>=1.8.0

7、 部署示例hackfest

1) 创建工作目录

$ mkdir -p /opt/workspace/hackfest                                        
$ cd /opt/workspace/hackfest

2) 下载示例代码

$ curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null;  tar -xvf sfhackfest.tar.gz

解压后文件目录如下:

├── ccenv
│   └── Dockerfile
├── channel_test.sh
├── docker-compose-gettingstarted.yml
├── sfhackfest.tar.gz
├── src
│   └── github.com
└── tmp
    ├── ca
    ├── orderer
    ├── peer0
    ├── peer1
    ├── peer2
    └── peer3

3) 使用Docker构建应用网络

// 构建示例的Docker镜像,此镜像将从Docker Hub镜像库下载:

$ docker-compose -f docker-compose-gettingstarted.yml build

// 通过Docker-compose构建应用网络

$ docker-compose -f docker-compose-gettingstarted.yml up –d

执行后会产生6个Docker容器,3个peer、一个order、一个cli、一个ca。可能通过以下命令查看:

$ docker ps

// 进入客户端,确保channel已创建并且已加入peers

$ docker exec -it cli bash
$ more results.txt

看到以上结果,说明示例已部署成功,接下来通过CLI端进行资产转移测试。

8、 CLI测试

1) 进入cli容器

$ docker exec -it cli bash

2) 创建新的channel(myc2)

$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050                         
$ peer channel create -c myc2

执行后将产生一个创始块myc2.block

3)将channel分别加入到3个peer

$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer0:7051 peer channel join -b myc2.block
$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer1:7051 peer channel join -b myc2.block
$ CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 CORE_PEER_ADDRESS=peer2:7051 peer channel join -b myc2.block

4)部署chaincode,初始化资产a,b的值分别为100,200

$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode deploy -C myc2 -n mycc -p github.com/hyperledger/fabric/examples -c '{"Args":["init","a","100","b","200"]}'

5) 调用invoke命令,资产a向b转移10单位数据

$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode invoke -C myc2 -n mycc -c '{"function":"invoke","Args":["move","a","b","10"]}'

6)查询a和b当前的值

$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","a"]}'

$ CORE_PEER_ADDRESS=peer0:7051 CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer:7050 peer chaincode query -C myc2 -n mycc -c '{"function":"invoke","Args":["query","b"]}'

从查询结果看出a,b之间资产已成功转移

7)清理并关闭容器

$ docker-compose -f docker-compose-gettingstarted.yml down

至处已完成hackfest示例部署运行,Fabric项目的examples目录下还有其它演示案例,运行原理基本相似,如“e2e_cli”。Hyperledger官方已将编译好的镜像上传到Docker Hub仓库中,示例都是基于仓库的镜像通过docker-compse进行容器编排运行的。

二、 开发环境搭建

Fabric项目开发环境使用Vagrant运行Ubuntu镜像,从而启动Docker容器部署运行应用。这样使得不同平台(如MacOSX,Windows,Linux)开发人员拥有了一致的开发体验。

流程:WIN|MAC主机 -> Vagrant -> VBox -> Ubuntu -> Docker

准备:VirtualBox 5.1.8、Vagrant1.9.3、Git 2.12.2、Go1.8

步骤:

1、 安装 VirtualBox

官方下载安装包“VirtualBox-5.1.18-114002-Win.exe”,双击运行按默认方式安装即可,由于新建虚拟机占用空间较大,可整默认存储位置,如下设置:Vbox>管理>全局设定

2、 安装Vagrant

官方下载安装包“vagrant_1.9.3.msi”,双击按默认方式安装即可。注意安装之前确保Vbox已安装好。

3、 安装Git

官方下载安装包“Git-2.12.2-64-bit.exe”,双击按默认方式安装即可。

4、 安装Go

官方下载安装包“go1.8.windows-amd64.msi”,双击按默认方式安装即可。安装完后需要在系统变量PATH中追加 “;c:\Go\bin”。

5、 下载源码

1) 创建项目目录

E:/ GoProjects/src/github.com/hyperledger

2) 下载github源码

git clone https://github.com/hyperledger/fabric.git                        
git clone https://github.com/hyperledger/fabric-ca.git

CMD目录结构如下:

6、 启动Vagrant

cd E:\GoProjects\src\github.com\hyperledger\fabric\devenv                

vagrant up

Vagrant将根据devenv目录下的配置文件Vagrantfile,自动完成很多任务:

1) 从Vagrant官方下载基础镜像“hyperledger/fabric-baseimage”,此镜像已安装好了fabric项目运行环境相关软件;

2) 将当前工作目录自动挂载到Ubuntu镜像下的gopath目录,这样主机维护的代码自动同步到虚拟机运行环境中。而不同平台开发人员可以根据自己的喜好使用任意IDE维护工作目录的代码。

3) 执行shell定义的各种批量任务,包括Vbox管理、Ubuntu运行都在命令行中进行控制。

Vagrant启动完后,fabric的基础开发运行环境已配置好,接下来获取ssh配置信息:

7、 SSH远程登录

由于vagrant在windows环境下vagrant ssh不能直接进去,可以根据上面的ssh配置信息通过Xshell等软件远程登录:



点击导入按钮选择之前生成的ssh密钥:

E:/GoProjects/src/github.com/hyperledger/fabric/devenv/.vagrant/machines/default/virtualbox/private_key

成功安装登录后的界面如下:

8、 编译源码

进入fabric工程目录,执行make命令:make dist-clean all



由于编译过程需要下载很多相关软件及Docker镜像,第一次编译过程特别耗时,中间还可能存在网络被墙问题,需要针对性去解决,成功编译后将产生如下镜像文件:



同时在build目录下产生如下可执行程序:

源码编译完成,开发运行环境基本就搭建好了,接下来可以在宿主机器上工作目录(WINDOWS/MAC/LINUX)使用自己喜爱的IDE开发智能合约chaincode业务逻辑,ca成员认证管理,web控制台等,部署到VM中Docker中运行,通过端口映射在宿主机直接使用等。

三、 疑问?

1、 下载外网的软件很慢,经常出现timeout或无法访问问题?

很多原因是网络服务在国内被封了,Google生态相关的服务尤其明显,建议使用VPN或翻墙软件, 如Shadowsocks。

2、 Docker镜像下载特别慢,经常中断?

建议使用国内免费Docker镜像加速服务,国内的网易、DaoCloud和阿里云等提供的下载速度可以达1M/S以上,阿里云镜像加速可访问:https://dev.aliyun.com

3、 Go语言开发工具选择?

目前可选的工具有liteIDE(国产)、Visual Studio Code、GoSubmlime、Goclipse等,从体验来看个人更倾向Gogland的IDE,它是Jetbrains公司近期推出的EAP版,使用过IDEA、WebStorm都知道该公司的出来的IDE都是精品。

4、 启动Docker-compose部署fbric服务时出现grpc连接超时问题?

Vbox下注意虚拟机操作系统网络设置是否为桥接模式,另外可以排查下是否是DNS解析问题引起的。

5、 Vbox不能安装64位Linux系统?

检查电脑CPU是否支持虚拟化技术,BOIS设置是否开启虚拟支持。

6、 Windows10系统安装Docker套件后,Vbox不能启动?

Docker套件安装完后默认会开启Windows10自带的虚拟技术,此时Vbox使用的CPU支持虚拟技术将无法使用。因此WIN10下两软件默认不兼容。

7、 目前项目坑太多,习惯折腾就好 >> 哈哈~~~

你可能感兴趣的:(hyperledger,fabric,v1)