10. 数据市场服务安装部署
10.1. 概述
数据产品市场基于k3s环境部署,提供yaml文件,用户可根据实际情况调整yaml文件。
10.2. 环境依赖
10.2.1. 硬件要求
| 配置 | 最低配置 | 推荐配置 | 
|---|---|---|
| CPU | 1.5GHz | 2.4GHz | 
| 内存 | 16GB | 64GB | 
| 核心 | 8核 | 16核 | 
| 带宽 | 20Mb | 40Mb | 
10.2.2. 软件依赖
| 名称 | 版本 | 描述 | 是否必须 | 
|---|---|---|---|
| docker | 24+ | 运行核心组件及服务 | 是 | 
| k3s | v1.21.4+ | 与 Kubernetes 集群进行交互和管理,管理核心组件及服务 | 是 | 
| 7z | / | 运行docker合约解压缩的依赖 | 是 | 
10.3. 获取物料包
请从开源仓库获取部署物料包: https://git.chainweaver.org.cn/chainweaver/api-product/deploy-shell
10.4. 基础环境安装
10.4.1. 安装docker
参考官网:https://docs.docker.com/engine/install/
安装完成后,执行以下命令进行验证:
➜  ~ docker version
Client:
 Version:           24.0.6-rd
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        da4c87c
 Built:             Wed Sep  6 16:39:20 2023
 OS/Arch:           darwin/amd64
 Context:           desktop-linux
Server: Docker Desktop 4.27.1 (136059)
 Engine:
  Version:          25.0.2
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       fce6e0c
  Built:            Thu Feb  1 00:23:17 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
