Hyperledger Fabric 通道配置文件和容器环境变量详解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
访问控制,不限时长
简介: Fabric 节点的主配置路径为 FABRIC_CFG_PATH 环境变量所指向路径(默认为 /etc/hyperledger/fabric)。在不显式指定配置路径时,会尝试从主配置路径下查找相关的配置文件。

准备介绍
Fabric 节点的主配置路径为 FABRIC_CFG_PATH 环境变量所指向路径(默认为 /etc/hyperledger/fabric)。在不显式指定配置路径时,会尝试从主配置路径下查找相关的配置文件。

项 配置文件路径 说明
peer $FABRIC_CFG_PATH/core.yaml 指定 peer 节点运行时参数
orderer $FABRIC_CFG_PATH/orderer.yaml 指定 orderer 节点运行时参数
fabric-ca $FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml 指定 CA 节点运行时参数
configtxgen $FABRIC_CA_SERVER_HOME/configtx.yaml 指定 configtxgen 命令运行时参数
通常 fabric 服务有两种启动方式,一种是直接通过二进制命令直接在主机根据配置文件启动节点,另一种是使用 docker 根据环境变量和默认配置文件启动节点,其中除了 configtxgen 必须使用配置文件外,其余各服务都可以通过 docker 启动。因此本文将重点介绍 configtxgen 的配置文件及其它服务的 docker 环境变量。

configtx.yaml 详解
transaction 的英文缩写是 TX (表示交易), configtx 表示交易配置,所以和交易相关的配置,如应用通道、锚节点、 Orderer 服务等,都是在 configtx.yaml 文件中配置的。 configtx.yaml 文件由 6 个部分组成,其中前 5 个部分的配置都是为了在 Profiles 被引用,在 Profiles 中引用其它部分的同时可以覆盖特定配置,本节示例文件来自于 configtx.yaml。[^1] [^4]

Organizations
Organizations 用来定义不同的组织,其中 MSP (Membership Service Provider) 是一个组织的身份标识,在 fabric 中组织是由 MSPID 来唯一标识。

Organizations:

- &councilMSP           # 定义一个组织引用,类似于变量,可在Profile部分被引用;所有带 & 符号的都是引用变量,使用 * 来引用
    Name: councilMSP    # 组织名称
    ID: councilMSP      # 组织ID
    MSPDir: ../orgs/council.ifantasy.net/msp    # 组织MSP文件夹的路径
    Policies:           # 组织策略
        Readers:
            Type: Signature
            Rule: "OR('councilMSP.member')"
        Writers:
            Type: Signature
            Rule: "OR('councilMSP.member')"
        Admins:
            Type: Signature
            Rule: "OR('councilMSP.admin')"
    # 此文件内的Orderer端口皆为容器内端口
    OrdererEndpoints:   # 定义排序节点(可多个),客户端和对等点可以分别连接到这些orderer以推送transactions和接收区块。
        - "orderer1.council.ifantasy.net:7051"
        - "orderer2.council.ifantasy.net:7054"
        - "orderer3.council.ifantasy.net:7057"
    AnchorPeers:    # 定义锚节点,锚节点对外代表本组织通信
        - Host: peer1.soft.ifantasy.net
          Port: 7251

Capabilities
Capabilities 定义了 fabric 程序要加入网络所必须支持的特性,通过定义通道的能力,就明确了不满足该能力要求的 fabric 程序,将无法处理交易,除非升级到对应的版本。

Capabilities:

# Channel配置同时针对通道上的Orderer节点和Peer节点(设置为ture表明要求节点具备该能力);
Channel: &ChannelCapabilities
    V2_0: true  # 要求Channel上的所有Orderer节点和Peer节点达到v2.0.0或更高版本
 # Orderer配置仅针对Orderer节点,不限制Peer节点
Orderer: &OrdererCapabilities
    V2_0: true  # 要求所有Orderer节点升级到v2.0.0或更高版本
# Application配置仅应用于对等网络,不需考虑排序节点的升级
Application: &ApplicationCapabilities
    V2_0: true

Application
Application 定义了应用内的访问控制策略和参与组织。

Application: &ApplicationDefaults

