Redhat 7.0离线部署Hyperledger Fabric:防火墙环境下获取二进制或源码构建咨询
我刚好处理过不少企业防火墙环境下的Hyperledger Fabric离线部署问题,针对你在RHEL 7.0上部署1.0.5版本的需求,给你整理了几个落地性强的方案,涵盖二进制文件获取、源码构建以及Docker镜像的离线迁移:
一、直接获取预编译的Hyperledger Fabric二进制文件
这是最省心的方式,不需要编译,步骤如下:
- 在一台能联网的机器上,找到Hyperledger Fabric 1.0.5版本的预编译Linux二进制压缩包(对应amd64架构)
- 把压缩包通过内部文件服务器、U盘等离线传输方式,拷贝到你的RHEL 7.0机器上
- 解压到系统可执行路径,比如执行:
tar -xzf fabric-linux-amd64-1.0.5.tar.gz -C /usr/local/bin/ - 验证是否生效:执行
peer version,如果能显示1.0.5版本信息,说明二进制文件已部署成功
二、从源码离线构建二进制文件
如果需要自定义代码或者无法获取预编译包,可以用这个方法,核心是先在联网机器上准备好所有依赖,再迁移到离线环境编译:
1. 联网机器准备依赖与源码
- 安装Go 1.7.x版本(注意:Fabric 1.0.5对Go版本有严格要求,必须用1.7系列,不能用更高版本),配置好
GOPATH环境变量 - 克隆指定版本的Fabric源码:
git clone -b v1.0.5 https://github.com/hyperledger/fabric.git - 进入Fabric源码目录,下载所有依赖包:
cd fabric go get -d ./... - 把整个
GOPATH目录和Fabric源码目录打包成压缩包,传输到离线的RHEL 7.0机器
2. 离线机器编译构建
- 在离线机器上安装和联网机器完全相同版本的Go,配置好
GOPATH - 把打包的
GOPATH内容覆盖到本地的GOPATH目录,确保依赖包都到位 - 进入Fabric源码目录,执行构建命令:
- 构建所有核心组件和工具:
make all - 或者单独构建某个组件,比如peer:
make peer,orderer:make orderer
- 构建所有核心组件和工具:
- 构建完成后,二进制文件会生成在
fabric/build/bin/目录下,把这些文件复制到/usr/local/bin/即可
三、Docker镜像的离线迁移(解决Docker Hub访问受限问题)
因为你无法直接从Docker Hub拉取镜像,所以需要先在联网机器上拉取所需镜像,再导出、导入到离线环境:
1. 联网机器拉取并导出镜像
Fabric 1.0.5部署需要以下核心镜像,你可以逐个拉取:
docker pull hyperledger/fabric-peer:1.0.5 docker pull hyperledger/fabric-orderer:1.0.5 docker pull hyperledger/fabric-ccenv:1.0.5 docker pull hyperledger/fabric-ca:1.0.5 docker pull hyperledger/fabric-tools:1.0.5 docker pull hyperledger/fabric-baseos:0.3.1
- 拉取完成后,把每个镜像导出为tar文件:
docker save hyperledger/fabric-peer:1.0.5 > fabric-peer-1.0.5.tar # 其他镜像执行类似命令,比如orderer: docker save hyperledger/fabric-orderer:1.0.5 > fabric-orderer-1.0.5.tar - 把所有tar包打包成一个压缩包,传输到离线机器
2. 离线机器导入镜像
- 逐个导入镜像文件:
docker load < fabric-peer-1.0.5.tar docker load < fabric-orderer-1.0.5.tar # 其他镜像依次导入 - 按照官方脚本的逻辑,给镜像添加默认tag(如果需要):
docker tag hyperledger/fabric-peer:1.0.5 hyperledger/fabric-peer docker tag hyperledger/fabric-orderer:1.0.5 hyperledger/fabric-orderer # 其他镜像同理
四、离线部署的关键注意事项
- 确保离线RHEL 7.0机器上的Docker版本符合要求:建议使用Docker 1.12.x或更高版本(避免兼容性问题)
- 传输文件时,注意保持文件权限,比如二进制文件需要设置可执行权限:
chmod +x /usr/local/bin/peer - 如果是源码构建,离线机器的Go版本必须和联网机器完全一致,否则会出现依赖编译失败的问题
内容的提问来源于stack exchange,提问作者Pandit