10.4.2. k3s集群部署
注:安装K3S前需要先完成Docker安装
下面以 Linux为例进行安装,
使用K3S安装脚本进行安装,具体步骤如下:
# 1. 进入物料包中k3s离线安装文件
➜  ~  cd k3s-offline-install
# 2. 解压安装文件
➜  tar -xvf k3s-offline-install.tar
# 3. 设置环境基础依赖
➜  yum remove -y container-selinux selinux-policy-base k3s-selinux-0.3-0.el7.noarch
➜  yum install selinux-policy-targeted checkpolicy m4 policycoreutils-devel
➜  systemctl stop firewalld && sudo systemctl disable firewalld
➜  setenforce 0 && sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
➜  swapoff -a &&  sudo sed -ri 's/.*swap.*/#&/' /etc/fstab
# 4.执行脚本文件下载镜像
➜  sh ./k3s-offline-install/download_image.sh
# 5. 部署k3s
➜  cd k3s-offline-install
➜  chmod u+x k3s-install.sh
➜  cp ./k3s /usr/local/bin && chmod 755 /usr/local/bin/k3s
➜  INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC="server --flannel-backend=none --disable-network-policy --docker --disable traefik --write-kubeconfig-mode 644" INSTALL_K3S_MIRROR=cn sh k3s-install.sh
➜  kubectl apply -f ./calico.yaml
安装完成后,等待一段时间后执行以下命令进行验证:
➜  ~ kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-node-rvxf9                          1/1     Running   0          36s
kube-system   metrics-server-86cbb8457f-gpsx7            1/1     Running   0          42s
kube-system   local-path-provisioner-5ff76fc89d-nxv7v    1/1     Running   0          42s
kube-system   coredns-7448499f4d-fsjq4                   1/1     Running   0          42s
kube-system   calico-kube-controllers-685b65ddf9-w4jw7   1/1     Running   0          36s
10.5. 部署长安链和智能合约
10.5.1. 部署长安链
数据要素流通平台依赖长安链(需要启用docker go VM),需要先部署长安链。如果已经部署长安链,可以跳过该步骤。
- 长安链提供了多种部署方式, 可以参考官方部署文档,如: 通过Docker部署链 
10.5.2. 安装智能合约
数据要素流通平台智能合约包括数据产品登记合约与数据产品市场合约两部分共三个合约:
- 数据产品登记合约: - ida合约
- 数据产品授权共享合约: - apiAuthContract合约
- 数据产品共享对账合约: - apiReconciliation合约
智能合约的部署方式与链的管理方式有关,一般有两种方式:
- 通过管控台管理的链:合约可以通过管控台直接部署或升级 
- 无管控台管理的链:合约需要通过命令行部署或升级 
注:多个参与方分别部署数据要素流通平台时,合约也仅需部署一次,无需每个参与方分别部署。
下面以命令行部署为例:
# 1. 进入部署如料包文件的合约部署目录
➜ cd contracts-deployment
# 2. 查看合约压缩包和部署脚本
➜ tree -L 3
.
├── contracts # 合约文件
│   ├── ida.7z
│   └── apiAuthContract.7z
│   └── apiReconciliation.7z
├── crypto-config # 长安链用户证书,需要根据实际情况进行替换
│   ├── pk # pk模式长安链用户证书,需要根据实际情况进行替换
│   │   ├── admin1.key
│   ├── cert # cert模式长安链用户证书,需要根据实际情况进行替换
│   │   ├── wx-org1.chainmaker.org
│   │   ├── wx-org2.chainmaker.org
│   │   ├── wx-org3.chainmaker.org
│   │   ├── wx-org4.chainmaker.org
├── deploy.sh # 部署合约脚本
├── deploy.sh.tar # 部署合约脚本压缩
├── scripts # 部署合约脚本、配置文件,需要根据实际情况进行修改(支持cert模式和pk模式)
│   ├── cmc
│   ├── sdk_config.yml
│   ├── sdk_config_pk.yml
# 3. 替换crypto-config下对应的自己长安链证书
# 4. 执行部署脚本
# 支持cert模式和pk模式, 以cert模式为例
➜ sh deploy.sh cert
注:若在window环境通过git获取料包后上传服务器,执行deploy.sh会报错。此时可以将deploy.sh.tar解压后替换deploy.sh
➜ tar -xvf deploy.sh.tar
➜ sh deploy.sh cert
10.6. 数据要素流通平台部署
10.6.1. 部署公共服务数据库组件
1)下载并安装数据库组件
# 1. 回到料包文件路径下后,进入部署料包文件的公共库部署目录
➜ cd db-deployment
# 2. 查看部署配置文件
➜ tree -L 2
.
├── db
│   ├── 01.public-namespace.yaml
│   └── 02.public-mysql.yaml
│   └── 03.public-redis.yaml
├── install.sh # 公共库部署脚本
└── uninstall.sh # 公共库卸载脚本
# 3. 通过k3s配置文件执行公共库安装脚本
➜ sh install.sh
# 4. 重启公共服务数据库组件
➜ sh uninstall.sh
➜ sh install.sh
# 注:在执行完uninstall.sh脚本后,需要等待一段时间项目彻底关闭后再执行install.sh脚本
安装完成后,执行以下命令进行验证:
# 查看public命名空间下的pod,如果以下服务正常运行,说明库组件部署成功
➜  ~ kubectl get pod -n public
NAME                                       READY   STATUS    RESTARTS   AGE
mysql-8c648b66b-4clz5                      1/1     Running   0          3m18s
redis-797cf49c8c-wkgvw                     1/1     Running   0          3m18s
2)手动创建数据库,此时mysql库会默认对外暴露31006端口,root默认密码为:root123456 如果数据库的用户和密码需要修改,需要同步修改 02.public-mysql.yaml 的账号密码 
连接mysql数据库,创建如下6个后续ida和数据产品市场所用到的数据库: 
keyservice 
chainservice 
user_management 
api_manager_service 
certification_management 
registration_service
3)部署ida核心组件
# 1. 回到料包文件路径下后,进入部署如料包文件的ida核心组件部署目录
➜ cd ida-deployment
# 2. 查看部署配置文件
➜ tree -L 2
.
├── ida
│   └── 04.public-key.yaml
│   └── 05.public-chain.yaml
│   └── 06.ida-namespace.yaml
│   └── 07.ida-certification.yaml
│   └── 08.ida-registration.yaml
├── install.sh # ida核心组件部署脚本
└── uninstall.sh # ida核心组件卸载脚本
# 3. 执行ida核心组件安装脚本
➜ sh install.sh
# 4. 重启ida核心组件
➜ sh uninstall.sh
➜ sh install.sh
# 注:在执行完uninstall.sh脚本后,需要等待一段时间项目彻底关闭后再执行install.sh脚本
安装完成后,执行以下命令进行验证:
# 查看public命名空间下的pod,如果以下服务正常运行,说明公共服务组件部署成功
➜  ~ kubectl get pod -n public
NAME                                       READY   STATUS    RESTARTS   AGE
mysql-8c648b66b-4clz5                      1/1     Running   0          3m18s
redis-797cf49c8c-wkgvw                     1/1     Running   0          3m18s
key-ff87f646f-288qc                        1/1     Running   0          3m18s
chain-f5f7f896c-2b2nl                      1/1     Running   0          3m18s
# 查看ida命名空间下的pod,如果以下服务正常运行,说明ida组件部署成功
➜  ~ kubectl get pod -n ida
NAME                             READY   STATUS    RESTARTS   AGE
certification-64d8885b57-8c9qj   1/1     Running   0          3m19s
registration-6db56bccc5-bxrp7    1/1     Running   0          3m19s
10.6.2. 部署数据产品市场组件
# 1. 回到料包文件路径下后,进入部署料包文件的数据产品市场部署目录
➜ cd dpm-deployment
# 2. 查看部署配置文件
➜ tree -L 2
.
├── dpm
│   ├── 09.dpm-namespace.yaml
│   └── 10.dpm-api-manager.yaml
│   └── 11.ida-gateway.yaml
│   └── 12.ida-circulation.yaml
├── install.sh # 数据产品市场部署脚本
└── uninstall.sh # 数据产品市场卸载脚本
# 3. 将配置10.dpm-api-manager.yaml配置文件中如下地址根据需求改为对应的访问地址:
AdapterConf:
   # 适配器服务访问地址,如果不使用适配器模式则忽略此字段(根据实际部署情况改为机器ip)
   Url: "http://127.0.0.1:8086"