# 干预 创建链码的系统链码 的函数访问控制策略
_lifecycle/CheckCommitReadiness: /Channel/Application/Writers       # CheckCommitReadiness 函数的访问策略
_lifecycle/CommitChaincodeDefinition: /Channel/Application/Writers  # CommitChaincodeDefinition 函数的访问策略
_lifecycle/QueryChaincodeDefinition: /Channel/Application/Writers   # QueryChaincodeDefinition 函数的访问策略
_lifecycle/QueryChaincodeDefinitions: /Channel/Application/Writers  # QueryChaincodeDefinitions 函数的访问策略

# 关于 生命周期系统链码(lscc) 的函数访问控制策略
lscc/ChaincodeExists: /Channel/Application/Readers              # getid 函数的访问策略
lscc/GetDeploymentSpec: /Channel/Application/Readers            # getdepspec 函数的访问策略
lscc/GetChaincodeData: /Channel/Application/Readers             # getccdata 函数的访问策略
lscc/GetInstantiatedChaincodes: /Channel/Application/Readers    # getchaincodes 函数的访问策略

# 关于 查询系统链码(qscc) 的函数访问控制策略
qscc/GetChainInfo: /Channel/Application/Readers         # GetChainInfo 函数的访问策略
qscc/GetBlockByNumber: /Channel/Application/Readers     # GetBlockByNumber 函数的访问策略
qscc/GetBlockByHash: /Channel/Application/Readers       # GetBlockByHash 函数的访问策略
qscc/GetTransactionByID: /Channel/Application/Readers   # GetTransactionByID 函数的访问策略
qscc/GetBlockByTxID: /Channel/Application/Readers       # GetBlockByTxID 函数的访问策略

# 关于 配置系统链码(cscc) 的函数访问控制策略
cscc/GetConfigBlock: /Channel/Application/Readers   # GetConfigBlock 函数的访问策略
cscc/GetChannelConfig: /Channel/Application/Readers # GetChannelConfig 函数的访问策略

# 关于 peer 节点的函数访问控制策略
peer/Propose: /Channel/Application/Writers                  # Propose 函数的访问策略
peer/ChaincodeToChaincode: /Channel/Application/Writers     # ChaincodeToChaincode 函数的访问策略

# 关于事件资源的访问策略
event/Block: /Channel/Application/Readers           # 发送区块事件的策略
event/FilteredBlock: /Channel/Application/Readers   # 发送筛选区块事件的策略

# 默认为空,在 Profiles 中定义
Organizations:
# 定义本层级的应用控制策略,路径为 /Channel/Application/<policyname>
Policies:
    Readers:    # /Channel/Application/Readers
        Type: ImplicitMeta
        Rule: "ANY Readers"
    Writers:
        Type: ImplicitMeta
        Rule: "ANY Writers"
    Admins:
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"
    LifecycleEndorsement:
        Type: ImplicitMeta
        Rule: "MAJORITY Endorsement"
    Endorsement:
        Type: ImplicitMeta
        Rule: "MAJORITY Endorsement"

Capabilities:
    &lt;&lt;: *ApplicationCapabilities    # 引用上节 Capabilities 的 ApplicationCapabilities

Orderer
Orderer 定义了排序服务的相关参数,这些参数将用于创建创世区块或交易。

Orderer: &OrdererDefaults
OrdererType: etcdraft # 排序服务算法,目前可用:solo,kafka,etcdraft
Addresses: # 排序节点地址

    - orderer1.soft.ifantasy.net:7051
    - orderer2.web.ifantasy.net:7052
    - orderer3.hard.ifantasy.net:7053
# 定义了 etcdRaft 排序类型被选择时的配置
EtcdRaft:
    Consenters:         # 定义投票节点
    - Host: orderer1.council.ifantasy.net
      Port: 7051
      ClientTLSCert: ../orgs/council.ifantasy.net/registers/orderer1/tls-msp/signcerts/cert.pem # 节点的TLS签名证书
      ServerTLSCert: ../orgs/council.ifantasy.net/registers/orderer1/tls-msp/signcerts/cert.pem
    - Host: orderer2.council.ifantasy.net
      Port: 7054
      ClientTLSCert: ../orgs/council.ifantasy.net/registers/orderer2/tls-msp/signcerts/cert.pem
      ServerTLSCert: ../orgs/council.ifantasy.net/registers/orderer2/tls-msp/signcerts/cert.pem
    - Host: orderer3.council.ifantasy.net
      Port: 7057
      ClientTLSCert: ../orgs/council.ifantasy.net/registers/orderer3/tls-msp/signcerts/cert.pem
      ServerTLSCert: ../orgs/council.ifantasy.net/registers/orderer3/tls-msp/signcerts/cert.pem

