# 核心服务部署文档 DID核心服务主要包含三个服务DID服务(did),DID-ADMIN服务(did-admin),网关服务(did-gateway)。 DID 服务主要实现DID核心逻辑提供gRPC接口; DID-ADMIN 服务主要实现管理员DID相关业务逻辑包含DID核心逻辑; 网关服务主要实现转发、代理相关请求和权限管理。 ## DID服务(did) ### 硬件配置 | 配置 | 最低配置 | 推荐 | |-----|-------|-------| | CPU | 1.5Hz | 2.4Hz | | 内存 | 8G | 16G | | 核心 | 4核 | 8核 | | 带宽 | 2Mb | 10Mb | ### 软件环境准备 | 软件 | 版本 | 描述 | |-----------|----------|-----| | k8s | v1.18+ | | | kubectl工具 | 与k8s集群匹配 | | | redis | v7.2+ | 缓存 | | mysql | v8+ | 数据库 | 数据库可选:人大金仓,postgresql等数据库 ### 安装物料 | 软件 | 描述 | |---------------------|---------| | did/etc | did配置文件 | | did/did.7z | 合约文件 | | did/deployment.yaml | k8s配置文件 | 下载[DID物料包](https://git.chainweaver.org.cn/chainweaver/did/did/-/tags/v1.1.0) 配置文件列表 ```shell did ├── deployment.yaml ├── did.7z └── etc ├── crypto-config │   ├── ca │   │   └── ca.crt │   ├── client1.key │   ├── client1.pem │   ├── client1.tls.crt │   └── client1.tls.key ├── did.yaml ├── sdk_config_pk.yml └── templates ├── 100000.json ├── 100001.json ├── 100002.json └── 100003.json ``` ### 配置did.yaml 需根据自身需要修改did/etc/did.yaml,如下所示: 隐私数据加密相关操作步骤参考:[附录:配置加密](../tech/00_配置加密.md) 配置签发机构的信息: ```yaml ... # 配置签发机构的信息 CNBN: # 签发机构DID DID: did:cndid:cndid # 密钥对,必须是国密 Crypto: PublicKey: "etc/crypto-config/client1.pem" PrivateKey: "etc/crypto-config/client1.key" # 对外暴露的地址 Service: - "http://192.168.1.181:30002/api/v1" ... ``` 数据库配置: > 在启动前需要提前创建对应数据库 > `CREATE DATABASE did;` ```yaml ... #DataSource: host=127.0.0。1 port=54321 user=system password=123456 dbname=did sslmode=disable client_encoding=UTF8 #Type: kingbase DataSource: root:passw0rd@tcp(127.0.0.1:6379)/did?parseTime=true&loc=Asia%2fShanghai Type: mysql # kingbase,mysql ... ``` Redis缓存配置: ```yaml ... # 缓存配置 RedisConf: Host: 127.0.0.1:6379 Pass: passw0rd ... ``` ### 部署步骤 #### 部署到Kubernetes集群 使用\`kubectl create\` 命令创建挂载的map文件: ```shell kubectl create cm did-configmap-yml --from-file=./etc/did.yaml --from-file=./etc/sdk_config_pk.yml --dry-run=client -o yaml > did-configmap-yml.yaml --insecure-skip-tls-verify kubectl create cm did-configmap-cnbn-key --from-file=./etc/crypto-config/client1.key --from-file=./etc/crypto-config/client1.pem --dry-run=client -o yaml > did-configmap-cnbn-key.yaml --insecure-skip-tls-verify kubectl create cm did-configmap-cnbn-key-ca --from-file=./etc/crypto-config/ca/ca.crt --dry-run=client -o yaml > did-configmap-cnbn-key-ca.yaml --insecure-skip-tls-verify kubectl create cm did-configmap-templates --from-file=./etc/templates --dry-run=client -o yaml > did-configmap-templates.yaml --insecure-skip-tls-verify ``` 使用\`kubectl apply\` 命令应用map文件: ```shell kubectl apply -f did-configmap-yml.yaml -n=did --insecure-skip-tls-verify kubectl apply -f did-configmap-cnbn-key.yaml -n=did --insecure-skip-tls-verify kubectl apply -f did-configmap-cnbn-key-ca.yaml -n=did --insecure-skip-tls-verify kubectl apply -f did-configmap-templates.yaml -n=did --insecure-skip-tls-verify ``` 使用\`kubectl apply\` 命令部署资源定义文件到Kubernetes集群: > 如果该步骤拉不到镜像请参考附录[kubectl操作指南](../tech/01_kubectl%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.md) ```shell kubectl apply --force --record -n=did -f deployment.yaml --insecure-skip-tls-verify ``` #### 验证部署检查Pod状态,确保DID服务已成功启动并运行 利用\`kubectl get\` 命令查看服务是否启动 ```shell kubectl get pod -n did | grep did ``` 返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例。 ```shell didXXXXX-XXX 1/1 Running 0 1d ``` 检查Service和Ingress资源配置,保外部访问路径和端口正确: ```shell kubectl get svc,ing -n did | grep did ``` 利用日志验证是否部署成功,日志会有如下输出: ``` did rpc server version: v1.0.0, name: did, git commit: 49416ff,git Branch: develop,build time: 2024-04-11T07:35:09Z ``` #### 拷贝document(链上已有合约忽略此步骤) 执行SQL语句,查询\`id = 'did:cndid:cndid'\` 的document内容: ```sql SELECT document FROM did WHERE id = 'did:cndid:cndid'; ``` #### 部署合约 did.7z(链上已有合约忽略此步骤) > 下载CMC命令:[v2.3.3版本发布页面](https://git.chainmaker.org.cn/chainmaker/chainmaker-go/-/releases/v2.3.3) > > 使用CMC命令:[长安链CMC工具(pk)](https://docs.chainmaker.org.cn/dev/%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7pk.html) 注意:`--contract-name`字段值需要和`did.yaml`中的`ChainMaker.ContractName`字段值一致 ``` ./cmc client contract user create --contract-name=did --runtime-type=DOCKER_GO \ --byte-code-path=./did.7z --version=1.0 --sdk-conf-path=./etc/sdk_config_pk.yml \ --gas-limit=999999999 --sync-result=true \ --params='{"didDocument":"XXX"}' ``` #### 重启did服务 ```shell kubectl rollout restart deployment -n did did ``` ## DID-ADMIN服务(did-admin) ### 硬件配置 | 配置 | 最低配置 | 推荐 | |-----|-------|-------| | CPU | 1.5Hz | 2.4Hz | | 内存 | 8G | 16G | | 核心 | 4核 | 8核 | | 带宽 | 2Mb | 10Mb | ### 软件环境准备 | 软件 | 版本 | 描述 | |-----------|----------|----| | k8s | v1.18+ | | | kubectl工具 | 与k8s集群匹配 | | ### 安装物料 | 软件 | 描述 | |---------------------------|---------------| | did-admin/etc | did-admin配置文件 | | did-admin/deployment.yaml | k8s配置文件 | 配置文件列表 ``` did-admin ├── deployment.yaml └── etc └── did-admin.yaml ``` ### 配置 #### 配置did-admin.yaml 需根据自身需要修改did-admin/etc/did-admin.yaml,如下所示: DID服务地址 ``` ... # did服务地址 GrpcTarget: did-service:17787 ... ``` ### 部署步骤 #### 进入到目录 ``` cd did-admin ``` #### 部署到Kubernetes集群 使用\`kubectl create\` 命令创建挂载的map文件: ``` kubectl create cm did-admin-configmap-yml --from-file=./etc/did-admin.yaml --dry-run=client -o yaml > did-admin-configmap-yml.yaml --insecure-skip-tls-verify ``` 使用\`kubectl apply\` 命令应用map文件: ``` kubectl apply -n=did -f did-admin-configmap-yml.yaml --insecure-skip-tls-verify ``` 使用\`kubectl apply\` 命令部署资源定义文件到Kubernetes集群: > 如果该步骤拉不到镜像请参考附录[kubectl操作指南](../tech/01_kubectl%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.md) ``` kubectl apply -n=did --force -f deployment.yaml --insecure-skip-tls-verify ``` #### 验证部署检查Pod状态,确保DID服务已成功启动并运行 利用\`kubectl get\` 命令查看服务是否启动 ``` kubectl get pod -n did | grep did-admin ``` 返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例。 ``` did-admin-XXXXX-XXX 1/1 Running 0 1d ``` 检查Service和Ingress资源配置,保外部访问路径和端口正确: ``` kubectl get svc,ing -n did | grep did-admin ``` 利用health接口验证是否部署成功(ip为k8s work的地址, host为端口号) ``` http://ip:host/api/v1/did/health ``` 结果如下: ``` {"code":200000,"msg":"操作成功","data":{"version":"v1.0.0","name":"did-admin","buildTime":"2024-04-11T08:13:36Z","gitCommit":"ec0cc7a","gitBranch":"develop","startTime":"2024-04-11T16:14:20+08:00","now":"2024-04-11T16:16:55+08:00"} ``` ## 网关服务(did-gateway) ### 硬件配置 | 配置 | 最低配置 | 推荐 | |-----|-------|-------| | CPU | 1.5Hz | 2.4Hz | | 内存 | 8G | 16G | | 核心 | 4核 | 8核 | | 带宽 | 2Mb | 10Mb | ### 软件环境准备 | 软件 | 版本 | 描述 | |-----------|----------|----| | k8s | v1.18+ | | | kubectl工具 | 与k8s集群匹配 | | ### 安装物料 | 软件 | 描述 | |-----------------------------|-----------------| | did-gateway/etc | did-gateway配置文件 | | did-gateway/deployment.yaml | k8s配置文件 | 配置文件列表 ``` did-gateway ├── deployment.yaml └── etc ├── did-gateway.yaml └── tls ├── server.crt ├── server.csr └── server.key ``` ### 配置 #### 配置did-gateway.yaml 需根据自身需要修改did-gateway/etc/did-gateway.yaml,如下所示: CA证书和密钥地址 ``` ... # Https CA证书 CertFile: ./etc/tls/server.crt # Https CA密钥 KeyFile: ./etc/tls/server.key ... ``` did-admin服务地址 ``` ... # cnbn服务地址 DIDAdmin: did-admin-service:17786 ... ``` ### 部署步骤 #### 进入到目录 ``` cd did-gateway ``` #### 部署到Kubernetes集群 使用\`kubectl create\` 命令创建挂载的map文件: ``` kubectl create cm did-gateway-configmap-yml --from-file=./etc/did-gateway.yaml --dry-run=client -o yaml > did-gateway-configmap-yml.yaml --insecure-skip-tls-verify kubectl create cm did-gateway-configmap-tls-key --from-file=./etc/tls/server.key --from-file=./etc/tls/server.crt --dry-run=client -o yaml > did-gateway-configmap-tls-key.yaml ``` 使用\`kubectl apply\` 命令应用map文件: ``` kubectl apply -n=did -f did-gateway-configmap-yml.yaml --insecure-skip-tls-verify kubectl apply -n=did -f did-gateway-configmap-tls-key.yaml --insecure-skip-tls-verify ``` 使用\`kubectl apply\` 命令部署资源定义文件到Kubernetes集群: > 如果该步骤拉不到镜像请参考附录[kubectl操作指南](../tech/01_kubectl%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97.md) ``` kubectl apply -n=did --force --record -f deployment.yaml --insecure-skip-tls-verify ``` #### 验证部署检查Pod状态,确保DID服务已成功启动并运行 利用\`kubectl get\` 命令查看服务是否启动 ``` kubectl get pod -n did | grep did-gateway ``` 返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例。 ``` did-gateway-XXXXX-XXX 1/1 Running 0 1d ``` 检查Service和Ingress资源配置,保外部访问路径和端口正确: ``` kubectl get svc,ing -n did | grep did-gateway ``` 利用health接口验证是否部署成功(ip为k8s work的地址,host为端口号) ``` https://ip:host/api/v1/did/health ``` 结果如下: ``` {"code":200000,"msg":"操作成功","data":{"version":"v1.0.0","name":"did-gateway","buildTime":"2024-04-11T07:09:18Z","gitCommit":"8263170","gitBranch":"develop","startTime":"2024-04-11T15:13:50+08:00","now":"2024-04-11T15:13:55+08:00"} ```