DidServiceConf:
   EnableTls: true  
   # did服务访问地址
   Url: "https://did-api.cnbn.org.cn:19996/api/v1/did/document/get"
   
LocalServiceConf:
   #数据要素流通平台访问地址(根据实际部署情况改为机器ip)
   Url: "http://127.0.0.1:31085"
# 3. 执行安装脚本
➜ sh install.sh
# 4. 重启数据产品市场组件
➜ sh uninstall.sh
➜ sh install.sh
# 注:在执行完uninstall.sh脚本后,需要等待一段时间项目彻底关闭后再执行install.sh脚本
安装完成后,执行以下命令进行验证:
# 查看ida命名空间下的pod,如果以下服务正常运行,说明数据产品市场组件部署成功
➜  ~ kubectl get pod -n dpm
NAME                                     READY   STATUS    RESTARTS       AGE
api-manager-68687db654-7zmvt     1/1     Running   0          3m19s
# 查看ida命名空间下的pod,如果以下服务正常运行,说明数据产品市场组件部署成功
➜  ~ kubectl get pod -n ida
NAME                             READY   STATUS    RESTARTS   AGE
certification-64d8885b57-8c9qj   1/1     Running   0          3m19s
registration-6db56bccc5-bxrp7    1/1     Running   0          3m19s
gateway-d755c8f89-r9h82          1/1     Running   0          3m19s
circulation-7f75968f77-8f6xz     1/1     Running   0          3m19s
➜  ~
10.6.3. 适配器部署
如需使用适配器模式提供对外服务,需要部署适配器服务,否则可跳过此部分。
1)安装环境依赖:go 1.21.0 ,参见go官网: https://golang.google.cn/
2)源码下载
下载adapter源码到本地: git clone http://git.chainweaver.org.cn/chainweaver/api-product/api-adapter-service.git
3)手动创建数据库,连接mysql数据库,创建如下1个适配器所用到的数据库: 
api_adapter_service
4)生成物料
进入api-adapter-service/scripts目录,执行prepare.sh脚本,将编译生成adapter二进制文件,并生成api-adapter-service所需要的配置文件,存于api-adapter-service/build/release路径中。
# 进入脚本目录
➜ cd api-adapter-service/scripts
# 查看目录结构
➜ tree
.
├── local        # 该文件下的脚本,在生成物料时,将被拷贝到api_adapter_service/build/release/bin目录下
│   ├── start.sh
│   └── stop.sh
├── prepare.sh        # 编译生成adapter二进制并生成配置文件模板的脚本
├── start.sh          # 启动adapter的脚本
└── stop.sh           # 停止adapter的脚本
# 给 prepare.sh 赋权
➜ chmod 754 prepare.sh
# 编译生成adapter二进制文件并生成配置文件模板
➜ ./prepare.sh
# 查看生成的二进制文件和配置文件
➜ tree -L 3 ../build/release
./build/release
├── bin
│   ├── adapter # adapter二进制文件
│   ├── start.sh   # 启动adapter的脚本
│   ├── stop.sh   # 停止adapter的脚本
└── config
    └── adapter.yaml