# 区块打包的最大超时时间 (到了该时间就打包区块)
BatchTimeout: 2s
# 区块链的单个区块配置(orderer端切分区块的参数)
BatchSize:
    MaxMessageCount: 10         # 一个区块里最大的交易数
    AbsoluteMaxBytes: 99 MB     # 一个区块的最大字节数,任何时候都不能超过
    PreferredMaxBytes: 512 KB   # 一个区块的建议字节数,如果一个交易消息的大小超过了这个值, 就会被放入另外一个更大的区块中

# 参与维护Orderer的组织,默认为空(通常在 Profiles 中再配置)
Organizations:
# 定义本层级的排序节点策略,其权威路径为 /Channel/Orderer/<policyname>
Policies:
    Readers:    # /Channel/Orderer/Readers
        Type: ImplicitMeta
        Rule: "ANY Readers"
    Writers:
        Type: ImplicitMeta
        Rule: "ANY Writers"
    Admins:
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"
    BlockValidation:    # 指定了哪些签名必须包含在区块中,以便peer节点进行验证
        Type: ImplicitMeta
        Rule: "ANY Writers"
Capabilities:
    &lt;&lt;: *OrdererCapabilities    # 引用上节 Capabilities 的 OrdererCapabilities 

Channel
Channel 定义要写入创世区块或配置交易的通道参数。

Channel: &ChannelDefaults

#   定义本层级的通道访问策略,其权威路径为 /Channel/<policyname>
Policies:
    Readers:    # 定义谁可以调用 'Deliver' 接口
        Type: ImplicitMeta
        Rule: "ANY Readers"
    Writers:    # 定义谁可以调用 'Broadcast' 接口
        Type: ImplicitMeta
        Rule: "ANY Writers"
    # By default, who may modify elements at this config level
    Admins:     # 定义谁可以修改本层策略
        Type: ImplicitMeta
        Rule: "MAJORITY Admins"

Capabilities:
    &lt;&lt;: *ChannelCapabilities        # 引用上节 Capabilities 的 ChannelCapabilities 

Profiles
Profiles 配置用于 configtxgen 工具的配置入口,主要是引用其余五个部分的参数,其定义了一系列的配置模板,每个模板代表了特定应用场景下的自定义的通道配置,可以用来创建系统通道或应用通道。配置模板中可以包括 Application 、 Capabilities 、 Consortium 、 Consortiums 、 Policies 、 Orderer 等配置字段,根据使用目的不同,一般只包括部分字段。除了通道默认的配置,创建系统通道初始区块的模板一般需要包括 Orderer 、 Consortiums 字段信息(也可以包括 Applicaion 字段定义初始应用通道配置):

Profiles:

# OrgsChannel用来生成channel配置信息,名字可以任意
# 需要包含Consortium和Applicatioon两部分。
OrgsChannel:
    Consortium: SampleConsortium    # 通道所关联的联盟名称
    &lt;&lt;: *ChannelDefaults
    Orderer:
        &lt;&lt;: *OrdererDefaults
        Organizations:
            - *councilMSP
        Capabilities: *OrdererCapabilities
    Application:
        &lt;&lt;: *ApplicationDefaults
        Organizations:
            - *softMSP
            - *webMSP
            - *hardMSP
        Capabilities:
            &lt;&lt;: *ApplicationCapabilities

peer 配置详解
当 Peer 节点启动时,会按照优先级从高到低的顺序依次尝试从命令行参数、环境变量和配置文件中读取配置信息,当从环境变量中读入配置信息时,除了日志使用单独的 FABRIC_LOGGINGSPEC 环境变量进行指定,其他都需要以 CORE 前缀开头,例如配置文件中的 peer.id 项,对应环境变量 CORE_PEER_ID 。

