300秒快速部署cita(新)


#1

基础环境

操作系统 : Ubuntu Server 18.04 LTS
CPU : 2核心
内存 : 4GB
Docker版本 : 18.06.1-ce
Cita Releases Version : v0.20.1 README
Cita Code : cita_secp256k1_sha3.tar.gz Download
操作目录 : /opt

环境安装

检查主机软件包并更新

sudo apt update #检查软件包
sudo apt upgrade -y #更新软件包

安装docker环境

sudo apt install -y docker.io #安装docker和依赖环境,要求 docker 17.0+

启动docke

service docker start #启动docker
service docker status #查看docker状态 按q退出查看

下载 CITA 发行版

CITA发行版发布在 https://github.com/cryptape/cita/releases
下载 Cita 打包文件
使用 secp256k1_sha3 (secp256k1是签名算法,sha3是加密算法)版本

cd /opt
wget https://github.com/cryptape/cita/releases/download/v0.20.1/cita_secp256k1_sha3.tar.gz

Tips:
CITA 还提供了 blake2b签名算法+ed25519的加密算法,以及sm2、sm3国密算法的版本,本文内容都是以 secp256k1_sha3 版本为例子说明。

启动服务

创建用户(CITA新版本[0.20开始]部署时,需赋予超级管理员权限)

./env.sh bin/create_key_addr new_account_key new_account_address
cat new_account_key new_account_address

执行回显:

# cat new_account_key new_account_address
0x51dd9b40a6d34e3d174638ba2992159f7792e28da5335cd9d9238bd9bd96c8c4
0x07634d43154cc9754aeb1b3bf353d4ac2dbedd85

创建Cita节点
按照下列指令,填写账户地址 0x07634d43154cc9754aeb1b3bf353d4ac2dbedd85,将赋予新账户超级管理员权限,并且引导您创建4个默认配置的节点文件, CITA最少需要运行4个节点(共识节点)才能正常出块**

pwd
# /opt/cita_secp256k1_sha3 #返回当前目录 
./env.sh ./scripts/create_cita_config.py create --nodes "127.0.0.1:4000,127.0.0.2:4001,127.0.0.3:4002,127.0.0.4:4003" --super_admin 0x07634d43154cc9754aeb1b3bf353d4ac2dbedd85 --contract_arguments VersionManager.version=0

初始化节点配置文件

./env.sh ./bin/cita setup test-chain/0
./env.sh ./bin/cita setup test-chain/1
./env.sh ./bin/cita setup test-chain/2
./env.sh ./bin/cita setup test-chain/3

启动Cita节点

按照下列指令,将引导您启动4个默认配置的节点(共识节点),并开始进行区块记录

pwd
# /opt/cita_secp256k1_sha3 #返回当前目录
./daemon.sh ./bin/cita start test-chain/0
./daemon.sh ./bin/cita start test-chain/1
./daemon.sh ./bin/cita start test-chain/2
./daemon.sh ./bin/cita start test-chain/3

查看当前节点运行进程,每个节点会启动7个微服务进程

ps aux | grep cita- | grep -v 'grep'

执行回显:

# ps aux | grep cita- | grep -v 'grep'
root     24463  0.0  0.6  53148 24820 ?        Sl   07:34   0:00 cita-forever
root     24474  0.0  1.3 207780 54464 ?        Sl   07:34   0:03 cita-network -c network.toml
root     24475  0.1  1.3 227872 56288 ?        Sl   07:34   0:06 cita-chain -c chain.toml
root     24476  0.3  1.3 217272 55992 ?        Sl   07:34   0:14 cita-auth -c auth.toml
root     24477  0.1  1.7 252084 70112 ?        Sl   07:34   0:05 cita-executor -g genesis.json -c executor.toml
root     24478  0.1  1.3 224140 52544 ?        Sl   07:34   0:07 cita-bft -c consensus.toml -p privkey
root     24479  0.0  1.9 213452 78068 ?        Sl   07:34   0:02 cita-jsonrpc -c jsonrpc.toml
root     24719  0.0  0.7  53148 28932 ?        Sl   07:34   0:00 cita-forever
root     24726  0.1  1.7 252084 69160 ?        Sl   07:34   0:05 cita-executor -g genesis.json -c executor.toml
root     24728  0.1  1.3 224132 52592 ?        Sl   07:34   0:07 cita-bft -c consensus.toml -p privkey
root     24732  0.0  1.3 207780 52800 ?        Sl   07:34   0:03 cita-network -c network.toml
root     24733  0.0  1.7 207308 69852 ?        Sl   07:34   0:02 cita-jsonrpc -c jsonrpc.toml
root     24734  0.1  1.3 227872 54808 ?        Sl   07:34   0:06 cita-chain -c chain.toml
root     24735  0.3  1.3 217272 53496 ?        Sl   07:34   0:14 cita-auth -c auth.toml
root     24961  0.0  0.7  53148 30984 ?        Sl   07:34   0:00 cita-forever
root     24970  0.0  1.3 207780 55024 ?        Sl   07:34   0:03 cita-network -c network.toml
root     24971  0.3  1.3 217272 53836 ?        Sl   07:34   0:14 cita-auth -c auth.toml
root     24972  0.1  1.7 254132 70844 ?        Sl   07:34   0:05 cita-executor -g genesis.json -c executor.toml
root     24974  0.0  1.6 207308 65612 ?        Sl   07:34   0:02 cita-jsonrpc -c jsonrpc.toml
root     24976  0.1  1.3 224136 53136 ?        Sl   07:34   0:08 cita-bft -c consensus.toml -p privkey
root     24977  0.1  1.3 227872 54528 ?        Sl   07:34   0:05 cita-chain -c chain.toml
root     25178  0.0  0.5  53148 22756 ?        Sl   07:34   0:00 cita-forever
root     25194  0.3  1.3 217272 56044 ?        Sl   07:34   0:14 cita-auth -c auth.toml
root     25195  0.0  1.3 207780 54680 ?        Sl   07:34   0:03 cita-network -c network.toml
root     25196  0.0  1.7 207308 70224 ?        Sl   07:34   0:02 cita-jsonrpc -c jsonrpc.toml
root     25197  0.1  1.4 227872 57308 ?        Sl   07:34   0:05 cita-chain -c chain.toml
root     25198  0.1  1.7 254132 71052 ?        Sl   07:34   0:05 cita-executor -g genesis.json -c executor.toml
root     25199  0.1  1.4 232328 59528 ?        Sl   07:34   0:07 cita-bft -c consensus.toml -p privkey

