LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 新闻观点 > Wisdomcore部署方法—Docker

Wisdomcore部署方法—Docker

2020-03-31 智慧链技术社区 来源:区块链网络

1、概述

WDC core使用docker方式部署,通过docker-compose 来实现。

总体步骤为,将wdc.yml和entry_point.sh(见第 3 节)放入同一目录,修改 entry_point.sh 权限为可执行,根据需要修改 wdc.yml 文件内容。

执行启动命令:docker-compo -f wdc.yml up -d 本文档基于 Linux 系统来部署 WDC core。

详细操作,请阅读后续内容。

2、准备工作

2.1、配置网络防火墙

WDC P2P 和 RPC 默认端口均为 19585,在 docker 容器端口映射时,可根据需求修改。请根据需求修改网络防火墙设置,决定是否开放该端口。

2.2、服务器硬件

磁盘空间建议 500GB,内存 16GB,CPU 8 核。

2.3、安装docker、docker-compose

2.3.1.Ubuntu(官方建议)

apt install -y docker-compose

2.3.2.CentOS

yum install -y docker

sudo curl -L

"https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(u name-s)-$(uname-m)"-o /usr/local/bin/docker-compose

sudo chmod+x /usr/local/bin/docker-compose

参考文档:https://docs.docker.com/compose/install/

3、YML文件(wdc.yml)与入口脚本(entry_point.sh)

3.1、Docker 镜像地址

节点程序镜像:wisdomchain/wdc_core

数据库镜像:wisdomchain/wdc_pgsql

3.2、wdc.yml 文件示例

* 以下内容为示例性内容,实际部署时,卷映射、环境变量、端口映射等根据实际情况,需要调整。

version: '3.1'

services:

wdc_pgsql:

image: wisdomchain/wdc_pgsql

restart: always

container_name: wdc_pgsql

privileged: true

volumes:

- /opt/wdc_pgsql:/var/lib/postgresql/data # pgsql 数据目录ports:

- 127.0.0.1:5433:5432

environment:

POSTGRES_USER: wdcadmin

POSTGRES_PASSWORD:

PqR_w9hk6Au-jq5ElsFcEjq!wvULrYXeF3*oDKp5i@A/D5m03VaB1M/hyKY WDC_POSTGRES_USER: replica

WDC_POSTGRES_PASSWORD: replica

wdc_core:

image: wisdomchain/wdc_core

restart: always

container_name: wdc_core

privileged: true

volumes:

-/opt/wdc_logs:/logs #程序日志目录

-/opt/wdc_leveldb:/leveldb

-./entry_point.sh:/entry_point.sh

-/opt/ipc:/root/ipc

-./libs:/libs

-/opt/fast-sync:/fast-sync

entrypoint: /usr/bin/env bash /entry_point.sh-d wdc_pgsql:5432-c '/usr/bin/env bash

/run_wdc_core.sh'

ports:

- 19585:19585

- 9585:9585

environment:

LOGGING_CONFIG:

'https://wisdom-config.oss-cn-hangzhou.aliyuncs.com/public-chain/logback.xml'

# 如发现LOGGING_CONFIG 相关路径报错,可以去除此项

DATA_SOURCE_URL: 'jdbc:postgresql://wdc_pgsql:5432/postgres'

DB_USERNAME: 'replica'

DB_PASSWORD: 'replica'

WDC_MINER_COINBASE:'WX1********XN1T21573hYata' P2P_MODE: 'grpc'

P2P_ADDRESS: 'wisdom://192.**.***.156:9585'

BOOTSTRAPS:

'wisdom://47.74.183.249:9585,wisdom://47.74.216.251:9585,wisdom://47.96.67.155:95

85,wisdom://47.74.86.106:9585'

MAX_BLOCKS_PER_TRANSFER: '256'

ENABLE_DISCOVERY: 'true'

ENABLE_MINING: 'true'

FAST_SYNC_DIRECTORY: '/fast-sync'

DATABASE_DIRECTORY: '/leveldb'

