Hyperledger Fabric V2.5 生产环境部署及安装Java智能合约

Hyperledger Fabric V2.5 生产环境部署文档

1.部署区块链网络
1. 安装基础依赖(分别执行)
# 更新软件源
sudo apt-get update && sudo apt-get upgrade -y
# 安装必备工具
sudo apt-get install -y git curl wget jq unzip build-essential libtool autoconf pkg-config
2.安装Docker(分别执行)
# 安装 Docker 和 Docker Compose
curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh
sh get-docker.sh --mirror Aliyun
sudo usermod -aG docker $USER
sudo systemctl start docker && sudo systemctl enable docker

# 配置镜像源
sudo vi /etc/docker/daemon.json
{
   
   
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}
sudo systemctl daemon-reload
sudo systemctl restart docker

# 安装 Docker Compose(推荐 v2.37.1)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.37.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3. 网络组件规划
IP 节点 端口 容器
10.6.0.13 peer0.org1.example.com 7051,7052,7053 peer0.org1.example.com
10.6.0.13 ca_org1 7054 ca.org1.example.com
10.6.0.13 cli - -
10.6.0.3 peer0.org2.example.com 7051,7052,7053 peer0.org2.example.com
10.6.0.3 ca_org2 7054 ca.org2.example.com
10.6.0.3 cli - -
10.6.0.7 orderer.example.com 7050 orderer.example.com
10.6.0.7 ca_orderer 7054 ca.orderer.example.com
4.主机互通(分别执行)
echo "10.6.0.13 ca.org1.example.com peer0.org1.example.com" | sudo tee -a /etc/hosts
echo "10.6.0.3 ca.org2.example.com peer0.org2.example.com" | sudo tee -a /etc/hosts
echo "10.6.0.7 orderer.example.com ca.orderer.example.com" | sudo tee -a /etc/hosts
5.创建目录(分别执行)
# 创建目录
sudo mkdir -r /home/ubuntu/hyperledger/multinodes

# 改变目录所属用户组
sudo chown -R ubuntu:ubuntu /home/ubuntu/hyperledger/multinodes
6.下载二进制文件(orderer节点)
# hyperledger fabric
hyperledger-fabric-linux-amd64-2.5.5.tar.gz

在这里插入图片描述

# fabric ca
hyperledger-fabric-ca-linux-amd64-1.5.15.tar.gz

在这里插入图片描述

7.编写CA 配置文件
orderer ca
# 切换目录 
cd /home/ubuntu/hyperledger/multinodes

# orderer ca
cat > compose-ca.yaml << 'EOF'
services:
  ca_orderer:
    image: hyperledger/fabric-ca:1.5.7
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca-orderer
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_PORT=7054
      - FABRIC_CA_SERVER_CSR_CN=ca-orderer
      - FABRIC_CA_SERVER_CSR_HOSTS=ca.orderer.example.com
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    volumes:
      - ./fabric-ca/ordererOrg:/etc/hyperledger/fabric-ca-server
    container_name: ca_orderer
    extra_hosts:
      - "ca.orderer.example.com:10.6.0.7"
      - "ca.org1.example.com:10.6.0.13"
      - "ca.org2.example.com:10.6.0.3"
EOF

# 启动CA服务
docker-compose -f docker-ca.yaml up -d
org1 ca
# 切换目录 
cd /home/ubuntu/hyperledger/multinodes

# org1 ca
cat > compose-ca.yaml << 'EOF'
services:
  ca_org1:
    image: hyperledger/fabric-ca:1.5.7
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca-org1
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_PORT=7054
      - FABRIC_CA_SERVER_CSR_CN=ca-org1
      - FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    volumes:
      - ./fabric-ca/org1:/etc/hyperledger/fabric-ca-server
    container_name: ca_org1
    extra_hosts:
      - "ca.orderer.example.com:10.6.0.7"
      - "ca.org1.example.com:10.6.0.13"
      - "ca.org2.example.com:10.6.0.3"
EOF

# 启动CA服务
docker-compose -f docker-ca.yaml up -d
org2 ca
# 切换目录 
cd /home/ubuntu/hyperledger/multinodes

# org2 ca
cat > compose-ca.yaml << 'EOF'
services:
  ca_org2:
    image: hyperledger/fabric-ca:1.5.7
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca-org2
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_PORT=7054
      - FABRIC_CA_SERVER_CSR_CN=ca-org2
      - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
    volumes:
      - ./fabric-ca/org2:/etc/hyperledger/fabric-ca-server
    container_name: ca_org2
    extra_hosts:
      - "ca.orderer.example.com:10.6.0.7"
      - "ca.org1.example.com:10.6.0.13"
      - "ca.org2.example.com:10.6.0.3"
EOF

# 启动CA服务
docker-compose -f docker-ca.yaml up -d
将各节点ca证书拷贝到其它节点 ,最终如下:

在这里插入图片描述

8.编写生成组织证书脚本
# 切换目录
cd fabric-ca/

# 编写脚本
cat > registerEnroll.sh << 'EOF'
#!/bin/bash