测试服务

CITA 提供了支持 [JSON-RPC 2.0](https://www.jsonrpc.org/specification) 协议的API,方便客户端进行区块信息的查询,具体文档在:https://docs.nervos.org/cita/#/rpc_guide/rpc

我们可以通过使用 curl 命令向JSON-RPC 接口发送查询请求,用来检验 CITA 服务是否正常工作。

默认启动的4个节点的 JSON-RPC 服务端口分别是1337、1338、1339、1340,下列指令查看第一个节点的相关信息
查看当前节点上连接其他节点的数量(返回结果+1即是节点所在网络中的所有节点数量)

curl -s -X POST --data '{"jsonrpc":"2.0","method":"peerCount","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool

命令回执

# curl -s -X POST --data '{"jsonrpc":"2.0","method":"peerCount","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "0x3"
}

查看当前节点区块高度

curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool

命令回执

# curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool 
{
    "id": 1,
    "jsonrpc": "2.0",
    "result": "0x85cb"
}

Tips:
JSON-RPC 协议要求发送 JSON 格式的请求参数,其中"jsonrpc":"2.0" 是固定的协议版本, 另外包含三个关键元素:

  1. method:表示要调用的方法
  2. params:表示参数的数组
  3. id:客户端分配的一个标识符,可以包含字符串,数字或者为空。如果没有id,就会被当成是广播通知。这个值一般不能为Null,且为数字时不能有小数。如果请求中含有这个字段,服务器在响应时,必须原样返回该字段,当有多个请求并使用异步队列发送时可以用来区分请求和响应。

增加节点(普通节点)

默认创建4个节点,需增加第5个节点(普通节点)参考下列指令

pwd
#/opt/cita_secp256k1_sha3 返回当前目录
./env.sh ./scripts/create_cita_config.py append --chain_name "test-chain" --node "127.0.0.1:4004" #添加新节点(普通节点),设置新端口号
./env.sh ./bin/cita setup test-chain/4 #初始化新节点配置文件
./daemon.sh ./bin/cita start test-chain/4 #启动新节点(普通节点)
netstat -nutlp | grep cita-network #查看network微服务进程,理应4004端口正常运行中

检查新老节点区块高度

curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool

检查新节点(普通节点)区块高度
正在同步中…

curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1341 | python -m json.tool

停止节点

按照下列指令,将引导您停止新添加的节点(普通节点)

pwd
# /opt/cita_secp256k1_sha3 #返回当前目录
./daemon.sh ./bin/cita stop test-chain/4

删除节点(普通节点)

删除 test-chain/4 的节点,进入到所有共识节点对应目录下,找到network.toml文件,删除对应peers条目即可,例如:

pwd
#/opt/cita_secp256k1_sha3/test-chain/0 #返回当前目录
vim network.toml

删除下列内容

[[peers]]
id_card = 4
ip = "127.0.0.1"
port = 4004

Tips:

  1. CITA中节点分为普通节点~~共识~~节点,普通节点可以通过修改各节点的配置 network.toml 停止通讯,共识节点需要管理员调用 deleteNode(address) 合约方法删除。
  2. 修改 network.toml 文件后 CITA的 cita-network 微服务会自动重新加载,不需要重启整个 CITA 服务。