6. 核心服务部署文档
DID核心服务主要包含三个服务DID服务(did),DID-ADMIN服务(did-admin),网关服务(did-gateway)。
DID 服务主要实现DID核心逻辑提供gRPC接口;
DID-ADMIN 服务主要实现管理员DID相关业务逻辑包含DID核心逻辑;
网关服务主要实现转发、代理相关请求和权限管理。
6.1. DID服务(did)
6.1.1. 硬件配置
| 配置 | 最低配置 | 推荐 | 
|---|---|---|
| CPU | 1.5Hz | 2.4Hz | 
| 内存 | 8G | 16G | 
| 核心 | 4核 | 8核 | 
| 带宽 | 2Mb | 10Mb | 
6.1.2. 软件环境准备
| 软件 | 版本 | 描述 | 
|---|---|---|
| k8s | v1.18+ | |
| kubectl工具 | 与k8s集群匹配 | |
| redis | v7.2+ | 缓存 | 
| mysql | v8+ | 数据库 | 
数据库可选:人大金仓,postgresql等数据库
6.1.3. 安装物料
| 软件 | 描述 | 
|---|---|
| did/etc | did配置文件 | 
| did/did.7z | 合约文件 | 
| did/deployment.yaml | k8s配置文件 | 
下载DID物料包
配置文件列表
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
6.1.4. 配置did.yaml
需根据自身需要修改did/etc/did.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;
...
#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缓存配置:
...
# 缓存配置
RedisConf:
  Host: 127.0.0.1:6379
  Pass: passw0rd
...
6.1.5. 部署步骤
6.1.5.1. 部署到Kubernetes集群
使用`kubectl create` 命令创建挂载的map文件:
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文件:
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操作指南
kubectl apply --force --record -n=did -f deployment.yaml --insecure-skip-tls-verify
6.1.5.2. 验证部署检查Pod状态,确保DID服务已成功启动并运行
利用`kubectl get` 命令查看服务是否启动
kubectl get pod  -n did | grep did
返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例。
didXXXXX-XXX      1/1     Running   0               1d
检查Service和Ingress资源配置,保外部访问路径和端口正确:
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
6.1.5.3. 拷贝document(链上已有合约忽略此步骤)
执行SQL语句,查询`id = ‘did:cndid:cndid’` 的document内容:
SELECT document
FROM did
WHERE id = 'did:cndid:cndid';
6.1.5.4. 部署合约 did.7z(链上已有合约忽略此步骤)
下载CMC命令:v2.3.3版本发布页面
使用CMC命令:长安链CMC工具(pk)
注意:--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"}'
6.1.5.5. 重启did服务
kubectl rollout restart deployment -n did did
6.2. DID-ADMIN服务(did-admin)
6.2.1. 硬件配置
| 配置 | 最低配置 | 推荐 | 
|---|---|---|
| CPU | 1.5Hz | 2.4Hz | 
| 内存 | 8G | 16G | 
| 核心 | 4核 | 8核 | 
| 带宽 | 2Mb | 10Mb | 
6.2.2. 软件环境准备
| 软件 | 版本 | 描述 | 
|---|---|---|
| k8s | v1.18+ | |
| kubectl工具 | 与k8s集群匹配 | 
6.2.3. 安装物料
| 软件 | 描述 | 
|---|---|
| did-admin/etc | did-admin配置文件 | 
| did-admin/deployment.yaml | k8s配置文件 | 
配置文件列表
did-admin
├── deployment.yaml
└── etc
    └── did-admin.yaml
6.2.4. 配置
6.2.4.1. 配置did-admin.yaml
需根据自身需要修改did-admin/etc/did-admin.yaml,如下所示:
DID服务地址
...
# did服务地址
GrpcTarget: did-service:17787
...
6.2.5. 部署步骤
6.2.5.1. 进入到目录
cd did-admin
6.2.5.2. 部署到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操作指南
kubectl apply -n=did --force -f deployment.yaml --insecure-skip-tls-verify
6.2.5.3. 验证部署检查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"}
6.3. 网关服务(did-gateway)
6.3.1. 硬件配置
| 配置 | 最低配置 | 推荐 | 
|---|---|---|
| CPU | 1.5Hz | 2.4Hz | 
| 内存 | 8G | 16G | 
| 核心 | 4核 | 8核 | 
| 带宽 | 2Mb | 10Mb | 
6.3.2. 软件环境准备
| 软件 | 版本 | 描述 | 
|---|---|---|
| k8s | v1.18+ | |
| kubectl工具 | 与k8s集群匹配 | 
6.3.3. 安装物料
| 软件 | 描述 | 
|---|---|
| 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
6.3.4. 配置
6.3.4.1. 配置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
...
6.3.5. 部署步骤
6.3.5.1. 进入到目录
cd did-gateway
6.3.5.2. 部署到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操作指南
kubectl apply -n=did --force --record -f deployment.yaml --insecure-skip-tls-verify
6.3.5.3. 验证部署检查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"}