部署说明

1. 前提条件

环境版本
JavaJDK8或以上版本
数据库MySQL-5.6或以上版本
ZooKeeperZooKeeper-3.4.10

备注:

  • Java推荐使用OpenJDK,建议从OpenJDK网站 自行下载(CentOS的yum仓库的OpenJDK缺少JCE(Java Cryptography Extension),导致Web3SDK无法正常连接区块链节点)
  • 安装说明请参看 安装示例,不使用分布式任务可以不部署ZooKeeper。

国密支持:

WeBASE-Transaction v1.2.2+已支持 国密版FISCO-BCOS

开启web3sdk的国密开关:

  • 开启web3sdk的国密开关:将配置文件application.properties中sdk配置的encryptType0修改为1
  • 编译国密版智能合约在v1.3.1版本后,通过引入solcJ:0.4.25-rc1.jar,自动切换支持国密版智能合约的编译/部署/调用;(可自行切换solcJ-0.5.2)

2. 拉取代码

执行命令:

  1. git clone https://github.com/WeBankFinTech/WeBASE-Transaction.git

进入目录:

  1. cd WeBASE-Transaction

3. 编译代码

使用以下方式编译构建,如果出现问题可以查看 常见问题解答
方式一:如果服务器已安装Gradle,且版本为gradle-4.10或以上

  1. gradle build -x test

方式二:如果服务器未安装Gradle,或者版本不是gradle-4.10或以上,使用gradlew编译

  1. chmod +x ./gradlew && ./gradlew build -x test

构建完成后,会在根目录WeBASE-Transaction下生成已编译的代码目录dist。

4. 修改配置

4.1 复制模板

进入编译目录dist:

  1. cd dist

dist目录提供了一份配置模板conf_template:

  1. 根据配置模板生成一份实际配置conf。初次部署可直接拷贝。
  2. 例如:cp conf_template conf -r

4.2 复制证书

进入配置目录conf:

  1. cd conf

将节点所在目录nodes/${ip}/sdk下的ca.crtnode.crtnode.key文件拷贝到当前conf目录,供SDK与节点建立连接时使用。

4.3 修改配置