3.3、卷映射(volumes)

可根据需要,映射到不同的目录。

其中,wdc_pgsql volumes映射的是PostgreSql数据库数据目录,docker 容器删除后,该目录不会自动删除,节点数据仍然保留。如果想要全新启动 WDC Core,请备份该目录后,删除或清空该目录。

wdc_core volumes 映射的是 WDC Core 节点程序日志目录。

容器内部的一些文件,也可以根据需要映射到宿主机目录。比如 wdc_core 容器内部的

/fast-sync,可以映射为:/opt/fast-sync:/fast-sync

3.4、网络端口映射(ports)

wdc_pgsql 的端口映射,为了保障安全,建议映射到IP 地址 127.0.0.1,只允许本机访问。如果不想通过外部客户端访问数据库,也可以去掉该端口映射。

wdc_pgsql 和 wdc_core 的外部端口号,可根据需求修改。

3.5、环境变量(environment)

数据库用户名密码可以自定义,但要保证 WDC_POSTGRES_USER 与 DB_USERNAME 保持一致,WDC_POSTGRES_PASSWORD 与 DB_PASSWORD 一致。

ENABLE_MINING 表示是否启动挖矿。

WDC_MINER_COINBASE 为挖矿 coinbase 地址,必须设置,否则节点无法启动。生成地址的方法参见下一节“矿工地址生成”。

DATA_SOURCE_URL 的值,利用 docker 容器互联,不必修改。如果需要修改,需确保 URL 中的主机名为 pgsql 容器名,端口与 pgsql 容器内部的数据库端口相同。

BOOTSTRAPS:种子节点列表,英文逗号分隔

ENABLE_DISCOVERY:是否允许节点发现,true/false P2P_ADDRESS:自己节点 ip、port

ports:9585是p2p 端口,19585 是 rpc 端口MAX_BLOCKS_PER_TRANSFER:最大同步区块数(官方建议默认 256)

FAST_SYNC_DIRECTORY: '/fast-sync':快照文件路径(此路径为容器内的路径,需要与wdc.yml 中配置 volumes 下的保持一致)

DATABASE_DIRECTORY: '/leveldb'::leveldb 存储路径(此路径为容器内的路径,需要与wdc.yml 中配置 volumes 下的保持一致)

3.6、矿工地址生成

使用手机 APP 生成地址

APP 可在官网下载:https://www.wisdchain.com/

目前下载页面为:https://www.wisdchain.com/user/application_1

3.7、entry_point.sh

wdc.yml 文件中,wdc_core 服务的入口脚本内容:

#!/bin/bash #set -x

#******************************************************************************? ? ?# @file : entrypoint.sh

# @author : wangyubin

# @date : 2018-08- 1 10:18:43 #

# @brief? : entry point for manage service start order # history : init

#******************************************************************************

: ${SLEEP_SECOND:=2}

wait_for() {

echo Waiting for $1 to listen on $2...

while ! nc -z $1 $2; do echo waiting...; sleep $SLEEP_SECOND; done

}

declare DEPENDS

declare CMD

while getopts "d:c:" arg

do

case $arg in

d)

DEPENDS=$OPTARG

;;

c)

CMD=$OPTARG

;;

?)

echo "unkonw argument"

exit 1

;;

esac

done

