# 数据市场服务安装部署 ## 概述 数据产品市场基于k3s环境部署,提供yaml文件,用户可根据实际情况调整yaml文件。 ## 环境依赖 ### 硬件要求 | 配置 | 最低配置 | 推荐配置 | | ---- | -------- | -------- | | CPU | 1.5GHz | 2.4GHz | | 内存 | 16GB | 64GB | | 核心 | 8核 | 16核 | | 带宽 | 20Mb | 40Mb | ### 软件依赖 | 名称 | 版本 | 描述 | 是否必须 | |--------|----------| ---------------------------------------------------- | -------- | | docker | 24+ | 运行核心组件及服务 | 是 | | k3s | v1.21.4+ | 与 Kubernetes 集群进行交互和管理,管理核心组件及服务 | 是 | | 7z | / | 运行docker合约解压缩的依赖 | 是 | ## 获取物料包 请从开源仓库获取部署物料包:
https://git.chainweaver.org.cn/chainweaver/api-product/deploy-shell ## 基础环境安装 ### 安装docker 参考官网:https://docs.docker.com/engine/install/ 安装完成后,执行以下命令进行验证: ```shell ➜ ~ 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 ``` ### k3s集群部署 > 注:安装K3S前需要先完成Docker安装 下面以 `Linux`为例进行安装, 使用K3S安装脚本进行安装,具体步骤如下: ```shell # 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 ``` 安装完成后,等待一段时间后执行以下命令进行验证: ```shell ➜ ~ 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 ``` ## 部署长安链和智能合约 ### 部署长安链 数据要素流通平台依赖长安链(需要启用docker go VM),需要先部署长安链。如果已经部署长安链,可以跳过该步骤。 - 长安链提供了多种部署方式, 可以参考官方部署文档,如: [通过Docker部署链][通过Docker部署链] ### 安装智能合约 数据要素流通平台智能合约包括数据产品登记合约与数据产品市场合约两部分共三个合约: - 数据产品登记合约: `ida`合约 - 数据产品授权共享合约:`apiAuthContract`合约 - 数据产品共享对账合约:`apiReconciliation`合约 智能合约的部署方式与链的管理方式有关,一般有两种方式: - 通过管控台管理的链:合约可以通过管控台直接部署或升级 - 无管控台管理的链:合约需要通过命令行部署或升级 > 注:多个参与方分别部署数据要素流通平台时,合约也仅需部署一次,无需每个参与方分别部署。 下面以命令行部署为例: ```shell # 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 ``` ## 数据要素流通平台部署 ### 部署公共服务数据库组件 1)下载并安装数据库组件 ```shell # 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脚本 ``` 安装完成后,执行以下命令进行验证: ```shell # 查看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核心组件 ```shell # 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脚本 ``` 安装完成后,执行以下命令进行验证: ```shell # 查看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 ``` ### 部署数据产品市场组件 ```shell # 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脚本 ``` 安装完成后,执行以下命令进行验证: ```shell # 查看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 ➜ ~ ``` ### 适配器部署 如需使用适配器模式提供对外服务,需要部署适配器服务,否则可跳过此部分。 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路径中。 ```shell # 进入脚本目录 ➜ 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配置文件 ```shell 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进程。 ```shell ➜ ./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 ``` ## 服务列表 必选组件安装成功后,集群中会部署以下服务或组件: | 服务/组件名称 | 说明 | 命名空间 | 部署类型 | 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 | ## 部署验证 详细步骤请参考: [用户使用手册链接](./02_用户使用说明.md) [通过Docker部署链]: https://docs.chainmaker.org.cn/v3.0.0/html/instructions/%E5%90%AF%E5%8A%A8%E6%94%AF%E6%8C%81Docker_VM%E7%9A%84%E9%93%BE.html [数据要素登记服务部署脚本]: https://git.chainweaver.org.cn/ChainWeaver/ida/gateway [用户证书]: https://docs.chainmaker.org.cn/v3.0.0/html/instructions/%E5%90%AF%E5%8A%A8%E6%94%AF%E6%8C%81Docker_VM%E7%9A%84%E9%93%BE.html#id11 [用户登录]: https://chainweaver.org.cn/dataCirculation/02_%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.html#id11 [配置链账户]: https://chainweaver.org.cn/dataCirculation/02_%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.html#id28