文档章节

ChainCore开源区块链生产环境部署

 风摆残荷
发布于 2017/02/12 22:27
字数 1853
阅读 813
收藏 3

问题&要求

目前ChainCore没有提供用于生产环境的Docker容器,因此,对于生产环境,我们需要单独进行生产方式部署。

我们对于生产环境要求如下:

  1. 关闭ChainCore数据重置功能
  2. 可以独立设置Generator,Signer,Quorum

概念扫盲

ChainCore数据重置

ChainCore数据重置功能,由两个地方提供:

  1. ChainCore Developer Dashboard中(Web 工具)
  2. corectl(shell 工具)

注意:ChainCore的数据重置功能,本质上就是清空表,但是有三张表的数据是不会清空的,分别是:

  1. mockhsm(存储模拟生成的HSM秘钥)
  2. access_tokens(存储生成的token,包括client token和network token)
  3. migrations(存储表结构迁移记录)

目前操作的结果是,仅有migrations这张表的数据保留,其他表的数据均被清空,源码中指定了跳过上述三张表,目前这个问题还在探讨中。

ChainCore核心概念

Block Generator

区块生成器(下文称Generator),用于生成区块,ChainCore支持两种方式生成区块:

  1. 按照时间频率(例如每隔一秒生成一个)
  2. 按照交易池中的交易数量(例如每满100比交易生成一个区块)

注意:在一条ChainCore区块链中,只能有一个Generator,一个Generator也可以同时是一个Block Signer

关于Generator的高可用问题,不在本文的讨论范畴

Block Signer

区块签名者(下文称Signer),用于给区块签名。

Generator会将生成的区块(包含交易)发送给每个Signer,Signer会对收到的区块进行验证,如果验证通过,Signer会对接收到的区块进行签名,并返回签名哈希给Generator

注意,在一条ChainCore区块链中,可以包含多个Signer

Block Participant

区块链参与者(下文称Participant),能够发行资产,发起交易等,不能够生成区块以及对区块签名。

Quorum

Quorum,法定数量,这个概念要结合Signer来理解。

上文提到,一条ChainCore区块链中,可以包含多个Signer,这里的Quorum,就是代表着,Signer中,有Quorum个签名通过,那么Generator就认为这个区块是有效的。

生产环境部署

下文中命令行命令,是建立在《开源区块链ChainCore源码方式安装》一文的基础上的,如果没有按照此文搭建源码环境,请先按照此文进行源码环境的搭建。

禁用ChainCore数据重置功能

使用shell脚本编译

对于ChainCore数据重置功能的禁用,只需要在编译时提供 prod 参数即可,幸运的是,对于release版本的构建,ChainCore已经给我们提供了简单易用的shell脚本,存放在 $CHAIN/bin 目录中。

首先我们将对应的release构建脚本复制到$CHAIN目录中

cp $CHAIN/bin/build-cored-release ../

接着我们尝试执行构建脚本

$CHAIN/build-cored-release

执行后会发现得到如下提示:

Usage: /home/poet/Develop/src/chain/build-cored-release <releaseRef> <outputDir>

这是告诉我们,这个shell脚本需要两个参数,第一个为Git的版本号,第二个为编译输出的目录

截止本文时间,ChainCore的最新版release版本为 cmd.cored-1.0.2 (使用git tag查询) 

因此,我们可以使用如下命令来编译ChainCore

$CHAIN/build-cored-release cmd.cored-1.0.2 $GOPATH/release

执行结束后,在 $CHAIN 目录下会存在 cored,corectl 两个可执行程序

分别来解释下这两个程序的作用:

  • cored,ChainCore区块链服务,主要提供完整的区块链功能
  • corectl,ChainCore区块链控制程序,包含生成token,配置、初始化ChainCore等功能

我们可以使用如下命令尝试启动ChainCore

$GOPATH/release/cored

ChainCore启动成功后,通过查看 Core Status ,我们可以看到一个红色的Delete All Data按钮(如下图),下一步,我们就要想办法禁用这个功能。

生产版本Core编译

对于生产版本的编译,非常简单,只需要在build的时候,添加一个 prod tag就可以

因此我们对build-cored-release脚本进行修改,找到如下部分:

go build\
  -tags 'insecure_disable_https_redirect'\
  -ldflags "$ldflags"\
  -o $outputDir/cored\
  chain/cmd/cored

echo "building corectl..."

go build\
  -o "$outputDir/corectl"\
  chain/cmd/corectl

修改为:

go build\
  -tags 'prod insecure_disable_https_redirect'\
  -ldflags "$ldflags"\
  -o $outputDir/cored\
  chain/cmd/cored

echo "building corectl..."

go build\
  -tags 'prod'\
  -o "$outputDir/corectl"\
  chain/cmd/corectl

在后再执行上述的编译命令,即可编译生产环境的ChainCore。

这里有一点需要注意的是,在第二个编译中(编译corectl),由于目前源码的问题(dev环境和prod环境import不一致),会导致corectl无法成功编译。

此问题的解决办法不在本文描述,如果有Go语言基础,可以自行解决,具体问题已经提交到GitHub Issue中。

再次运行ChainCore,会发现,红色的Delete All Data按钮已经消失了,如下图:

配置、初始化ChainCore

corectl工具使用

create-token

用于创建token,包括client token和network token。

使用方法:

usage: corectl create-token [-net] [name]

