1 环境准备
1.1 安装docker
使用阿里云镜像源安装Docker(不用代理,速度更快,一步到位
1、卸载可能存在的或者为安装成功的Docker版本 sudo apt-getremove docker docker-engine docker-ce docker.io 2、添加阿里云的GPG密钥 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 3、使用以下命令设置储存库 sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
4、安装最新版本的Docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin 5、验证Docker是否安装成功 docker version
安装docker的permission denied问题1:
没有执行权限
解决方案1:
# 将用户加入到 group 内 然后退出并重新登陆 sudo gpasswd -a ${USER} docker # 重启docker服务 systemctl restart docker # 当前用户切换到docker群组 newgrp - docker docker version
出现下图即是安装成功
1.2 安装docker-compose
# 下载2.6.1 docker compose 安装位置是/usr/local/bin/docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加可执行权限ls sudo chmod +x /usr/local/bin/docker-compose # 测试安装 sudo docker-compose --version
出现下图即是安装成功
1.3 go环境的安装
# wget下载 wget https://golang.google.cn/dl/go1.18.3.linux-amd64.tar.gz 解压到/usr/local # 如果是在文件地址的目录下直接执行下边代码, tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz # 如果不是需要给出绝对路径;比如: tar -C /usr/local -xzf /download/go1.18.3.linux-amd64.tar.gz 配置环境变量 全局配置 vi /etc/profile #在文件最后加上 export GOPATH=/goWorkPlace //这可以换成自己的工作目录 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin #让配置生效 source /etc/profile 当前用户配置 vi ~/.bashrc #在文件最后加上 export GOPATH=/goWorkPlace //这可以换成自己的工作目录 export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin #让配置生效 source ~/.bashrc go env #如果能打印出配置信息,则证明环境已经配置完成
问题2:go env
提示 没有找到go命令 go: command not found
如果经历以上步骤,未能打印出配置信息
解决方案2:输入 : source $HOME/.profile.
以此来更新配置,并且重启系统,这样配置才会生效。
出现下图即是安装成功
1.4 nodejs安装
#下载二进制源码包 wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz 解压并安装 # 指定压缩包解压到/opt目录下 $ sudo tar xvf node-v8.11.4-linux-x64.tar.xz -C /opt # 在/opt目录下得到 node-v8.11.4-linux-x64 目录 配置环境变量 # 打开系统级别的配置文件 /etc/profile $ sudo vim /etc/profile # 添加如下配置项, 保存退出 export NODEJS_HOME=/opt/node-v8.11.4-linux-x64 export PATH=$PATH:$NODEJS_HOME/bin # 重新加载配置文件 $ . /etc/profile # /etc/profile -> 设置环境变量的配置文件 # - 对当前系统下所有用户生效 测试 node -v
2 部署hyperledger Fabric
2.1 下载脚本
# 1. 创建放置的目录,进入该目录,下载脚本 cd ~ mkdir hyperledger-fabric cd hyperledger-fabric # 下载并执行脚本 需要翻墙 # 后接参数第一个 1.2.0=> Fabric的版本 第二个1.2.0=>Fabric的认证机构Fabric的版本 第三个是第三方库的版本 前两个参数一般保持一致 # 老版本 curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0 1.2.0 0.4.10 # 新版本 curl -sSL http://bit.ly/2ysbOFE | bash -s -- 2.0.0 1.4.4 0.4.18
保险起见我最终选择的还是老版本,有同好想要测试的话可以试试这个新版本,说不定最后就不会碰到我遇见的问题了
# 下载结束后 ,查看下载了什么镜像 $ docker images
此时我的镜像只有这一个
问题3:这是教程里面的截图,显而易见我缺少了很多镜像
原因:因为官方的sh文件存在版本号相关的问题,因此镜像的下载会缺少几个重要的文件,这个时候需要我们自己去拉取缺少的镜像。
解决方案3:对比上面的截图,缺什么就拉取什么
docker pull hyperledger/fabric-ca:1.2.0 docker pull hyperledger/fabric-orderer:1.2.0 docker pull hyperledger/fabric-peer:1.2.0 docker pull hyperledger/fabric-ccenv:1.2.0 docker pull hyperledger/fabric-tools:1.2.0 docker pull hyperledger/fabric-baseos:0.4.15 docker pull hyperledger/fabric-kafka:0.4.10 docker pull hyperledger/fabric-zookeeper:0.4.10 docker pull hyperledger/fabric-couchdb:0.4.10
接着我就拥有了以下镜像,但是对比教程还是缺少TAG为latest的镜像
如果你在拉取镜像的之后,出现了1.2.0以外的镜像,我的建议是先不管,继续拉取其它镜像
有的教程可能会说需要删除ID相同,TAG为latest的镜像,我在这里的建议是不要删!!!
原因在下文的问题3中会有解释,如果非删不可也可以先将流程走完,再删不迟
2.2 设置全局访问
下图是hyperledger-fabric/fabric-samples/bin中的文件
将hyperledger-fabric/fabric-samples/bin中的文件都复制到/usr/local/bin
cd hyperledger-fabric/fabric-samples/bin sudo cp * /usr/local/bin # 如果/usr/local/bin已经在PATH中了就已经完成了,没有的话加入到PATH中 # 查看PATH echo $PATH
2.3 First-Network 环境测试
# 执行 ./byfn.sh generate 命令生成相应的文件 $ cd ~/hyperledger-fabric/fabric-samples/first-network/ #进入到first-network $ ./byfn.sh generate
这是用来提前生成相关配置文件的(为接下来自动启动区块链网络提供准备)
结果 如图
# 执行 ./byfn.sh up 启动网络 # byfn == build your first network $ ./byfn.sh up
顺利的话会出现如下界面
但是在这里我遇到了困扰许久的问题
问题4:
unable to find image 'hyperladger/fabric-tools' locally
local fabric binaries an docker images are out of sync
LOCAL_VERSION 和 DOCKER_IMAGE_VERSION版本不统一
解决方案4:
# 先关闭网络 $ ./byfn.sh down # 使用以下方式从结构存储库中获取bootstrap.sh 并存储到./scripts curl -sS https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh -o ./scripts/bootstrap.sh # 将文件模式更改为可执行文件 chmod +x ./scripts/bootstrap.sh # 下载二进制文件和docker镜像 # ./scripts/bootstrap.sh [version] ./scripts/bootstrap.sh 1.2.0
因为前期下载的脚本以及拉取的镜像是1.2.0版本,所以下载二进制文件和docker镜像的版本号依旧选择1.2.0
结果出现以下 下载页面
此时输入docker images
有如下镜像,此时我们可以看到会有各种TAG的镜像
接着又是 生成 启动,此时可以正常出现START界面,但是end界面还是没有出现。
又出现如下问题
问题5:error getting endorser client for channel: endorser client failed to connect to peer1.org1.example.com:7051: failed to create new connection: context deadline exceeded peer1.org1 failed to join the channel, Retry after 3 seconds
解决方案5:
方法1
# 首先我们把网络停止: $ ./byfn.sh down # 我们在输入: $ sudo vim /etc/resolv.conf
方法2
则在base/peer-base.yaml 和docker-compose-cli.yaml文件的environment中添加
-GODEBUG=netdns=go
再次 执行 ./byfn.sh up 启动网络
结果如下
恭喜部署成功!!!