Peer 节点默认的配置文件读取路径为 $FABRIC_CFG_PATH/core.yaml ,如果没找到则尝试查找当前目录下的 ./core.yaml 文件,如果还没有找到则尝试查找默认的 /etc/hyperledger/fabric/core.yaml 文件。在结构上, core.yaml 文件中可以分为 peer 、 vm 、 chaincode 、 ledger 、 operations 、 metrics 六大部分, core.yaml 文件太过冗长在此不详细介绍,本节只介绍 Docker 环境下的常用环境变量(以后用到再更新),一个常用 示例配置 如下 [^2]:

peer-base:
image: hyperledger/fabric-peer:${FABRIC_BASE_VERSION}
environment:

  - FABRIC_LOGGING_SPEC=info
  - CORE_PEER_ID=peer1.soft.ifantasy.net
  - CORE_PEER_LISTENADDRESS=0.0.0.0:7251
  - CORE_PEER_ADDRESS=peer1.soft.ifantasy.net:7251
  - CORE_PEER_LOCALMSPID=softMSP
  - CORE_PEER_MSPCONFIGPATH=${DOCKER_CA_PATH}/peer/msp
  - CORE_PEER_TLS_ENABLED=true
  - CORE_PEER_TLS_CERT_FILE=${DOCKER_CA_PATH}/peer/tls-msp/signcerts/cert.pem
  - CORE_PEER_TLS_KEY_FILE=${DOCKER_CA_PATH}/peer/tls-msp/keystore/key.pem
  - CORE_PEER_TLS_ROOTCERT_FILE=${DOCKER_CA_PATH}/peer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem
  - CORE_PEER_GOSSIP_USELEADERELECTION=true
  - CORE_PEER_GOSSIP_ORGLEADER=false
  - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.soft.ifantasy.net:7251
  - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
  - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_${DOCKER_NETWORKS}

working_dir: ${DOCKER_CA_PATH}/peer
volumes:
  - /var/run:/host/var/run
networks:
  - ${DOCKER_NETWORKS}

通常我们喜欢使用 extends 方式分割通用容器,需要注意的是父容器的环境变量无法被子容器环境变量覆盖。
其中各项含义如下:

FABRIC_LOGGING_SPEC :指定日志级别
CORE_PEER_ID : Peer 在网络中的 ID 信息,用于辨识不同的节点
CORE_PEER_LISTENADDRESS :服务监听的本地地址,本地有多个网络接口时可指定仅监听某个接口
CORE_PEER_ADDRESS :对同组织内其他节点的监听连接地址。当服务在 NAT 设备上运行时,该配置可以指定服务对外宣称的可访问地址。如果是客户端,则作为其连接的 Peer 服务地址
CORE_PEER_LOCALMSPID :Peer 所关联的 MSPID ,一般为所属组织名称,需要与通道配置内名称一致
CORE_PEER_MSPCONFIGPATH :MSP 目录所在的路径,可以为绝对路径,或相对配置目录的路径
CORE_PEER_TLS_ENABLED :是否开启 server 端 TLS 检查
CORE_PEER_TLS_CERT_FILE :server 端使用的 TLS 证书路径
CORE_PEER_TLS_KEY_FILE :server 端使用的 TLS 私钥路径
CORE_PEER_TLS_ROOTCERT_FILE :server 端使用的根 CA 的证书,签发服务端的 TLS 证书
CORE_PEER_GOSSIP_USELEADERELECTION :是否允许节点之间动态进行组织的代表(leader)节点选举,通常情况下推荐开启
CORE_PEER_GOSSIP_ORGLEADER :本节点是否指定为组织的代表节点,与 useLeaderElection 不能同时指定为 true
CORE_PEER_GOSSIP_EXTERNALENDPOINT :节点向组织外节点公开的服务地址,默认为空,代表不被其他组织所感知
CORE_VM_ENDPOINT :docker daemon 的地址
CORE_VM_DOCKER_HOSTCONFIGNETWORKMODE :运行链码容器的网络
orderer 配置详解
排序节点在 Fabric 网络中为 Peer 提供排序服务。与 Peer 节点类似,排序节点支持从命令行参数、环境变量或配置文件中读取配置信息。环境变量中配置需要以 ORDERER
前缀开头,例如,配置文件中的 general.ListenAddress 项,对应到环境变量 ORDERER_GENERAL_LISTENADDRESS 。节点默认的配置文件读取路径为 $FABRIC_CFG_PATH/orderer.yaml ,如果没找到则尝试查找当前目录下的 ./orderer.yaml 文件,如果还没有找到则尝试查找默认的 /etc/hyperledger/fabric/orderer.yaml 文件。在结构上, orderer.yaml 文件中一般包括 General 、 FileLedger 、 RAMLedger 、 Kafka 、 Debug 、 Operations 、 Metrics 和 Consensus 八大部分, orderer.yaml 文件太过冗长再此不详细介绍,本节只介绍 Docker 环境下的常用环境变量(以后用到再更新),一个常用 示例配置 如下 [^3]:

orderer-base:
image: hyperledger/fabric-orderer:${FABRIC_BASE_VERSION}
environment:

  - ORDERER_HOME=${DOCKER_CA_PATH}/orderer
  - ORDERER_HOST=orderer1.council.ifantasy.net
  - ORDERER_GENERAL_LOCALMSPID=councilMSP
  - ORDERER_GENERAL_LISTENPORT=7051
  - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
  - ORDERER_GENERAL_BOOTSTRAPMETHOD=none
  - ORDERER_CHANNELPARTICIPATION_ENABLED=true
  # - ORDERER_GENERAL_GENESISMETHOD=file
  # - ORDERER_GENERAL_GENESISFILE=${DOCKER_CA_PATH}/orderer/genesis.block
  - ORDERER_GENERAL_LOCALMSPDIR=${DOCKER_CA_PATH}/orderer/msp
  - ORDERER_GENERAL_LOGLEVEL=debug
  - ORDERER_GENERAL_TLS_ENABLED=true
  - ORDERER_GENERAL_TLS_CERTIFICATE=${DOCKER_CA_PATH}/orderer/tls-msp/signcerts/cert.pem
  - ORDERER_GENERAL_TLS_PRIVATEKEY=${DOCKER_CA_PATH}/orderer/tls-msp/keystore/key.pem
  - ORDERER_GENERAL_TLS_ROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]
  - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=${DOCKER_CA_PATH}/orderer/tls-msp/signcerts/cert.pem
  - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=${DOCKER_CA_PATH}/orderer/tls-msp/keystore/key.pem
  - ORDERER_GENERAL_CLUSTER_ROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]
  - ORDERER_ADMIN_TLS_ENABLED=true
  - ORDERER_ADMIN_TLS_CERTIFICATE=${DOCKER_CA_PATH}/orderer/tls-msp/signcerts/cert.pem
  - ORDERER_ADMIN_TLS_PRIVATEKEY=${DOCKER_CA_PATH}/orderer/tls-msp/keystore/key.pem
  - ORDERER_ADMIN_TLS_ROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]
  - ORDERER_ADMIN_TLS_CLIENTROOTCAS=[${DOCKER_CA_PATH}/orderer/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem]
  - ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:8888
  - ORDERER_METRICS_PROVIDER=prometheus
  - ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:9999
  - ORDERER_DEBUG_BROADCASTTRACEDIR=data/logs
networks:
  - ${DOCKER_NETWORKS}

其中各项含义如下:

ORDERER_HOME :orderer 运行的根目录
ORDERER_HOST :orderer 运行的主机
ORDERER_GENERAL_LOCALMSPID : orderer 所关联的 MSPID ,一般为所属组织名称,需要与通道配置内名称一致
ORDERER_GENERAL_LISTENPORT :服务绑定的监听端口
ORDERER_GENERAL_LISTENADDRESS :服务绑定的监听地址,一般需要指定为所服务的特定网络接口的地址或全网(0.0.0.0)
ORDERER_GENERAL_BOOTSTRAPMETHOD :获取引导块的方法,2.x 版本中仅支持 file 或 none
ORDERER_CHANNELPARTICIPATION_ENABLED :是否提供参与通道的 API
ORDERER_GENERAL_GENESISMETHOD :当 ORDERER_GENERAL_BOOTSTRAPMETHOD 为 file 时启用,指定创世区块类型
ORDERER_GENERAL_GENESISFILE :指定创世区块位置
ORDERER_GENERAL_LOCALMSPDIR :本地 MSP 文件路径
ORDERER_GENERAL_LOGLEVEL :日志级别
ORDERER_GENERAL_TLS_ENABLED :启用 TLS 时的相关配置
ORDERER_GENERAL_TLS_CERTIFICATE :Orderer 身份证书
ORDERER_GENERAL_TLS_PRIVATEKEY :Orderer 签名私钥
ORDERER_GENERAL_TLS_ROOTCAS :信任的根证书
ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE :双向 TLS 认证时,作为客户端证书的文件路径,如果没设置会使用 TLS.Certificate
ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY :双向 TLS 认证时,作为客户端私钥的文件路径,如果没设置会使用 TLS.PrivateKey
ORDERER_GENERAL_CLUSTER_ROOTCAS :信任的根证书
ORDERER_ADMIN_TLS_ENABLED :是否启用 orderer 的管理服务面板
ORDERER_ADMIN_TLS_CERTIFICATE :管理服务的证书
ORDERER_ADMIN_TLS_PRIVATEKEY :管理服务的私钥
ORDERER_ADMIN_TLS_ROOTCAS :管理服务的可信根证书
ORDERER_ADMIN_TLS_CLIENTROOTCAS :管理服务客户端的可信根证书
ORDERER_ADMIN_LISTENADDRESS :管理服务监听地址
ORDERER_METRICS_PROVIDER :统计服务类型,可以为 statsd (推送模式),prometheus (拉取模式),disabled
ORDERER_OPERATIONS_LISTENADDRESS :RESTful 管理服务的监听地址
ORDERER_DEBUG_BROADCASTTRACEDIR :广播请求的追踪路径
fabric-ca 配置详解
在 fabric 官方示例中,通常使用 cryptogen 生成静态证书文件,但这种方式不适合用于生产环境,而 fabric-ca 可以在生产环境中为所有成员提供安全的证书服务。与其它类型节点类似, fabric-ca 支持从命令行参数、环境变量或配置文件中读取配置信息,且 fabric-ca 分为 fabric-ca-server 和 fabric-ca-client ,前者用于提供 CA 服务,后者用于向用户提供操作 fabric-ca-server 的方法。一个常用 示例配置 如下:

ca-base:
image: hyperledger/fabric-ca:${FABRIC_CA_VERSION}
environment:

  - FABRIC_CA_SERVER_HOME=${DOCKER_CA_PATH}/ca/crypto
  - FABRIC_CA_SERVER_TLS_ENABLED=true
  - FABRIC_CA_SERVER_DEBUG=true
  - FABRIC_CA_SERVER_CSR_CN=council.ifantasy.net
  - FABRIC_CA_SERVER_CSR_HOSTS=council.ifantasy.net
networks:
  - ${DOCKER_NETWORKS}

其中各项内容含义如下:

FABRIC_CA_SERVER_HOME :指定 fabric-ca-server 运行的根目录
FABRIC_CA_SERVER_TLS_ENABLED :是否启用 TLS
FABRIC_CA_SERVER_DEBUG :是否启用 debug 模式
FABRIC_CA_SERVER_CSR_CN :指定证书主体的 cn 字段
FABRIC_CA_SERVER_CSR_HOSTS :指定证书主体的 hosts 字段
文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树Java中的变量与常量变量的定义127170 人正在系统学习中

像素旅人

0

0

0

