接下来一段时间要学习区块链相关内容, 从私有链开始了, 一系列文章, 一方面作为笔记, 另一方面方便交流学习.
第一篇主要记录在腾讯云服务器上配置 Hyperledger Fabric1.4.4 环境的流程, 在本地的计算机或者虚拟机上也没问题, 只是克隆代码的部分会比较慢. 之前按照这个差不多的流程安装过两三次. 几乎每一个部分都注明了参考哪里, 如果忘记, 点开参考内容再看一看.
准备工作
安装 node.JS 8.x ,node.JS 自带 NPM
- curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
- sudo apt-get install Node.JS
检查 node.JS 8.x 安装完成
检查 node.JS 安装
安装 Git
- sudo apt-get install Git
- Git --version
检查 Git 安装
安装 curl
sudo apt-get install curl
检查 curl 安装
检查 gcc 版本, 我是 5.4.0
gcc -v
gcc 版本
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
查看 go 版本, 检查 go 语言环境是否配置成功
- go version
- go version go1.13.5 Linux/amd64
go 语言环境配置成功
至此, 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:///var/run/docker.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 hub 镜像, 参考官方文档: https://cloud.tencent.com/document/product/457/9113
创建或修改
/etc/docker/daemon.JSON
文件, 并写入以下内容:
- {
- "registry-mirrors": [
- "https://mirror.ccs.tencentyun.com"
- ]
- }
目录中没有 daemon.JSON, 需要自己创建
添加了 daemon.JSON 文件
依次执行以下命令, 重新启动 Docker 服务.
- sudo systemctl daemon-reload
- sudo systemctl restart docker
如果执行 docker version 出现如下提示, 则为权限不足
权限不足提示
需要输入如下命令, 授权
sudo chmod -R 777 /var/run/docker.sock
正确结果
至此, 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 个小时.
- $ cd ~/go/src/GitHub.com/hyperledger
- $ Git clone https://github.com/hyperledger/fabric.git
克隆 fabric 源码
进入 ~/go/src/GitHub.com/hyperledger/fabric/scripts 路径下载 fabric 镜像, 在服务器上下载比较稳定, 也比较快, 我大概用了 40 分钟左右, 在本地的机器上就比较慢了.
有现成的脚本文件, 直接执 ./Bootstrap.sh 就可以了
- cd go/src/GitHub.com/hyperledger/fabric/scripts
- ./Bootstrap.sh
进入路径, 执行脚本文件
最终下载完成后, 会列出所下载的 docker 镜像, 具体如下图所示:
下载的 docker 镜像
路径中也会多出 fabric-samples 文件夹
fabric-samples
至此, 下载 fabric 源码, fabric-samples 源码, fabric 镜像完成.
5. 运行提供的范例
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
自动创建过程如下:
创建 myfirstchannel
2.first-network 的启动
指定通道名, 启动网络:
./byfn.sh -m up -c myfirstchannel
启动过程如下:
myfirstchannel 启动过程
3.cli 客户端操作
进入 cli 容器:
docker exec -it cli bash
进入 cli 容器后
查询 a 的余额
peer chaincode query -C myfirstchannel -n mycc -c '{"Args":["query","a"]}'
查询 a 的余额
查询 b 的余额
peer chaincode query -C myfirstchannel -n mycc -c '{"Args":["query","b"]}'
查询 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"]}'
重新查询 a,b 的余额
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 环境配置成功.
做完这篇笔记学习了很多篇官方文档, 博客等内容, 对其中的部分操作次序做了修改, 有个别地方选择按照官方文档的说明安装, 比看各种各样的博客有用得多.
整个流程一遍走通, 没有什么问题.
参考链接汇总:
- https://cloud.tencent.com/document/product/457/9117
- http://guide.daocloud.io/dcs/daocloud-9153151.html
- https://studygolang.com/dl
- 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
来源: https://www.qcloud.com/developer/article/1570460