8. APP部署文档
8.1. 后端 k8s部署方式
8.1.1. 软件和环境准备
- 软件依赖 
| 软件 | 版本 | 描述 | 
|---|---|---|
| docker | 18+ | docker容器服务 | 
| docker-compose | v1.26+ | |
| redis集群 | 7.2+ | |
| mysql | V8+ | mysql数据库 | 
| 可访问的Docker镜像服务 | - | 存储镜像 | 
- 硬件依赖 
| 配置 | 最低配置 | 推荐配置 | 
|---|---|---|
| CPU | 1.5GHz | 2.4GHz | 
| 内存 | 8GB | 16GB | 
| 核心 | 4核 | 8核 | 
| 带宽 | 2Mb | 10Mb | 
8.1.1.1. Kubernetes集群
- 确保已有一个运行中的Kubernetes集群,版本建议为v1.18或更高。 
- 已安装并配置 - kubectl命令行工具,用于与Kubernetes集群交互
8.1.1.2. Docker镜像仓库
- 项目方准备一个公网可访问的Docker镜像仓库,用于存储“DID APP后台”微服务的镜像。在后续运行部署流程时会自动拉取。 
- 如果Kubernetes所在环境无法访问互联网,需要手动载入Docker镜像到Kubernetes的Worker节点。载入命令在物料包中,执行以下流程: 
# did-app-backend-cc95b9d69-djk2f
  docker pull hub-dev.cnbn.org.cn/opennet/did-app-backend:v1.1.0
  docker save did-app-backend-v1.1.0.tar hub-dev.cnbn.org.cn/opennet/did-app-backend:v1.1.0
# 上传文件 did-app-backend-v1.1.0.tar 到服务器
  docker load -i did-app-backend-v1.1.0.tar
8.1.2. 部署流程
- 下载部署仓库: https://git.chainweaver.org.cn/chainweaver/did/did-app-backend 
- 在下载的仓库的k8s目录下,即是k8s的部署did-app-backend-deployment.yaml,该文件是服务的部署文件,也是did-app-backend-configmap配置文件 
【注意:DID APP后台服务在启动时会自动连接数据库并创建对应的表,在配置数据库连接字符串时,请确保数据库已经创建,而且账号具有在该数据库中创建表的DDL权限】
8.1.2.1. 根据实际需要修改ConfigMap
在实际项目使用中可能会存在测试环境、预生产环境、生产环境等多套环境,请根据实际环境的需求调整ConfigMap中的参数。如复制份数、日志输出等。
8.1.2.2. 修改did-app-backend-configmap
修改did-app-backend-deployment.yaml中的ConfigMap配置(以下是一些关键的配置描述):
- mysql:改为实际的数据库的服务配置 
  mysql:
      #数据库类型,例如mysql、kingbase
      db_type: "mysql"
      #数据库服务登录信息
      dsn: root:passw0rd@tcp(192.168.1.35:3311)/did_app_manage?charset=utf8&parseTime=True&loc=Local
      max_idle_conns: 10
      max_open_conns: 100
      time_out: 20
- email_auth_code:改为实际发邮件的服务配置 
  email_auth_code:
      #邮箱服务配置
      host: "xxx"
      #邮箱服务端口
      port: 11465
      #邮箱服务账号
      username: "xxx"
      #邮箱服务密码
      passwd: "xxx"
      #邮箱服务发件人
      from: "xxx"
      #邮箱验证码有效期
      expiration_time: 300
      #邮箱验证码发送间隔
      send_time: 60
      #邮箱验证码长度
      size: 6
- auth_code:改为实际下发短信的服务配置 
  # 腾讯云下发短信信息
    auth_code:
      # 腾讯云短信服务配置,一般是sms.tencentcloudapi.com
      domain: xxx
      # 腾讯云短信服务代理地址,如果是内网无法连接互联网,可以设置代理地址
      proxy: ""
      # 腾讯云短信服务密钥id
      secret_id: xxx
      # 腾讯云短信服务密钥
      secret_key: xxx
      # 短信验证码有效期
      expiration_time: 300
      # 短信验证码发送间隔
      send_time: 60
      # 短信验证码长度
      size: 6
      # 短信模板(腾讯云短信服务申请的模版)
      template:
        # 通用模板您正在操作xxx,验证码为: {1},请于5分钟内填写,如非本人操作,请忽略本短信。
        default: xxx
        # 邀请码短信:
        #您的同事(手机号:{1})已在「xxx平台」创建了企业账号,并将您设置为{2},请登录账号,选择「认领新的管理员身份」。 登录手机号:{3} 登录密码 :{4}
        invitation: xxx
      # 腾讯云短信服务appid
      app_id: xxx
      # 短信发送者(可配置成如xxx平台)
      sign_name: xxx
- RedisConf:改为实际缓存数据库的服务配置 
  RedisConf:
    # redis模式,如node、cluster
    Type: node
    # redis地址
    Host: 192.168.3.170:16379
    # redis密码
    Pass: passw0rd