function createOrg1 {

  echo
   echo "Enroll the CA admin"
  echo
   mkdir -p organizations/peerOrganizations/org1.example.com/

   export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations
<think>好的,用户想了解Hyperledger Fabric V2.5与Gin框架的集成和使用教程。首先,我需要确认用户的需求。他们可能正在开发一个基于区块链的应用,后端需要用到Gin框架来提供API,同时与Fabric网络交互。用户可能希望了解如何将两者结合起来,比如如何通过Gin的路由处理Fabric的链码调用,如何管理身份认证,以及如何处理交易等。 接下来,我需要回忆一下Hyperledger Fabric的基本结构,尤其是如何通过SDK与链码交互。Fabric的Go SDK是比较常用的,而Gin也是Go的框架,所以可能在同一个项目中整合两者会比较方便。需要确保用户了解如何设置Fabric的网络配置,比如连接配置文件、身份文件等。 然后,用户提到的引用中有关于应用后端和链码调用的内容,比如引用[1]提到目录结构和用户注册登录,引用[2]展示了一个异步函数调用链码的例子,引用[3]涉及链码容器的检查,引用[4]提到Java SDK的问题,引用[5]是版权声明。这些引用可能帮助用户理解Fabric的集成步骤,但需要具体到Gin框架的话,可能需要更具体的示例。 接下来,我应该考虑如何构建一个基本的Gin应用,处理HTTP请求,然后调用Fabric SDK执行链码操作。比如,用户注册、资产上链等。需要编写示例代码,展示如何初始化Gateway,连接到Fabric网络,以及如何在Gin的路由中调用这些方法。 可能需要注意的问题包括:SDK的版本兼容性,网络配置的正确性,身份文件的路径设置,以及错误处理。比如引用[4]中提到的网络配置和钱包问题,用户在集成时可能会遇到类似的错误,需要指导如何解决。 另外,用户可能需要了解如何设计RESTful API,以便前端或其他服务与区块链交互。比如POST请求创建资产,GET请求查询信息。需要确保示例代码中的路由和控制器部分清晰,并且正确处理请求参数,将其传递给链码。 最后,生成相关问题,帮助用户深入学习和解决可能遇到的问题,比如性能优化、身份管理、事务处理等。这些问题应该基于常见的开发挑战,帮助用户进一步探索。</think>### Hyperledger Fabric V2.5与Gin框架集成指南 #### 1. 环境与依赖准备 - **Hyperledger Fabric V2.5**:需配置网络、通道、链码等基础环境[^1] - **Golang环境**:Gin框架基于Go语言,需安装Go 1.16+版本 - **Fabric Go SDK**:用于与区块链网络交互 - **Gin框架**:`go get -u github.com/gin-gonic/gin` #### 2. 项目结构示例 ```text fabric-gin-demo/ ├── api/ │ └── handler.go # API处理逻辑 ├── chaincode/ │ └── realty.go # 链码实现 ├── config/ │ └── network.yaml # 网络连接配置 ├── gateway/ │ └── fabric.go # Fabric网关封装 ├── main.go # 主入口 └── go.mod ``` #### 3. 核心集成步骤 **3.1 封装Fabric网关** ```go // gateway/fabric.go package gateway import ( "github.com/hyperledger/fabric-sdk-go/pkg/gateway" ) func InitContract() (*gateway.Contract, error) { wallet, err := gateway.NewFileSystemWallet("wallet") if err != nil { return nil, err } ccPkg, err := gateway.NewCCPackage("chaincode", "") gw, err := gateway.Connect(gateway.Config{ Network: "network.yaml", Wallet: wallet, }) return gw.GetContract("mychannel", "realty-chaincode") } ``` **3.2 定义Gin路由** ```go // main.go package main import ( "fabric-gin-demo/gateway" "github.com/gin-gonic/gin" ) func main() { contract, _ := gateway.InitContract() r := gin.Default() r.POST("/assets", func(c *gin.Context) { result, _ := contract.SubmitTransaction("CreateAsset", c.PostForm("id"), c.PostForm("owner")) c.JSON(200, gin.H{"txid": string(result)}) }) r.Run(":8080") } ``` #### 4. 关键交互模式 - **交易提交**:使用`SubmitTransaction`方法写入区块链 - **查询操作**:使用`EvaluateTransaction`方法读取数据 - **身份管理**:通过Wallet实现用户身份切换[^4] #### 5. 典型错误处理 ```go // handler.go func QueryAsset(c *gin.Context) { result, err := contract.EvaluateTransaction("ReadAsset", c.Query("id")) if err != nil { c.JSON(500, gin.H{ "error": err.Error(), "solution": "检查链码容器状态:\n" + "docker ps -a | awk '($2 ~ /dev-peer.*fabric-realty.*/)'[^3]" }) return } c.JSON(200, parseAsset(result)) } ``` #### 6. 性能优化建议 - **连接池管理**:复用Gateway连接 - **异步处理**:参考`Future<void>`模式[^2] - **缓存机制**:对频繁查询结果做本地缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值