专栏目录
Hyperledger Fabric环境配置,2023年1月28日整理亲测有效
01-28
尽管CSDN上存在很多Hyperledger Fabric环境配置教程,但是都存在各种问题,本文选择了一篇文章进行环境配置,同时对环境配置过程中产生的各种问题提出了解决方案,并亲测有效,希望这份文件能对你们有所帮助。...
Hyperledger Fabric kafka配置
03-09
Hyperledger Fabric默认使用solo共识,实际上它早就已经支持kafka共识,只是配置相对复杂点儿。该资源就是使用kafka共识的多orderer集群环境下的网络所需要使用的配置文件。你也可以参考下文帮您理解:...
学习Hyperledger Fabric 实战联盟链全套视频
09-09
学习Hyperledger Fabric 实战联盟链全套视频,附资料。
Hyperledger Fabric linux二进制文件
03-29
hyperledger-fabric-linux-amd64-1.1.0 最新版, RAR解压后传入LINUX中即可
Hyperledger fabric集群搭建l配置文件.rar
08-15
Hyperledger fabric集群搭建docker-compose-peer.yaml、docker-compose-orderer.yaml配置文件
Hbase-技术文档-java.net.UnknownHostException: 不知道这样的主机。 (e64682f1b276)
weixin_72186894的博客
817
在使用spring-boot操作habse的时候,在对habse进行操作的时候出现这个问题。。
疫情下社区管理系统的设计与实现(论文+源码)_kaic
涉及毕业论文、远程调试、小程序、管理系统、JAVA、C#、IDEA、VS开发工具等
212
根据对周围社区的调查结果进行合理的分类后,根据用户的需求,对系统的功能进行分析,应包括三种管理模块(用户、角色、权限),同时包含其他的子模块如:社区居民管理,住宅管理模块,二维码签到模块,以及聊天室。新冠疫情下的社区人员管理系统是一个很小型的系统,使用IntelliJ IDEA编写起来还是很简单迅速,该系统的 SQLServer也是一个简单小巧免费的数据库软件,因此对于整个系统的开发和储存都没有额外的支出,同时系统的权限管理模块对于整个系统的后期维护也更加简单。但是社区管理人员之间的交流有着巨大的缺陷。
【用一个故事介绍Java的封装继承多态】
廖志伟
254
小明将钥匙和开锁器封装在一起,只让小红使用开锁器的接口,让小红无法直接查看和修改钥匙的值,从而保证了密码的安全性。小明通过继承和多态的方式,成功地为小红实现了自己打开鱼缸的功能,而且保持了密码的安全性。小明想了想,他决定为小红继续开发新的功能:他设计了一个基于开锁器的新类,名为“猫的口袋”。小红很高兴地使用了小明提供的开锁器,成功打开了鱼缸,享受了美味的鱼肉。于是,小红向小明提出了新的需要:“小明,我们是好朋友,我希望以后能够自己打开鱼缸,不用每次都来麻烦你。于是,小红找到了自己的好朋友小明。
TCP--半连接队列和全连接队列
勿忘初心
396
全连接队列、半连接队列溢出这种问题很容易被忽视,但是又很关键,特别是对于一些短连接应用(比如Nginx、PHP,当然他们也是支持长连接的)更容易爆发。一旦溢出,从cpu、线程状态看起来都比较正常,但是压力上不去,在client看来rt也比较高(rt=网络+排队+真正服务时间),但是从server日志记录的真正服务时间来看rt又很短。jdk、netty等一些框架默认backlog比较小,可能有些情况下导致性能上不去,比如这个 《netty新建连接并发数很小的case》都是类似原因。
MybatisPlus 项目中使用
sytdsqzr的博客
192
大家好 , 我是苏麟 , 今天带来 MybatisPlus 的简单使用 . Dao接口要想被容器扫描到,有两种解决方案:方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中 该方案的缺点是需要在每一Dao接口中添加注解方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不 写。 分页的使用 这期就到这
Java系列之:执行Java命令报错没有主清单属性和缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
zhengzaifeidelushang的博客
95
Java系列之:执行Java命令报错没有主清单属性和缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
【已解决】在 SpringBoot 中使用 CloseableHttpClient 调用接口时,接收参数中的中文变为“?“
ZOOM_Jie 一切源于最初的那份热爱!!!
257
【已解决】在 SpringBoot 中使用 CloseableHttpClient 调用接口时,接收参数中的中文变为"?"
登录校验-JWT令牌-生成和校验
weixin_64939936的博客
127
【代码】登录校验-JWT令牌-生成和校验。
【一文读懂】 Java并发 - 锁升级原理
Fearless__的博客
114
Java对象头,锁升级的原因,重量级锁、轻量级锁、偏向锁的原理......
Java轻松开发自定义注解
qq_58679358的博客
137
interface就是用来定义注解的,类似于class定义类 和 interface 定义接口定义一个value()的方法,返回值类型时String没有赋值默认返回”"这个字符串@Aspect@Component@Slf4jstatic {// 判断注解中的属性是否为空System.out.println("autoCheck:"+"注解属性为空");}else {
linux下系统问题排查基本套路
初心不改
323
top 查找cpu占用高的进程ps 找到对应进程的pidtop -H -p pid 查找cpu利用率较高的线程printf ‘%x\n’ pid 将线程pid转换为16进制得到 nidjstack pid |grep ‘nid’ -C5 –color 在jstack中找到对应堆栈信息进行分析。
Dubbo之URL源码解析
最新发布
csy_insist的博客
167
URL是dubbo的公共契约,可叫做“配置总线”,“统一配置模型”,用于各个扩展点的数据传递。URL进行数据模型统一,方便理解,且易读易写。
java开发之fastjson
qq_44275015的博客
256
这里使用的是alibaba的fastjson。
Android 设置app深色、浅色、跟随系统
qq_21467035的博客
415
我们需要再用户设置时候,记录下来,用户的设置,等app再次启动时候,获取之前设置,重新设置。2、获取当前Activity是否开启深色。4、深色浅色切换时候,重启app。1、设置单个Activity。3、webView设置。
hyperledger fabric环境搭建
06-06
Hyperledger Fabric 是一个开源的区块链平台,用于建立和部署分布式账本网络。要搭建 Hyperledger Fabric 环境,需要安装以下软件: 1. Docker:用于运行 Hyperledger Fabric 网络中的容器。 2. Docker Compose:用于管理容器。 3. Go:用于编译和运行 Hyperledger Fabric 源代码。 4. Node.js:用于运行
————————————————
版权声明:本文为CSDN博主「像素旅人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_74792729/article/details/132562029

