ubuntu16.04 配置Hyperledger Fabric1.4.4环境
在腾讯云服务器上配置Hyperledger Fabric1.4.4环境的流程,在本地的计算机或者虚拟机上也没问题,只是克隆代码的部分会比较慢。之前按照这个差不多的流程安装过两三次。几乎每一个部分都注明了参考哪里,如果忘记,点开参考内容再看一看。
准备工作
- 安装 curl
sudo apt-get install curl
- 安装nodejs 10.x ,node.js 自带npm
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install nodejs
- 检查nodejs 10.x 安装完成
- 安装git
sudo apt-get install git
git --version
- 检查gcc版本,我是5.4.0
gcc -v
1.安装、配置go语言环境
- 把版本号换成当时最新的版本号,或者直接复制下载链接地址也可。
cd ~
wget https://studygolang.com/dl/golang/go1.13.5.linux-amd64.tar.gz
tar -xzf go1.13.5.linux-amd64.tar.gz //解压
sudo mv go /usr/local //移动
- 编辑当前用户的环境变量
vim ~/.profile
- 在.profile中加入如下内容
#go语言环境变量设置 2020/01/09 16:01
export PATH=$PATH:/usr/local/go/bin
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$HOME/go/bin
- 重新加载
.profile
文件,查看go版本,检查go语言环境是否配置成功
source ~/.profile
go version
go version go1.13.5 linux/amd64
至此,go安装完成
2.安装docker
参照docker官方文档 https://docs.docker.com/install/linux/docker-ce/ubuntu/
- 卸载旧版本docker(如果有的话)
sudo apt-get remove docker docker-engine docker.io containerd runc
- 更新包
sudo apt-get update
- 安装软件包以允许apt以HTTPS使用远程库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
- 添加docker官方的GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 通过搜索指纹的最后8个字符,验证您现在是否拥有指纹为9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的密钥。
sudo apt-key fingerprint 0EBFCD88
- 使用以下命令设置稳定版本的远程库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 再次更新包索引
sudo apt-get update
- 安装最新版本的Docker Engine-Community和Containerd:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 查看docker版本
- 这里不加sudo时看不到Server
ubuntu@VM-0-5-ubuntu:~$ docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:50:12 2019
OS/Arch: linux/amd64
Experimental: false
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied
ubuntu@VM-0-5-ubuntu:~$ sudo docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:50:12 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.5
API version: 1.40 (minimum version 1.12)
Go version: go1.12.12
Git commit: 633a0ea838
Built: Wed Nov 13 07:48:43 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.10
GitCommit: b34a5c8af56e510852c35414db4c1f4fa6172339
runc:
Version: 1.0.0-rc8+dev
GitCommit: 3e425f80a8c931f88e6d94a8c831b9d5aa481657
docker-init:
Version: 0.18.0
GitCommit: fec3683
- 用户组docker中没有当前用户,将当前用户添加到docker用户组
sudo cat /etc/group //查看用户组
sudo usermod -aG docker ubuntu
重要提示:下面这个步骤是为了拉取 docker 镜像的时候加速!!!
注意如果你用的不是腾讯云的云服务器,千万不要!不要!不要!做这一步!!!
腾讯云的docker hub镜像只能给腾讯家的服务器加速!!!
- 添加腾讯云的docker hub镜像,参考官方文档:https://cloud.tencent.com/document/product/457/9113
- 再提示一次,官方文档中已经这样说明了:此加速器地址需在腾讯云云服务器中配置才可生效
- 创建或修改
/etc/docker/daemon.json
文件,并写入以下内容:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
- 依次执行以下命令,重新启动 Docker 服务。
sudo systemctl daemon-reload
sudo systemctl restart docker
那么如果你是自己的电脑或是虚拟机或是其他的云服务器那怎么加速呢?
其实步骤和上面是完全一样的,只是在选择镜像地址的时候,不要用腾讯的 docker hub 镜像就行了。
下面是几个国内 docker hub 镜像站的使用说明,就像傻瓜相机一样简单 _
其他的很多镜像站需要注册了才能用,因为我个人比较不太喜欢注册很多账号,就没有列出来,想要用其他的镜像站,可以自己搜一搜。配置方式和我前面写的一样,只是换了个地址罢了。
- 如果执行docker version出现如下提示,则为权限不足
- 需要输入如下命令,授权
sudo chmod -R 777 /var/run/docker.sock
至此,docker安装完成。
至此,docker安装完成。
3.安装Docker-Compose
参照官方文档:https://docs.docker.com/compose/install/
- 下载最新的稳定版Docker Compose 这一步速度非常慢,也可以选择用DaoCloud提供的下载,比较快,但是不知道为什么版本并没有更新到1.25.0,附上DaoCould的说明链接:https://download.daocloud.io/Docker_Mirror/Docker_Compose/1.12.0
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 授权
sudo chmod +x /usr/local/bin/docker-compose
- 测试安装是否成功
docker-compose --version
至此,Docker-Compose安装完成。
4.下载 fabric源码、fabric-samples源码、fabric镜像
- 创建go目录
cd ~
mkdir -p ~/go/src/github.com/hyperledger
sudo chmod -R 777 go
- 切换到相应目录用git把fabric源码克隆下来,因为从github上克隆,所以很慢,好在服务器的网很稳定,根据我这次配置环境以及以前的经验,快的话1小时40分钟左右,慢的话4个小时。但是,有各种各样的加速 clone 的方法,也可以一两分钟搞定,比如把官方仓库导到码云之类的。
$ cd ~/go/src/github.com/hyperledger
$ git clone https://github.com/hyperledger/fabric.git
这里有两种操作方式,第一种就是直接使用官方提供的 bootstrap.sh 脚本,比较简单,但是慢。第二种自己 git clone 指定版本的代码,再用 docker pull 下来指定版本的镜像。实际上,我后来经常用第二种方式,因为建了自己的仓库,clone 代码要远比直接从 github 快得多,使用 docker 镜像站下载我需要的镜像也非常快,相比于简单而慢,我更珍惜时间一点。
方法一:(简单粗暴但慢型)
- 进入 ~/go/src/github.com/hyperledger/fabric/scripts路径下载fabric镜像,在服务器上下载比较稳定,也比较快,我大概用了40分钟左右,在本地的机器上就比较慢了。
- 有现成的脚本文件,直接执 ./bootstrap.sh就可以了 fabric-samples 和 需要的 docker 镜像会一起给你搞定。
cd go/src/github.com/hyperledger/fabric/scripts
./bootstrap.sh
- 最终下载完成后,会列出所下载的 docker 镜像,具体如下图所示:
- 路径中也会多出fabric-samples文件夹
至此,下载 fabric源码、fabric-samples源码、fabric镜像完成,如果你操作完了方法一,就不要再看方法二了,没必要了,直接做第五步吧。
方法二:(稍复杂但快型)
这是我后来修改文章又加进来的内容。
- 下载 fabric-samples 源码
为了采用更合理一些的文件结构。我把 fabric-samples
直接放在 go/src/github.com/hyperledger/
目录下
clone 下来指定版本的 fabric-samples
,下面的版本号换成自己需要的版本号,仓库地址换成自己的仓库地址就好了。这个,如果用国内的仓库,大概几十秒就能完成吧,省下来的几十分钟,喝杯咖啡它不香吗。
git clone -b release-1.4 仓库地址
- 下载 docker 镜像
下载自己指定版本的 docker 镜像。
我下载之前在镜像站上搜了一下我要的镜像,看一下有没有。
镜像站比如:https://hub.docker.com/ 这个网站其实并不需要登录,搜索栏在左上角。
直接搜索需要的镜像,然后选择版本,复制命令,pull下来即可,也很快,其实亲手部署了两三次之后,就不用一个个搜了哈哈哈。再后来就可以自己做一个系统镜像,随便给哪一台服务器装。
比如我需要 fabric-orderer
镜像的 1.4 版本,其他的镜像也只是需要修改对应的名称和版本就行了。
docker pull hyperledger/fabric-orderer:1.4
就像这样一个个把所有需要的镜像版本都 pull 下来就行了,整体还是挺快的。
至此,下载 fabric源码、fabric-samples源码、fabric镜像完成。
5.编译所需工具
主要是 configtxgen 、cryptogen 、configtxlator
工具,打开 go/src/github.com/hyperledger/fabric/common/tools
目录,可以看到工具就在这个目录下。
进入 configtxgen
目录
go install
稍等一会儿,执行完毕,如果没有报任何信息,那么就是安装成功了,没有消息就是好消息。
进入 configtxgen
目录
go install
稍等一会儿,执行完毕,如果没有报任何信息,那么就是安装成功了,没有消息就是好消息。
同样的,进入 cryptogen
目录
go install
稍等一会儿,执行完毕,如果没有报任何信息,那么就是安装成功了,没有消息就是好消息。
安装完成后,进入到 $GOPATH/bin
目录,会多出如下 3 个文件夹。
至此,工具编译完成
6.运行提供的范例
first-network 的创建、first-network 的启动、cli 客户端的操作、first-network 的停止。
参考链接:https://blog.csdn.net/Sun_Hui_/article/details/100928155 这位博主写得很明确。
1.first-network 的创建
- 切换到first-network目录下
cd fabric-samples
cd first-network
- 创建第一个 channel(myfirstchannel 为通道名称,不写默认为 mychannel,可以自己定义):
./byfn.sh -m generate -c myfirstchannel
- 自动创建过程如下:
2.first-network 的启动
- 指定通道名,启动网络:
./byfn.sh -m up -c myfirstchannel
- 启动过程如下:
3.cli客户端操作
- 进入 cli 容器:
docker exec -it cli bash
- 查询a的余额
peer chaincode query -C myfirstchannel -n mycc -c '{"Args":["query","a"]}'
- 查询b的余额
peer chaincode query -C myfirstchannel -n mycc -c '{"Args":["query","b"]}'
- a 向 b 转账 50 并查询各自的余额:
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C myfirstchannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a","b","50"]}'
4.first-network 的关闭
- 先退出容器
exit
- 关闭网络
./byfn.sh -m down
- 结果如下:
- 执行 docker ps -a 可以看到 容器都已经被移除了:
5.注意事项
(这里的内容我并没有用到,复制过来仅做笔记)
若上次启动网络后没有关闭,下次启动网络之前一定要先执行 ./byfn.sh -m down 命令清理之前的遗留数据和删除已经存在的容器,不然启动网络时会报错!!!
./byfn.sh -m down
然后再次启动网络,只需执行 ./byfn.sh -m up -c myfirstchannel 即可。
关闭所有 docker 容器的命令(如果用得到的话):
docker rm -f $(docker ps -aq)
至此,first-network范例运行成功,Hyperledger Fabric1.4.4环境配置成功。
做完这篇笔记学习了很多篇官方文档、博客等内容,对其中的部分操作次序做了修改,有个别地方选择按照官方文档的说明安装,比看各种各样的博客有用得多。
整个流程一遍走通,没有什么问题。
本篇为博主原创,博客从云+社区红桃K账号转移到博客园原创链接
参考链接汇总:
https://cloud.tencent.com/document/product/457/9117
http://guide.daocloud.io/dcs/daocloud-9153151.html
https://www.linuxidc.com/Linux/2018-05/152393.htm
https://blog.csdn.net/Sun_Hui_/article/details/100928155
https://blog.csdn.net/u012485637/article/details/81228951
https://blog.csdn.net/guoqingshuang/article/details/81180295