为什么80%的码农都做不了架构师?>>>
写在前面的话:
搭建 fabric1.1 环境需要注意的几个地方,和一些坑的地方
- go(运行环境,命令基本没用到)
- docker docker-compose(docker要用到国内镜像加速, 清除正在运行image 删除images 等常用命令)
- git(下载 版本切换!!! 关键)
- curl(本文不建议使用,网上很多会去用网上的脚本去执行,但是就算是官方的脚本,也有疏忽的地方,我掉坑了,请引以为戒)
- 本文采用CentOS7系统, 其他系统可能会在命令使用上稍有区别
- windows系统的必须条件是 jdk1.8+ maven3.5+ (这里是用sdk跑测试用例用,单纯搭建fabric环境时不用理会,请正确配置好系统环境变量,和eclipse中maven的配置文件)
- githup的应用拉取速度如果太慢可以用国内镜像我会开放自己的镜像地址 (git其实就是版本管理的, 我们甚至可以在别人那里复制项目到本地)
- fabrci1.1 需要的网络环境 包含认证证书,镜像 sdk-java中也要选择对应的证书 否则网络不通畅 切记
- 在这里我采用了虚拟机, 用的是桥接的网络连接模式 (使用真实的IP地址,可以和网络其他主机互通)
安装前准备
1.1 安装git
sudo yum install git
1.2 安装和配置Golang (>=1.7)
1.2.1 卸载低版本的golang
sudo yum remove golang
sudo yum autoremove
1.2.2 Go语言安装
网上使用 crul 或者 wget 下载go 我没有下载下来 附上GO安装链接
我推荐使用本地下载, 然后上传到指定目录
下载地址
# curl -O https://www.golangtc.com/download/go1.9.2.linux-amd64.tar.gz
# wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz
https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz
解压:
tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz
1.2.3 设置环境变量
先创建一个go的标准目录,很多地方会用到
mkdir -p /opt/gopath/src/github.com/hyperledger/
编辑 profile
vi /etc/profile
在/etc/profile文件末尾(所有用户有效)添加:
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=/opt/gopath
环境变量生效:
source /etc/profile
1.2.4 测试
执行
[root@nbfin hyperledger]# go version
go version go1.9.2 linux/amd64
1.3 安装和配置docker (>=1.12)
参考:https://docs.docker.com/engine/installation/linux/docker-ce/centos/
1.3.1 卸载低版本的docker
sudo yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine
1.3.2 安装docker-ce(from repository)
安装yum-utils和wget
sudo yum install -y yum-utils
sudo yum install -y wget
配置系统镜像(如果没有配置)
cd /etc/yum.repos.d
sudo wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
sudo yum clean all
sudo yum makecache
sudo yum update -y
添加stable repository
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装docker-ce
sudo yum makecache fast
sudo yum install docker-ce
启动docker
sudo systemctl start docker
1.3.3 常用命令
杀死所有正在运行的容器
docker kill $(docker ps -a -q)
删除所有已经停止的容器
docker rm $(docker ps -a -q)
强制删除所有镜像
docker rmi -f $(docker images -q)
docker清除所有容器:
docker rm -f $(docker ps -qa)
ubuntu下非root账户需要sudo docker rm -f $(sudo docker ps -qa)
我们跑不同的脚本.比如frbric的,sample的,还有sdk的,如果有正在运行的image,跑之前先清一下docker网络环境
docker rm $(docker ps -qa)
docker network prune
查看运行中某个image的日志
docker logs -f orderer.example.com
1.3.4 配置快速docker镜像
sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f8c3f422.m.daocloud.io
重启docker服务
sudo systemctl restart docker
重启docker服务生效
sudo service docker restart
1.3.5 测试docker
输入docker version查看版本
[root@nbfin yum.repos.d]# docker version
Client:
Version: 18.06.0-ce
API version: 1.38
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:08:18 2018
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.0-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: 0ffa825
Built: Wed Jul 18 19:10:42 2018
OS/Arch: linux/amd64
Experimental: false
1.4 安装和配置Docker Compose (>=1.8.1)
参考:https://docs.docker.com/compose/install/
1.4.1 获取
yum install docker-ce
1.4.2 测试
执行docker-compose version,得到结果
[root@nbfin yum.repos.d]# docker-compose version
docker-compose version 1.20.1, build 5d8c71b
docker-py version: 3.1.4
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
[root@nbfin yum.repos.d]#
1.5 安装pip及其他包
安装gcc
sudo yum install -y gcc gcc-c++ kernel-devel
sudo yum install -y python-devel libxslt-devel libffi-devel openssl-devel
下载get-pip.py
wget https://bootstrap.pypa.io/get-pip.py
安装pip
sudo python get-pip.py
安装其他包
sudo pip install --upgrade pip
sudo pip install behave nose docker-compose
sudo pip install -I flask python-dateutil pytz pyyaml couchdb flask-cors request pyOpenSSL pysha3 grpcio
sudo pip install urllib3 ndg-httpsclient pyasn1 ecdsa python-slugify grpcio-tools jinja2 b3j0f.a
fabric1.1 环境搭建
- 需要3个项目 ( fabric、fabric-samples、fabric-sdk-java )
- fabric 生成认证证书, 网络运行环境( * 注:原git地址:https://github.com/hyperledger/fabric.git )
- fabric-samples 简单运行网络环境 sdk运行脚本需要( * 注:原git地址:https://github.com/hyperledger/fabric-samples.git )
- fabric-sdk-java 和java应用通信的网络( * 注:原git地址:https://github.com/hyperledger/fabric-sdk-java.git )
- 注意以上三个项目本文用的gitee.com中我个人做的镜像, 这样做速度会比较快,但是项目中脚本中对应的git地址我并为做出修改
- 先搭建fabric1.1网络环境
- 下载项目到指定目录.并且checkout出对应版本 (*注 本文所有对应版本都是1.1)
cd /opt/gopath/src/github.com/hyperledger/
git clone https://gitee.com/ossea/fabric.git
2. checkout 1.1
cd fabric
git checkout release-1.1
3. 查看版本
[root@nbfin fabric]# git branch -a
master
* release-1.1
remotes/origin/HEAD -> origin/master
remotes/origin/feature/ca
remotes/origin/feature/convergence
remotes/origin/master
remotes/origin/release-1.0
remotes/origin/release-1.1
remotes/origin/release-1.2
remotes/origin/v0.6
remotes/origin/v1.0.0-preview
[root@nbfin fabric]#
4. 查看确认执行的脚本( 为啥确认? 因为我这里被坑多次)
[root@nbfin scripts]# cat /opt/gopath/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
#!/bin/bash
#
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
# if version not passed in, default to latest released version
export VERSION=${1:-1.1.0}
# if ca version not passed in, default to latest released version
export CA_VERSION=${2:-$VERSION}
# current version of thirdparty images (couchdb, kafka and zookeeper) released
export THIRDPARTY_IMAGE_VERSION=0.4.6
注意这里export VERSION=${1:-1.1.0} 和 export THIRDPARTY_IMAGE_VERSION=0.4.6 这两个是fabric1.1需要镜像对应的版本 如果是fabric1.2 这里会对应的是1.2 和0.4.10 网上很多curl bootstrap.sh 1.1.0 这样的 注意了 里面的变量也许给写死了...
5.执行bootstrap.sh 会下载所需要的镜像文件还有指定的二进制文件 和配置文件(此处的bin 和config稍后处理)
[root@nbfin scripts]# ./bootstrap.sh
===> Downloading platform specific fabric binaries
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 35.4M 100 35.4M 0 0 4243k 0 0:00:08 0:00:08 --:--:-- 7524k
===> Downloading platform specific fabric-ca-client binary
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 6109k 100 6109k 0 0 1570k 0 0:00:03 0:00:03 --:--:-- 1571k
===> Pulling fabric Images
==> FABRIC IMAGE: peer
- 其他几种下载方式(请注意下载下来的版本号,如果版本号不配套会出现网络不通畅, 如果你使用以下几种方式, 并且出现网络不通 , 可以打开脚本查看里面对应的版本是否正确, 有的脚本中可能会直接把版本写死, 并非获取参数):
- curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh | bash -s 1.1.0
- cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
- source download-dockerimages.sh -c x86_64-1.1.0 -f x86_64-1.1.0
- 二进制编译 make peer /order....
- 单独下载,并且标记tag为latest
- 直接运行./fabric.sh up
6. 查看镜像文件 这里有个坑说一下 很多多网上博文下载的镜像 如果有冲突 比如下载了某个1.2版本,可以删掉, 也需要标注tag 为latest 我经常出现版本不对 网络不通畅
[root@nbfin scripts]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hyperledger/fabric-ca latest 72617b4fa9b4 4 months ago 299MB
hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 4 months ago 299MB
hyperledger/fabric-tools latest b7bfddf508bc 4 months ago 1.46GB
hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc 4 months ago 1.46GB
hyperledger/fabric-orderer latest ce0c810df36a 4 months ago 180MB
hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 4 months ago 180MB
hyperledger/fabric-peer latest b023f9be0771 4 months ago 187MB
hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 4 months ago 187MB
hyperledger/fabric-javaenv latest 82098abb1a17 4 months ago 1.52GB
hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 4 months ago 1.52GB
hyperledger/fabric-ccenv latest c8b4909d8d46 4 months ago 1.39GB
hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 4 months ago 1.39GB
hyperledger/fabric-zookeeper latest 92cbb952b6f8 5 months ago 1.39GB
hyperledger/fabric-zookeeper x86_64-0.4.6 92cbb952b6f8 5 months ago 1.39GB
hyperledger/fabric-kafka latest 554c591b86a8 5 months ago 1.4GB
hyperledger/fabric-kafka x86_64-0.4.6 554c591b86a8 5 months ago 1.4GB
hyperledger/fabric-couchdb latest 7e73c828fc5b 5 months ago 1.56GB
hyperledger/fabric-couchdb x86_64-0.4.6 7e73c828fc5b 5 months ago 1.56GB
7. 正戏开始 启动fabric
cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh up
#################执行成功
2018-08-03 06:10:51.515 UTC [main] main -> INFO 008 Exiting.....
===================== Query on PEER3 on channel 'mychannel' is successful =====================
===================== All GOOD, End-2-End execution completed =====================
_____ _ _ ____ _____ ____ _____
| ____| | \ | | | _ \ | ____| |___ \ | ____|
| _| | \| | | | | | _____ | _| __) | | _|
| |___ | |\ | | |_| | |_____| | |___ / __/ | |___
|_____| |_| \_| |____/ |_____| |_____| |_____|
这个指令具体进行了如下操作:
- 编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin ( 这里需要一些生成的工具,如果不想生成,可以直接下载编译好的bin 粘贴过去, 这里同样需要注意对应的版本号! )
- 基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。
- 基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。
- 基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。
- 在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。
8. ctrl+c 退出 关闭网络 需要关闭是因为启动的docker容器还在运行 运行其它网络时会有冲突
./network_setup.sh down
fabric-sdk-java1.1 环境搭建
1. 项目获取
cd /opt/gopath/src/github.com/hyperledger
git clone https://gitee.com/ossea/fabric-sdk-java.git
2. 版本检出
cd fabric-sdk-java
git checkout release-1.1
3. 运行程序
cd /opt/gopath/src/github.com/fabric-sdk-java/src/test/fixture/sdkintegration
./fabric.sh up
这里就其实就是执行了 docker-composed 的启动 如果镜像没有在运行 应该不会报错的
经常用的对应的命令 就是 fabric.sh clean fabric.sh clean fabric.sh down
windows环境下 eclipse 调试 fabric-sdk-java1.1
- 需要环境 :
- jdk1.8+
- maven3.5+
- eclipse最新版本(请正确配置对应的maven3.5)
1. 获取项目
cd C:\Users\ossea\Desktop\bc_new>
git clone https://github.com/hyperledger/fabric-sdk-java.git
cd fabric-sdk-java
git checkout release-1.1
2. 修改pom.xml 在properties中加入下面一句话:
1.13.2
3.6.0
1.60
4.5.6
true
8.1.7.v20160121
UTF-8
0.7.9
1.2.17
IntegrationSuite.java
gpg2
windows-x86_64
3. 编译项目
mvn install
看到最后成功
[INFO] Installing C:\Users\ossea\Desktop\bc_new\fabric-sdk-java\target\fabric-sd
k-java-1.3.0-SNAPSHOT.jar to C:\Users\ossea\repository\org\hyperledger\fabric-sd
k-java\fabric-sdk-java\1.3.0-SNAPSHOT\fabric-sdk-java-1.3.0-SNAPSHOT.jar
[INFO] Installing C:\Users\ossea\Desktop\bc_new\fabric-sdk-java\pom.xml to C:\Us
ers\ossea\repository\org\hyperledger\fabric-sdk-java\fabric-sdk-java\1.3.0-SNAPS
HOT\fabric-sdk-java-1.3.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 27.923 s
[INFO] Finished at: 2018-08-03T14:49:35+08:00
[INFO] ------------------------------------------------------------------------
C:\Users\ossea\Desktop\bc_new\fabric-sdk-java>
4. 删掉.project 和 .classpath文件 重新生成
mvn eclipse:eclipse
5. 配置eclipse中的maven配置文件 和系统中对应的MAVEN_HOME保持一致
6. eclise导入maven项目
出现这个错误稍后处理
出现如下错误在蓝色条上点击鼠标右键 选择 Quick Fix
选择第二条 Finish
修改TestConfig.java
这里需要注意一下 被坑的厉害
一定注意到第一个红框是服务器地址
第二个红框是对应的版本号!!
会读取认证证书
执行End2endIT的junit的测试
如果不用 mvn ecclipse:eclipse 生成 而是直接导入进来的话 会需要 吧src/test/java目录设置成 use as source folder 并且需要 工程添加junit的支持
最后运行成功显示
...
.....
......
-----END CERTIFICATE-----
Transaction action 1 has 4 chaincode input arguments
Transaction action 1 has chaincode input argument 0 is: deploy
Transaction action 1 has chaincode input argument 1 is: bar
Transaction action 1 has chaincode input argument 2 is: ?E???)??github.com/example_cc??example_cc_go??1????init??a??500?...
Transaction action 1 has chaincode input argument 3 is: ? ??????????????????????????????????????Org1MSP??????Org2MSP????...
Transaction action 1 proposal response status: 200
Transaction action 1 proposal response payload: ??example_cc_go??1??escc"?vscc*Z? ??????????????????????????????...
Transaction action 1 proposal chaincodeIDName: lscc, chaincodeIDVersion: 1.1.0, chaincodeIDPath:
Transaction action 1 has 2 name space read write sets
Namespace example_cc_go write set 0 key a has value '500'
Namespace example_cc_go write set 1 key b has value '300'
Namespace lscc read set 0 key example_cc_go version [0:0]
Namespace lscc write set 0 key example_cc_go has value '??example_cc_go??1??escc"?vscc*Z? ??????????????????????????????...'
current block number 0 has data hash: f8bb2ebd01ef813ed1c82b24a4ca0afa82c7082a7cfaa4533947746fd6e4e7b5
current block number 0 has previous hash id:
current block number 0 has calculated block hash is dd4e47ac3327485408947e935c11d87d3155cdbb95ca415999bcb55c963e4f6a
current block number 0 has 1 envelope count:
Transaction number 1 has transaction id:
Transaction number 1 has channel id: bar
Transaction number 1 has epoch: 0
Transaction number 1 has transaction timestamp: 八月 3, 2018 16:39:10 下午
Transaction number 1 has type id: ENVELOPE
Transaction number 1 has nonce : df35cca706b77debbbf4c6acd35888d0f23d48ff402e2c8a
Transaction number 1 has submitter mspid: OrdererMSP, certificate: -----BEGIN CERTIFICATE-----
MIICCzCCAbKgAwIBAgIQUcfZvWT8UgJJ30cDzW15bDAKBggqhkjOPQQDAjBpMQsw
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
bGUuY29tMB4XDTE4MDIyNTEyNDMyOVoXDTI4MDIyMzEyNDMyOVowWDELMAkGA1UE
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
Y28xHDAaBgNVBAMTE29yZGVyZXIuZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggq
hkjOPQMBBwNCAARQfP/qUmnEcXIlE5PlkR4RCMn2XykMsPFZN0k1XfpkSA4KP0nC
ALUgiITKLsOQohYA7oDaFQD/ZhaRswgwEgmNo00wSzAOBgNVHQ8BAf8EBAMCB4Aw
DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCAZtRU3kIVNroUKD5QVcPw8VpuHhyOT
OtWpwxnSk/LUkjAKBggqhkjOPQQDAgNHADBEAiApAQ0e/qdVsd5qtXGHqYKRt30Y
LPaGPmy8wbX8+/KDhwIgXtt1TL97Z0rfq7iKXzXLRNk8jNntsrmRFoLVstXr3dA=
-----END CERTIFICATE-----
That's all folks!