5)修改api_adapter_service/config/adapter.yaml配置文件
Name: adapter
Host: 0.0.0.0
Port: 8086
Log:
  # 服务名称
  ServiceName: adapter
  # 日志输出到文件
  Mode: file
  # 日志输出文件路径
  Path: log
  # 日志级别
  Level: debug
  # 是否压缩日志
  Compress: true
  # 日志保留天数,只有在文件模式才会生效
  KeepDays: 180
  # 按天切割日志
  Rotation: daily
  # 日志时间格式
  TimeFormat: "2006-01-02 15:04:05"
# 数据库配置
DBConf:
  # 数据库类型,支持:mysql、kingbase_mysql、kingbase_pgsql、postgres
  Type: "mysql"
  # 根据实际数据库信息修改
  DNS: root:root123456@tcp(127.0.0.1:31006)/api_adapter_service?charset=utf8&parseTime=true&loc=Asia%2FShanghai
IDAConf:
  # 数据要素流通平台访问地址(根据实际部署情况改为机器ip)
  Url: "http://127.0.0.1:31085"
  # 密钥ID和密钥key从数据要素流通平台启动后api_manager_service数据库表api_datareport_secret的secret_id、secret_key字段获取
  # 密钥ID 
  SecretId: "xxxxxxxxxx"
  # 密钥key
  SecretKey: "xxxxxxxxxx"
6)启动adapter
在api-adapter-service/scripts目录,运行 start.sh 脚本,将会调用api-adapter-service/build/release/bin目录中的start.sh脚本,启动adapter进程。
➜ ./start.sh
# 查看进程是否存在
➜ ps -ef|grep adapter | grep -v grep
root      9893     1  0 15:03 pts/6    00:00:00 ./adapter -c ../config/adapter.yaml
# 查看端口是否监听
➜ lsof -i:8086 或  netstat -anp|grep 8086
COMMAND     PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
tcp6       0      0 :::8086                 :::*                    LISTEN      9893/./adapter
10.7. 服务列表
必选组件安装成功后,集群中会部署以下服务或组件:
| 服务/组件名称 | 说明 | 命名空间 | 部署类型 | Docker镜像名称 | K8S Service名称 | dataPath / logPath | 
|---|---|---|---|---|---|---|
| mysql | 公共服务-存储 | public | Deployment | mysql | mysql | /mnt/data/public/mysql (mysql存储目录) | 
| redis | 公共服务-缓存 | public | Deployment | redis | redis | /mnt/data/public/redis (redis存储目录) | 
| key | 公共服务-链密钥管理 | public | Deployment | public-key | key | /mnt/data/public/key/logs | 
| chain | 公共服务-链服务 | public | Deployment | public-chain | chain | /mnt/data/public/chain/logs | 
| certification | IDA-数据产品认证服务 | ida | Deployment | ida-certification | certification | /mnt/data/ida/certification/logs | 
| registration | IDA-数据产品登记服务 | ida | Deployment | ida-registration | registration | /mnt/data/ida/registration/logs | 
| gateway | IDA-网关 | ida | Deployment | ida-gateway | gateway | /mnt/data/ida/gateway/logs | 
| circulation | IDA-数据要素流通平台前端 | ida | Deployment | ida-circulation | circulation | /mnt/data/ida/circulation/logs | 
| api-manager | IDA-数据产品市场 | dpm | Deployment | api-manager | api-manager | /mnt/data/dpm/api-manager/logs | 
10.8. 部署验证
详细步骤请参考: 用户使用手册链接