- did:改为实际DID gateway服务地址配置 
- auth_service:电子营业执照调用参数配置 
  auth_service:
      # 是否开启mock.
      # false: 真实调用
      # true: mock调用
      mock: true
      # 电子营业执照服务地址
      url: xxx
      # 如果是内网无法连接互联网,可以设置代理地址
      proxy: ""
      # 电子营业执照服务sys code
      sys_code: xxx
      # 电子营业执照服务auth code
      auth_code: xxx
      # 暂时不需要,任意配置即可
      sign: xxx
      # 版本,目前配置为1
      version: 1
8.1.2.3. 部署到Kubernetes集群
- 使用 - kubectl apply命令部署资源定义文件到Kubernetes集群:
  kubectl apply -f did-app-backend-deployment.yaml
8.1.2.4. 验证部署检查Pod状态,确保DID APP后台微服务已成功启动并运行
- 利用 - kubectl get命令查看服务是否启动
  kubectl get pod -n did| grep did-app
返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例:
  did-app-XXXXX-XXX      1/1     Running   0               1d
检查Service和Ingress资源配置,保外部访问路径和端口正确:
kubectl get svc,ing -n did| grep did-app
- 利用health接口验证是否部署成功(ip为k8s work的地址,host为端口号) 
curl -X GET https://ip:host/api/v1/did-app/health
返回结果如下,表示部署成功:
{"code":200000,"msg":"操作成功","data":{"version":"v1.0.0","app_chinese_name":"航运贸易app","didIssuer":"did:cndid:cndid","personAuthEnable":false,"downloadLink":"https://zxchain-wallet-1258344699.cos.ap11.apk"}}
8.2. APP
8.2.1. 简介
航运贸易APP是一款使用flutter构建的移动端APP,在运行源码前需要安装并下载flutter相关SDK。
flutter 开发文档:https://docs.flutter.dev/
8.2.2. 准备工作
- 按照官方文档提示安装flutter并完成相关设置。 
- 由于本app目前仅支持Android,所以可以忽略IOS相关配置。 
- 推荐使用VSCode编辑器,需安装flutter和dart相关插件。 
8.2.3. SDK版本要求:
| SDK | 版本号 | 
|---|---|
| Flutter SDK | >= 3.22.2 | 
| Dart SDK | >=3.3.0 <4.0.0 | 
| Android SDK | >= 34.0.0 | 
以上版本供参考,可根据官方文档提示适当升级。
8.2.4. 源码下载和运行
- 源码地址:https://git.chainweaver.org.cn/chainweaver/did/did-app-front 。 
- 源码下载完成后可用VSCode打开。 
- 运行以下命令安装依赖: 
 flutter pub get
- 点击VSCode左侧【运行和调试】按钮启动项目。 
8.2.5. 修改配置文件
- 配置文件地址: - lib/utils/const/const.dart;
- 配置解释: 
 static String env = 'dev'; //修改此处env变量,改变app运行环境
  static dynamic byEnv({dynamic dev, dynamic preview, dynamic production}) {
    return env == 'dev' ? dev : (env == 'preview' ? preview : production);
  }
  //设置服务地址
  //app的后端服务
  static String didAppBaseUrl = byEnv(
      dev: "http://dev.com", //开发环境
      preview: 'https://preview.cn', //预览环境
      production:
          'https://production.cn' //生产环境
      );
  //存证后端服务
  static String didAuthAppBaseUrl = byEnv(
      //存证2的公共存证的测试环境的访问方式
      dev: "http://192.168.1.135:8280",
      preview: 'https://tdh-api-pre.cnbn.org.cn',
      production: 'https://tdh-api.cnbn.org.cn:19981');
8.2.6. 准备证书
- 准备有效的Android证书 
- 使用debug启动模式(即直接使用VSCode进行编译)可以不用证书,注释下方代码中debug配置即可,配置文件地址: - android/app/build.gradle:
    signingConfigs{
        release { //配置证书
            storeFile file("cdid.android.keystore")
            storePassword "chainmaker"
            keyPassword "chainmaker"
            keyAlias "cdid"
        }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            minifyEnabled true
            proguardFiles '../proguard-rules.pro'
            shrinkResources true
        }
        //没有证书,运行debug模式删除此配置即可
        debug {
            signingConfig signingConfigs.release
        }
    }
8.2.7. 编译和安装
- 编译:在根目录下执行以下命令: 
flutter build apk --obfuscate --split-debug-info=./split_debug_info.
- 编译完成后,在 - /build/app/outputs/flutter-apk目录下会生成名为- app-release.apk的文件。
- 安装:安装此apk。 
8.2.8. 调试模式
- 启动调试模式:app安装完成后打开,在开屏页多次点击【欢迎使用】文字,进入项目后,浮动展示 - bug图标,表示进入了调试模式。
- 点击 - bug图标可以查看当前的请求及错误日志等信息。