说明: 有注释的地方根据实际情况修改,完整配置项说明请查看 配置说明

  1. vi application.properties
  1. ################################### Basic Configuration ###################################
  2. # 工程服务端口,端口被占用则修改
  3. server.port=5003
  4. server.context-path=/WeBASE-Transaction
  5. mybatis.mapper-locations=classpath:mapper/*.xml
  6. logging.config=classpath:log4j2.xml
  7. ################################### web3sdk Configuration ###################################
  8. # 机构名
  9. sdk.orgName=webank
  10. sdk.timeoutsdk=10000
  11. # 线程池配置
  12. sdk.corePoolSize=100
  13. sdk.maxPoolSize=500
  14. sdk.queueCapacity=500
  15. sdk.keepAlive=60
  16. # 群组信息,可配置多群组和多节点
  17. # 群组id(下同)
  18. sdk.groupConfig.allChannelConnections[0].groupId=1
  19. # 连接节点的ip和channelPort(下同)
  20. sdk.groupConfig.allChannelConnections[0].connectionsStr[0]=127.0.0.1:20200
  21. sdk.groupConfig.allChannelConnections[0].connectionsStr[1]=127.0.0.1:20201
  22. sdk.groupConfig.allChannelConnections[1].groupId=2
  23. sdk.groupConfig.allChannelConnections[1].connectionsStr[0]=127.0.0.1:20200
  24. sdk.groupConfig.allChannelConnections[1].connectionsStr[1]=127.0.0.1:20201
  25. # 切换国密与非国密 0: standard, 1: guomi
  26. sdk.encryptType=0
  27. ################################### constant Configuration ###################################
  28. # WeBASE-Sign签名服务ip端口,使用本签名方式则对应修改
  29. constant.signServer=127.0.0.1:5004
  30. # 本地配置私钥进行签名,使用本签名方式则对应修改
  31. constant.privateKey=edf02a4a69b14ee6b1650a95de71d5f50496ef62ae4213026bd8d6651d030995
  32. constant.cronTrans=0/1 * * * * ?
  33. constant.requestCountMax=6
  34. constant.selectCount=10
  35. constant.intervalTime=600
  36. constant.sleepTime=50
  37. # 是否删除数据
  38. constant.ifDeleteData=false
  39. constant.cronDeleteData=0 0 1 * * ?
  40. constant.keepDays=360
  41. # 使用分布式任务部署多活(true-是,false-否)
  42. constant.ifDistributedTask=false
  43. ################################### elastic-job 分布式任务 ###################################
  44. # 部署多活的话需配置zookeeper,支持集群
  45. job.regCenter.serverLists=127.0.0.1:2181
  46. # zookeeper命名空间
  47. job.regCenter.namespace=elasticjob-transaction
  48. # 分片数(如多活3个的话可分成3片)
  49. job.dataflow.shardingTotalCount=3
  50. ################################### 数据源配置 ###################################
  51. # * 说明:本工程使用Sharding-JDBC分库分表,支持单一数据源,也支持多库多表。
  52. # * 单库单表:配置单个数据源,将分库策略和分表策略注释或删除
  53. # * 多库多表:配置多数据源,以群组分库,以年份分表,用户自定义每年分成几个表(注:分表策略的路由字段不可修改[id,gmt_create])
  54. # * 样例:以两个数据源为例(数据库需事先创建),每张表根据年分表,每年再分成两个子表,以2019和2020年的表为例
  55. # 配置所有的数据源,如此处定义了ds0,ds1两个数据源,对应两个库
  56. sharding.jdbc.datasource.names=ds0,ds1
  57. # 定义数据源ds0,配置数据库连接信息
  58. sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
  59. sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
  60. sharding.jdbc.datasource.ds0.url=jdbc:mysql://127.0.0.1:3306/webasetransaction0?autoReconnect=true&useSSL=false&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8
  61. sharding.jdbc.datasource.ds0.username=dbUsername
  62. sharding.jdbc.datasource.ds0.password=dbPassword
  63. # 定义数据源ds1,配置数据库连接信息
  64. sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
  65. sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
  66. sharding.jdbc.datasource.ds1.url=jdbc:mysql://127.0.0.1:3306/webasetransaction1?autoReconnect=true&useSSL=false&serverTimezone=GMT%2b8&useUnicode=true&characterEncoding=UTF-8
  67. sharding.jdbc.datasource.ds1.username=dbUsername
  68. sharding.jdbc.datasource.ds1.password=dbPassword
  69. # 定义数据库分片策略,如此处以群组id取模2来路由到ds0或ds1
  70. sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=group_id
  71. sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{group_id % 2}
  72. # 定义tb_deploy_transaction的分表策略,如此处以创建时间的年份和自增id取模2来路由到子表
  73. sharding.jdbc.config.sharding.tables.tb_deploy_transaction.actual-data-nodes=ds$->{0..1}.tb_deploy_transaction_$->{2019..2020}_$->{0..1}
  74. sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.sharding-columns=id,gmt_create
  75. sharding.jdbc.config.sharding.tables.tb_deploy_transaction.table-strategy.complex.algorithm-class-name=com.webank.webase.transaction.config.MyComplexShardingAlgorithm
  76. sharding.jdbc.config.sharding.tables.tb_deploy_transaction.key-generator-column-name=id
  77. # 定义tb_stateless_transaction的分表策略,如此处以创建时间的年份和自增id取模2来路由到子表
  78. sharding.jdbc.config.sharding.tables.tb_stateless_transaction.actual-data-nodes=ds$->{0..1}.tb_stateless_transaction_$->{2019..2020}_$->{0..1}
  79. sharding.jdbc.config.sharding.tables.tb_stateless_transaction.table-strategy.complex.sharding-columns=id,gmt_create
  80. sharding.jdbc.config.sharding.tables.tb_stateless_transaction.table-strategy.complex.algorithm-class-name=com.webank.webase.transaction.config.MyComplexShardingAlgorithm
  81. sharding.jdbc.config.sharding.tables.tb_stateless_transaction.key-generator-column-name=id
  82. sharding.jdbc.config.props.sql.show=false

5. 服务启停

返回到dist目录执行:

  1. 启动:bash start.sh
  2. 停止:bash stop.sh
  3. 检查:bash status.sh

备注:服务进程起来后,需通过日志确认是否正常启动,出现以下内容表示正常;如果服务出现异常,确认修改配置后,重启提示服务进程在运行,则先执行stop.sh,再执行start.sh。

  1. ...
  2. Application() - main run success...

6. 查看日志

在dist目录查看:

  1. 交易服务日志:tail -f log/transaction.log
  2. web3连接日志:tail -f log/web3sdk.log