(Fabric学习九)部署Fabric CA以及出现问题的相关记录

本实验将继续采用从我之前的FabricCA单机多节点(Fabric 学习七)Fabric2.4.x 区块链多机部署(重新整一遍)_FD—moremore的博客-优快云博客为目标构建,在学习七中我使用三个orderer节点,两个组织以及组织下各有两个peer节点组成网络。

所以在容器配置中我们会设定一个tlsCA和一个orderer的CA(我这里设置为组织0),以及两个普通组织(内有peer节点)的CA,共四个CA。

一、编写CA容器启动配置docker-compose-ca.yaml

注意:CA服务器数据库默认支持三种:sqlite、mysql和postgresql,这里我们设置成我主机上的mysql,当然,在启动前一定要先在自己的mysql中创建好数据库才行。

1.1 本地创建数据库 

 1.2 编写容器启动文件:



version: '2.0'

networks:
  fabric-ca:
    name: fabric-ca

services:

  ca-tls:
    container_name: ca-tls
    image: hyperledger/fabric-ca
    command: sh -c 'fabric-ca-server start -d -b tls-ca-admin:tls-ca-adminpw --port 7053'
    environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=ca-tls
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
      - FABRIC_CA_SERVER_DB_TYPE=mysql
      - FABRIC_CA_SERVER_DB_DATASOURCE=root:123456@tcp(10.65.119.182:3306)/fabric_ca_tls?parseTime=true
    volumes:
      - /tmp/hyperledger/tls-ca:/tmp/hyperledger/fabric-ca
    networks:
      - fabric-ca
    ports:
      - 7053:7053

  rca-org0:
    container_name: rca-org0
    image: hyperledger/fabric-ca
    command: sh -c 'fabric-ca-server start -d -b rca-org0-admin:rca-org0-adminpw --port 7054'
    environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=rca-org0
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
      - FABRIC_CA_SERVER_DB_TYPE=mysql
      - FABRIC_CA_SERVER_DB_DATASOURCE=root:123456@tcp(10.65.119.182:3306)/fabric_rca_org0?parseTime=true
    volumes:
      - /tmp/hyperledger/org0/ca:/tmp/hyperledger/fabric-ca
    networks:
      - fabric-ca
    ports:
      - 7054:7054

  rca-org1:
    container_name: rca-org1
    image: hyperledger/fabric-ca
    command: sh -c 'fabric-ca-server start -d -b rca-org1-admin:rca-org1-adminpw'
    environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=rca-org1
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
      - FABRIC_CA_SERVER_DB_TYPE=mysql
      - FABRIC_CA_SERVER_DB_DATASOURCE=root:123456@tcp(10.65.119.182:3306)/fabric_rca_org1?parseTime=true
    volumes:
      - /tmp/hyperledger/org1/ca:/tmp/hyperledger/fabric-ca
    networks:
      - fabric-ca
    ports:
      - 7055:7055

  rca-org2:
    container_name: rca-org2
    image: hyperledger/fabric-ca
    command: sh -c 'fabric-ca-server start -d -b rca-org2-admin:rca-org2-adminpw --port 7056'
    environment:
      - FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_CSR_CN=rca-org2
      - FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0
      - FABRIC_CA_SERVER_DEBUG=true
      - FABRIC_CA_SERVER_DB_TYPE=mysql
      - FABRIC_CA_SERVER_DB_DATASOURCE=root:123456@tcp(10.65.119.182:3306)/fabric_rca_org2?parseTime=true
    volumes:
      - /tmp/hyperledger/org2/ca:/tmp/hyperledger/fabric-ca
    networks:
      - fabric-ca
    ports:
      - 7056:7056

1.3 打开容器

docker-compose -f docker-compose-ca.yaml up -d

或者关闭容器可以使用:

docker-compose -f docker-compose-ca.yaml down

1.4 会出现的问题

经过上述步骤可能会发现容器启动是成功了,但是转眼这些容器都挂掉了。

 为什么会出现这种情况呢?

为解决这个问题,我打开了Docker Portainer,去看看这些容器失败的日志:

第一个问题:连接MySQL出现Host is not allowed to connect to this MySQL server。

解决办法:这是由于本地的账号可以连接数据库,但是不允许远程来连接数据库,于是我们需要对mysql的权限进行修改。

1)mysql -u root -p      连接数据库

2)use mysql;

3)update user set host = '%' where user = 'root'; 

4)  FLUSH PRIVILEGES;

重新再打开容器,会发现:

确实已经连接上数据库,但是又爆了第二个错误。

 问题二:Error occurred initializing database: Failed to create MySQL tables: Error creating certificates table: Error 1067: Invalid default value for 'expiry'。

解决方法:解决了把mysql的严格模式关掉就好了!--sql-mode=""

 1)找到自己mysql的my.ini配置文件

2)进入配置my.ini:

在这里设置成:

sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

把STRICT_TRANS_TABLES去掉。

3)然后重启一下mysql服务:

之后重新打开容器:

 

 1.5 完成后查看

1、首先我们查看一下docker日志:

可以发现现在四个CA都完美的开起来了,同时点击日志:

 没有报错!那就完美!

2、然后我们可以查看一下数据库:

 上面可以看到指定的初始化管理员信息也存进去了。

3、查看一下工作目录结构

tree /tmp/hyperledger
/tmp/hyperledger
├── org0
├── org1
├── org2
└── tls-ca

可以进行接下来的操作了。

二、在CA上注册成员并颁发证书

2.1 准备工作

1、我们需要将fabric-ca-client这个bin中的二进制文件放到该目录下。

sudo cp /xxxxxxxx/bin/fabric-ca-client /tmp/hyperledger/

2.然后我们到/tmp/hyperledger目录下:

cd /tmp/hyperledger
tree ./

 可以发现目录结构为:

/tmp/hyperledger
├── fabric-ca-client
├── org0
├── org1
├── org2
└── tls-ca

2.2 注册 TLS CA 管理员,注册节点身份

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/tls-ca/crypto/tls-ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/tls-ca/admin

cp /tmp/hyperledger/tls-ca/crypto/ca-cert.pem /tmp/hyperledger/tls-ca/crypto/tls-ca-cert.pem

./fabric-ca-client enroll -d -u https://tls-ca-admin:tls-ca-adminpw@0.0.0.0:7053

结果如下:可以看到tls-ca管理员对应的证书

2.3 将节点注册到tlsCA上 

1、将org1的两个peer节点注册到tlsCA上:(必须先注册才可以进行enroll)

./fabric-ca-client register -d --id.name peer0.org1.example.com --id.secret peer1PW --id.type peer -u https://0.0.0.0:7053
./fabric-ca-client register -d --id.name peer1.org1.example.com --id.secret peer2PW --id.type peer -u https://0.0.0.0:7053

 结果如下:

 然后我们你可以打开fabric-ca-tls的数据库上查看:

 发现peer0.org1.example.com和peer1.org1.example.com已经注册成功了,他们的类型是peer。

2、注册机构2的两个peer节点:

./fabric-ca-client register -d --id.name peer0.org2.example.com --id.secret peer1PW --id.type peer -u https://0.0.0.0:7053
./fabric-ca-client register -d --id.name peer1.org2.example.com --id.secret peer2PW --id.type peer -u https://0.0.0.0:7053

3、注册机构0的三个orderer节点

./fabric-ca-client register -d --id.name orderer0.example.com --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7053

./fabric-ca-client register -d --id.name orderer1.example.com --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7053

./fabric-ca-client register -d --id.name orderer2.example.com --id.secret ordererPW --id.type orderer -u https://0.0.0.0:7053

结果如下:

 2.4 注册orderer节点和org0的管理员

1、register orderer1 节点 & org0 管理员

export FABRIC_CA_CLIENT_TLS_CERTFILES=/tmp/hyperledger/org0/ca/crypto/ca-cert.pem
export FABRIC_CA_CLIENT_HOME=/tmp/hyperledger/org0/ca/admin

./fabric-ca-client enroll -d -u https://rca-org0-admin:rca-org0-adminpw@0.0.0.0:7054

./fabric-ca-client register -d --id.name orderer0.example.com --id
您好!感谢您的提问。要部署Fabric CA,您可以按照以下步骤进行操作: 1. 安装Fabric CA服务器:首先,您需要在服务器上安装Fabric CA二进制文件。您可以从Hyperledger Fabric的官方网站下载适用于您的操作系统的二进制文件,并将其解压缩到所需的位置。 2. 配置Fabric CA服务器:接下来,您需要创建一个Fabric CA服务器的配置文件。该配置文件包含了一些参数,如服务器的监听地址、证书和密钥文件的路径等。您可以根据自己的需求进行配置。 3. 生成CA服务器的证书和密钥:在启动Fabric CA服务器之前,您需要生成CA服务器的证书和密钥。您可以使用Fabric CA提供的工具来生成这些文件。生成证书和密钥后,将它们放置在配置文件中指定的路径下。 4. 启动Fabric CA服务器:完成配置后,您可以使用命令行启动Fabric CA服务器。通过运行命令 `fabric-ca-server start -b <admin-username>:<admin-password>`,其中`<admin-username>`和`<admin-password>`是您希望用于管理CA服务器的管理员用户名和密码。 5. 注册和管理身份:一旦Fabric CA服务器启动成功,您就可以使用CA客户端工具来注册和管理身份。通过运行命令 `fabric-ca-client register --id.name <identity-name> --id.secret <identity-password> --id.type <identity-type> --id.affiliation <identity-affiliation>`,您可以注册一个新的身份,并获取相应的证书和密钥。 以上是部署Fabric CA的一般步骤。请注意,具体的部署过程可能因您的环境和需求而有所不同。建议您参考Hyperledger Fabric的文档和教程,以获取更详细的部署指南和最新的更新内容。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值