for var in ${DEPENDS//,/ }

do

host=${var%:*}

port=${var#*:}

wait_for $host $port

done

eval $CMD

示例:

3.8、数据快照(120w 高度)

数据快照下载链接:https://wisdom-backup.oss-cn-beijing.aliyuncs.com/fast_sync.zip解压并把快照文件放入(官方建议,有需要可以自定义路径,在 wdc.yml 中修改)

/opt/fast-sync 路径下。

如有新数据快照请关注官方公众号。

4、启动 docker 镜像

4.1、准备工作

更新镜像:

docker pull wisdomchain/wdc_core

docker pull wisdomchain/wdc_pgsql

将 entry_point.sh 与 YML 文件(wdc.yml)放入同一目录,修改 entry_point.sh 权限为可执行:

chmod a+x entry_point.sh

4.2、启动命令

docker-compose -f wdc.yml up -d

(wdc.yml 内容见第 2 节 YML 文件)

命令最终输出如下内容,表是 docker 容器启动成功:

Creating wdc_core ...

Creating wdc_pgsql ...

Creating? wdc_core

Creating wdc_pgsql ... done

4.3、节点运行情况检查

命令 docker ps 查看容器状态

Status 字段为Up...字样,容器运行正常。

浏览器访问:http://<节点 IP>:<端口>/block/-1,查看最新区块信息。

浏览器访问:http://<节点 IP>:<端口>/height,查看区块高度。区块高度值不断增加,表示区块正在同步。

浏览器访问:http://<节点 IP>:<端口>/peers/status,查看 peer 互联情况。

4.4、日志检查

命令 docker logs -f <CONTAINER NAME> 查看节点程序控制台输出

/opt/wdc_logs 目录为节点程序日志文件目录,如果再 YML 文件映射到了其他目录,请到相应目录查看。

4.5、更新升级节点程序

停止并删除容器

docker-compose -f wdc.yml down

获得最新版本镜像

docker pull wisdomchain/wdc_core

修改 wdc.yml,如果有必要的话。启动新版镜像

docker-compose -f wdc.yml up -d

5、挖矿规则说明

5.1、矿工规则

(1)申请:如果要申请矿工,首先账户抵押数必须大于或者等于十万,投票数必须要排列在前? ? 十五名,才能成为矿工。投票可以是本账户给本账户投票,也可以是其他账户给本账户投票。

(2)竞争:如果有新账户的投票数进入前十五名,那么投票数低于前十五名的原矿工到了下一? ? 个纪元(每个纪元 120 个区块)就会被挤掉,失去矿工资格,而符合矿工条件的新矿工到了下一个纪元会成为矿工。投票数每个纪元排列一次。

(3)拉黑:如果某个矿工在一个纪元(120 个区块)内没有出块,那么到了下一个纪元,该矿工就会被拉黑。

5.2、投票规则

(1)每 1 个月衰减 10%,按照 10 秒一个块进行设定;

(2)10 秒一个块,1 小时为 360 块,1 天为 8640 块,30 天为 259200 块

(3)投票纪元为 120 个区块,但我们并不会在每次纪元切换时就进行衰减,而是在某笔投票

事务达到 1 个月区块总数后进行衰减,也就是说是按照 259200 的高度倍数进行衰减的。

(4)参与计算衰减的是有效的投票事务,如果已经撤销则不用计算。

(5)每一次 10%的衰减,是依据一开始的投票数的,比如一开始投票 1000 票,衰减后其权益为 1000-1000*10%=900,再次衰减则为 900-900*10%=810 而不是 900-100=800。

(6)注意对投票撤销的考虑,投票以及投票的撤销是可以连续进行的,因此投票并不总是有效的,当某笔投票撤销后,其实际投票权益则为 0,投票数也变为 0。

5.3、挖矿状态检查

浏览器访问:http://<节点 IP>:<端口>/votes/<帐户地址>,查看<帐户地址>被投票情况。

浏览器访问:http://<节点 IP>:<端口>/account/<帐户地址>,查看矿工帐户地址信息。

6、PostgreSQL 数据库优化

6.1、配置文件修改

配置文件为 pgsql 数据目录的 postgresql.conf 文件。比如示例 yml 文件中映射的目录/opt/wdc_pgsql。可以根据系统软硬件资源情况进行调整。详细内容请参考

https://www.postgresql.org/docs/10/runtime-config.html

修改配置文件后,需要重启数据库服务,即重启 pgsql 所对应的 docker 容器。另外,在制作 docker 镜像时,可以复制预先修改好的配置文件到镜像数据目录,从而使得新建的容器不使用默认的配置。

6.1.1常见修改项

数据库最大连接数:max_connections=500#默认值 100

共享缓冲区:shared_buffers = 256MB #默认值 128MB

最大缓存,这个数字对于独立的 pgsql 服务器而言应该足够大,比如 4G 的内存,可以设置为3.5G(437500)

effective_cache_size = 10GB

增加 work_mem 有助于提高排序的速度

work_mem = 128MB

维护操作内存用量

maintenance_work_mem = 512MB

自动清理操作内存用量

autovacuum_work_mem = 256MB

6.1.2日志配置

配置日志记录的一个目的是记录查询较慢的 SQL 语句,进而优化数据库索引或者改进查询语句。典型的配置:

log_destination = 'csvlog' # 日志输出目的地。Csvlog 便于导入 DB 进行分析。需要开启logging_collector。

logging_collector = on # 搜集日志到 csvlog 或 stderr

log_directory = 'log' #日志目录。可以是绝对路径或PGDATA的相对路径

log_filename = 'postgresql.%H.log' # 日志文件名

log_truncate_on_rotation = on # 日志回滚,新建文件时清空同名新文件。对基于时间的回滚设置有效。

log_rotation_age = 2h #日志回滚周期

log_min_duration_statement = 5000#记录耗时大于等于该时长的 SQL 查询语句, 单位毫秒

log_duration = on #记录查询持续时间

注意:

日志文件可能增长较快,导致磁盘空间耗尽。注意观察、清理,并缩短回滚周期。

上面的设置,可以使日志文件数量固定下来,日志回滚时清空同名新文件,进而占用的磁盘空间会保持在较小的范围。避免无限增长,耗尽磁盘空间。

具体来说,每 2 个小时回滚日志,文件名格式为 postgresql.<小时>.log,对应的 csvlog 为postgresql.<小时>.csv。日志回滚时,准备写入的新日志文件如果存在,则先清空,然后开始写入。

6.2、数据库索引

使用客户端的 SQL 分析工具,或者执行 SQL 命令:explain <sql 语句>,查看 SQL 语句执行时的索引使用情况,进而优化数据库索引。

尤其是频繁查询大数据表的 SQL 语句,如果进行全表扫描,那么建立合适的索引,将显著提升查询效率。

6.3、数据库密码修改及数据安全

PostgreSQL DB 启动前,可以修改 yml 文件中的 DB 密码。PostgreSQL DB 容器启动后, 修改密码需要通过 DB 客户端连接 DB 后修改密码。

数据库遭到攻击破坏,不会影响钱包资金安全。只要保护好地址私钥以及钱包 keystore, 资金就是安全的。

7、程序日志管理

注意程序日志大小、磁盘空间占用情况。必要时清理。程序日志目录:参考 yml 示例文件,/opt/wdc_logs

8、一些维护操作

8.1、清理无效镜像

docker rmi `docker images | grep '<none>' | awk '{print $3}'`

8.2、查看docker 容器所使用的镜像ID 及名称

docker inspect <container ID>| grep Image 以此来确认容器使用了正确的镜像。

9、FAQ

9.1、no such file or directory

如 果 wdc_core 启 动 报 出 如 下 类 似 错 误 :standard_init_linux.go “no such file or directory”

说明 entry_point.sh 的换行符有问题,很可能是 Windows 格式 \r\n,需要转换为 Linux 格式

\n。

可执行命令:dos2unix entry_point.sh

或者使用其他工具转换。

10、RPC 接口与 SDK

https://github.com/WisedomChainGroup/rpc-doc https://github.com/WisedomChainGroup/java-sdk

11、参考文档

https://docs.docker.com/

https://docs.docker.com/compose/ https://www.postgresql.org/docs/10/index.html

官网地址:

www.wisdchain.com

区块浏览器地址:

https://scan.wisdchain.com/index.html

开源代码库:

https://github.com/WisedomChainGroup

请关注WDC官方平台动态:

微博:@WisdomChain智慧链

Twitter:@Wisdom_Chain

Facebook:@WisdomChain

Github:github.com/WisedomChainGroup

—-

编译者/作者:智慧链技术社区

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...