相关文章
|
开发框架 .NET 区块链
Hyperledger fabric部署链码(五)初始化与链码升级
fabric部署chaincode-go(智能合约)系列之五
186 0
|
3月前
|
Kubernetes 容器 Perl
在k8S中,如何向Pod中指定容器传递环境变量?有哪些方式?
在k8S中,如何向Pod中指定容器传递环境变量?有哪些方式?
|
6月前
|
Java 容器 Spring
Spring的加载配置文件、容器和获取bean的方式
Spring的加载配置文件、容器和获取bean的方式
51 3
Spring的加载配置文件、容器和获取bean的方式
|
6月前
|
Java 数据库连接 Docker
【Docker 专栏】Docker 容器内环境变量的管理与使用
【5月更文挑战第9天】本文介绍了Docker容器中环境变量的管理与使用,环境变量用于传递配置信息和设置应用运行环境。设置方法包括在Dockerfile中使用`ENV`指令或在启动容器时通过`-e`参数设定。应用可直接访问环境变量或在脚本中使用。环境变量作用包括传递配置、设置运行环境和动态调整应用行为。使用时注意变量名称和值的合法性、保密性和覆盖问题。理解并熟练运用环境变量能提升Docker技术的使用效率和软件部署质量。
441 0
【Docker 专栏】Docker 容器内环境变量的管理与使用
|
6月前
|
关系型数据库 MySQL 开发工具
docker如何修改容器的配置文件
docker如何修改容器的配置文件
85 0
|
6月前
|
消息中间件 Linux 开发工具
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
|
6月前
|
安全 Java 容器
Netty通道的容器属性Attribute
Netty中的Channel通道类,有类似于Map的容器功能,可以通过“key-value”键值对的形式来保存任何Java Object的值。一般来说可以存放一些与通道实例相关联的属性,比如说服务期端的ServerSession会话实例。
|
存储 JSON 安全
Hyperledger fabric智能合约编写(一)
本篇文章主要对链码编写的主要思路和部分API进行梳理。
163 1
|
区块链
Hyperledger fabric部署链码(二)安装链码到fabric
fabric部署chaincode-go(智能合约)系列之二
130 1
|
Go API 区块链
Hyperledger Fabric相关概念介绍
在学习Hyperledger Fabric的过程中,初步对相关概念的了解。
244 0
Hyperledger Fabric相关概念介绍