参数释义:

    -net 生成一个network token(若不指定,则生成client token)

    name token的别名,注意:别名不可重复

使用举例:

# 生成一个别名为client的token
corectl create-token client

# 生成一个别名为net的network token
corectl create-token -net net

create-block-keypair

用于创建一个公钥,公钥别名为 block_key ,注意:此命令只能执行一次,多次执行会报错,因此,当公钥生成后,务必妥善保管。

使用方法:

usage: corectl create-block-keypair

参数释义:

    不需要参数

使用举例:

corectl create-block-keypair

这个命令生成的公钥,将会在配置Generator,Signer中使用

config-generator

此命令用于配置节点为Generator,已经配置过的节点,不可以使用此命令。

使用方法:

usage: corectl config-generator [-s] [-w duration] [quorum] [pubkey url]...

参数释义:

    -s 指定此Generator同时为Signer

    -w 发行窗口持续时间,默认24小时

    quorum 签名法定数量

    [pubkey url] 这两个参数为一组参数,pubkey为Signer端使用create-block-keypair生成的公钥,url为Signer的连接url,固定格式如下:http://<signer-access-token>@<signer-ip>:<signer-port>

quorum参数必须小于或等于[pubkey url]参数的个数

使用举例:

  暂无

config

此命令用于配置节点为Signer或Participant,已经配置过的节点,不可以使用此命令。

使用方法:

usage: corectl config [-t token] [-k pubkey] [blockchain-id] [url]

参数释义:

    -t 指定token,此token为Generator的access token

    -k 指定公钥,这里的公钥为本身使用 create-block-keypair 命令生成的公钥

    blockchain-id   要加入区块链的id,由 config-generator 命令执行后生成

    url  generator的url,一般为http://<generator-ip>:<generator-port>

使用举例:

  暂无

使用举例:

reset

开发环境中使用,用于清空数据库表,功能同Developer Dashboard中的Delete All Data相同。

使用方法:

usage: corectl reset

参数释义:

    不需要参数

使用举例:

usage: corectl reset

补充

若想在单机模拟产品环境,可以通过在不同Terminal中设置不同环境变量来修改监听端口和数据库连接,如:

# 设置cored服务监听端口为2000
export LISTEN=:2000

# 设置cored的数据库连接url
export DATABASE_URL=DATABASE_URL=postgres://<username>:<password>@<pg-host>/<database-name>?sslmode=disable

 

© 著作权归作者所有

共有 人打赏支持
粉丝 2
博文 13
码字总数 25536
作品 0
昌平
程序员
一键部署区块链环境 阿里云发布企业级BaaS服务

8月3日,阿里云宣布推出企业级区块链服务(Blockchain as a Service,以下简称BaaS),支持一键快速部署区块链环境,实现跨企业、跨区域的区块链应用。阿里云BaaS广泛适用于商品溯源、供应链...

阿里云头条
08/03
0
0
重磅!阿里云区块链服务免费公测,助力企业级业务快速上链

近日阿里云正式上线区块链服务(Blockchain as a Service,简称BaaS),即基于主流区块链技术的企业级技术平台。此次向公众开放的是Hyperledger Fabric,该BaaS承担区块链开发、部署、运维和...

木环
08/15
0
0
阿里云商业产品-区块链服务(公测)发布

产品介绍: 阿里云区块链服务(Blockchain as a Service,简称BaaS)是一种基于主流区块链技术的企业级PaaS(Platform as a Service)平台服务,帮助用户快速构建更稳定、安全的生产级区块链...

刘立超
08/01
0
0
阿里云发布区块链解决方案 支持天猫奢侈品正品溯源

4月12日,阿里云发布全新区块链解决方案,支持天猫奢侈平台Luxury Pavilion推出全球首个基于区块链技术的正品溯源功能。该方案旨在帮助进一步打造和拓展奢侈品供应链应用生态。 借助阿里云区...

木环
04/13
0
0
【AERGO】BLOCKO支持,FBG领投的第四代企业级区块链协议

官方渠道 官方网址:https://aergo.io/ Twitter:https://twitter.com/AERGO_IO?lang=en Telegram:https://t.me/aergoofficial Linkedin:https://www.linkedin.com/company/aergofoundatio......

小薇BitBione
07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信小程序开发系列六:微信框架API的调用

微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发...

JerryWang_SAP
42分钟前
4
0
5 个用 Python 编写 web 爬虫的方法

大家在读爬虫系列的帖子时常常问我怎样写出不阻塞的爬虫,这很难,但可行。通过实现一些小策略可以让你的网页爬虫活得更久。那么今天我就将和大家讨论这方面的话题。 我刚整理了一套2018最新...

糖宝lsh
43分钟前
6
0
docker安装redis、mongodb、mysql等

一、启动docker服务,设置镜像: systemctl start dockervi /etc/docker/daemon.json{ "registry-mirrors": ["https://registry.docker-cn.com"]} 二、下拉镜像: 在镜像中心h...

狼王黄师傅
今天
5
0
deepin系统使用deepin-wine安装exe程序

deepin自带原生deepin-wine使用命令如下: deepin-wine QQBrowser.exedeepin-wine QQMusicSetup.exe 默认安装的快捷方式位置: /root/.wine/drive_c/'Program Files'/Tencent/QQBrowser/......

临江仙卜算子
今天
4
0
快速get到学习Linux操作系统的点

快速get到学习Linux操作系统的点 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux能够运行主要的UNIX工具软件...

linuxCool
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部