参考了很多教程,但每一篇都会出现各种错误。原因在于都需要访问一些访问不了的国外网站。总结踩过的坑后,这篇教程将能够顺利成功进行Fabric的部署。
操作系统为64位的 Ubuntu 18.04 LTS
硬件为华为云的 1核2G 的弹性云服务器,机房在北京地区。
网络成功运行需要3个部分:Docker镜像、二进制文件、Fabric源码
配套环境需要多种软件:Docker、Docker-compose、Golang,此外所需的 git、cURL、vim 等,操作系统已经安装完成。可选工具 npm、node 是作为之后进行开发时需要的,暂时无需安装。
在Fabric中,节点都是运行在Docker中的,所以需要安装Docker以及下载 Fabric 需要的Docker镜像。
二进制文件是最坑的地方。在Linux中称为二进制文件,其实就是Windows中的可执行程序,这里称之为小工具,在生成证书、创建创世区块等过程都需要他们。但是,坑的地方在于,几乎所有教程里都需要从一个根本无法访问的网站下载这些工具。
Fabric源码是一个辅助的存在,里面包含了本地生成小工具的代码以及拉取镜像的代码。也有官方的示例代码可供之后开发参考。
下面将从环境布置、拉取Fabric源码、Docker镜像、生成小工具以及测试网络展开讲解。
安装Docker以及Docker-compose
sudo apt update
sudo apt install docker
sudo apt install docker-compose
安装Golang
使用wget下载某一版本的Golang压缩包文件到当前目录
wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
解压文件到 /usr/local 目录
sudo tar -zxvf go1.10.3.linux-amd64.tar.gz -C /usr/local/
配置环境变量
vim /etc/profile
在 profile 文件末尾添加如下内容
export GOPATH=$HOME/go
export PATH=/usr/local/go/bin:$PATH
首先,需要创建源码存放的目录,并进入hyperledger目录中
mkdir -p /root/go/src/github.com/hyperledger/
cd /root/go/src/github.com/hyperledger/
在 github 上的源码访问很慢,这里提供在“码云”中的下载链接
git clone https://gitee.com/songpy97/fabric.git
由于我们要切换到 V1.0的版本中,所以要查看版本并进行切换。
git branch -a
看到多个版本
这里选择切换到 release-1.0版本
git checkout release-1.0
cd /root/go/src/github.com/hyperledger/fabric/scripts
看到下列包含的文件
绿色的为可执行文件,我们选择 bootstrap.sh 运行。这个程序包含了二进制文件、fabric-samples源码以及Docker镜像的下载,但由于网络问题,二进制文件会下载失败。
由于默认的镜像下载网站速度非常慢,所以需要改用其他源。
首先创建并打开如下文件
vi /etc/docker/daemon.json
写入以下内容
{
"registry-mirrors":["https://0jpre1t4.mirror.aliyuncs.com"]
}
保存后重启docker服务
systemctl restart docker
开始下载
./bootstrap.sh
等待几分钟后下载完成,执行命令 docker images 查看镜像
至此,镜像下载完成
进入 fabric 目录,执行命令进行本地生成二进制文件
make release
生成的文件在 release/linux-amd64/bin 的文件中
但是,为了运行全局都能运行这些程序,需要添加到环境变量中,在 /etc/profile 末尾中添加
export PATH=/root/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin:$PATH
fabric源码中提供了示例网络的相关文件,我们可以直接进行测试。
进入目录
cd /root/go/src/github.com/hyperledger/fabric/examples/e2e_cli
执行命令
./network_setup.sh up
出现下图说明已经成功启动
执行命令 docker ps 查看运行的容器
看到 4个peer节点,1个cli节点,1个orderer节点
在另一个终端进入 /root/go/src/github.com/hyperledger/fabric 目录执行命令,进入cli节点(client节点,在该节点可以进行各种操作)
docker exec -it cli bash
此时,命令行的所在位置不是本机,而是cli节点中
查询操作,a的账户的金额
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
得到结果为90
转账操作,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 mychannel -n mycc -c '{"Args":["invoke","a","b","50"]}'
成功转账,最后再次查询a的账户
得到结果为40
最后,关闭网络
./network_setup.sh down
以上流程出现,表明网络运行成功。
公众号【WTC笔记】查看更多内容