# APP部署文档 ## 后端 k8s部署方式 ### 软件和环境准备 - 软件依赖 | 软件 | 版本 | 描述 | |:---------------|:------:|:-----------| | 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 | #### Kubernetes集群 - 确保已有一个运行中的Kubernetes集群,版本建议为v1.18或更高。 - 已安装并配置`kubectl`命令行工具,用于与Kubernetes集群交互 #### Docker镜像仓库 - 项目方准备一个公网可访问的Docker镜像仓库,用于存储“DID APP后台”微服务的镜像。在后续运行部署流程时会自动拉取。 - 如果Kubernetes所在环境无法访问互联网,需要手动载入Docker镜像到Kubernetes的Worker节点。载入命令在物料包中,执行以下流程: ```shell # 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 ``` ### 部署流程 - 下载部署仓库: https://git.chainweaver.org.cn/chainweaver/did/did-app-backend - 在下载的仓库的k8s目录下,即是k8s的部署did-app-backend-deployment.yaml,该文件是服务的部署文件,也是did-app-backend-configmap配置文件 【注意:DID APP后台服务在启动时会自动连接数据库并创建对应的表,在配置数据库连接字符串时,请确保数据库已经创建,而且账号具有在该数据库中创建表的DDL权限】 #### 根据实际需要修改ConfigMap 在实际项目使用中可能会存在测试环境、预生产环境、生产环境等多套环境,请根据实际环境的需求调整ConfigMap中的参数。如复制份数、日志输出等。 #### 修改did-app-backend-configmap 修改did-app-backend-deployment.yaml中的ConfigMap配置(以下是一些关键的配置描述): - mysql:改为实际的数据库的服务配置 ```shell 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:改为实际发邮件的服务配置 ```shell email_auth_code: #邮箱服务配置 host: "xxx" #邮箱服务端口 port: 11465 #邮箱服务账号 username: "xxx" #邮箱服务密码 passwd: "xxx" #邮箱服务发件人 from: "xxx" #邮箱验证码有效期 expiration_time: 300 #邮箱验证码发送间隔 send_time: 60 #邮箱验证码长度 size: 6 ``` - auth_code:改为实际下发短信的服务配置 ```shell # 腾讯云下发短信信息 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:改为实际缓存数据库的服务配置 ```shell RedisConf: # redis模式,如node、cluster Type: node # redis地址 Host: 192.168.3.170:16379 # redis密码 Pass: passw0rd ``` - did:改为实际DID gateway服务地址配置 - auth_service:电子营业执照调用参数配置 ```shell 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 ``` #### 部署到Kubernetes集群 - 使用`kubectl apply`命令部署资源定义文件到Kubernetes集群: ```shell kubectl apply -f did-app-backend-deployment.yaml ``` #### 验证部署检查Pod状态,确保DID APP后台微服务已成功启动并运行 - 利用`kubectl get` 命令查看服务是否启动 ```shell kubectl get pod -n did| grep did-app ``` 返回结果如下,1/1则表示微服务有一个实例,启动成功1个pod实例,如果是2/2则表示有两个实例,启动成功了2个pod实例: ```shell did-app-XXXXX-XXX 1/1 Running 0 1d ``` 检查Service和Ingress资源配置,保外部访问路径和端口正确: ```shell kubectl get svc,ing -n did| grep did-app ``` - 利用health接口验证是否部署成功(ip为k8s work的地址,host为端口号) ```shell curl -X GET https://ip:host/api/v1/did-app/health ``` 返回结果如下,表示部署成功: ```shell {"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"}} ``` ## APP ### 简介 航运贸易APP是一款使用flutter构建的移动端APP,在运行源码前需要安装并下载flutter相关SDK。 > flutter 开发文档:https://docs.flutter.dev/ ### 准备工作 - 按照官方文档提示安装flutter并完成相关设置。 - 由于本app目前仅支持Android,所以可以忽略IOS相关配置。 - 推荐使用VSCode编辑器,需安装flutter和dart相关插件。 ### SDK版本要求: | SDK | 版本号 | |--------|-----| | Flutter SDK | >= 3.22.2 | | Dart SDK | >=3.3.0 <4.0.0 | | Android SDK | >= 34.0.0 | 以上版本供参考,可根据官方文档提示适当升级。 ### 源码下载和运行 - 源码地址:https://git.chainweaver.org.cn/chainweaver/did/did-app-front 。 - 源码下载完成后可用VSCode打开。 - 运行以下命令安装依赖: ```shell flutter pub get ``` - 点击VSCode左侧【运行和调试】按钮启动项目。 ### 修改配置文件 - 配置文件地址:`lib/utils/const/const.dart`; - 配置解释: ```shell 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'); ``` ### 准备证书 - 准备有效的Android证书 - 使用debug启动模式(即直接使用VSCode进行编译)可以不用证书,注释下方代码中debug配置即可,配置文件地址:`android/app/build.gradle`: ```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 } } ``` ### 编译和安装 - 编译:在根目录下执行以下命令: ```shell flutter build apk --obfuscate --split-debug-info=./split_debug_info. ``` - 编译完成后,在`/build/app/outputs/flutter-apk`目录下会生成名为`app-release.apk`的文件。 - 安装:安装此apk。 ### 调试模式 - 启动调试模式:app安装完成后打开,在开屏页多次点击【欢迎使用】文字,进入项目后,浮动展示`bug`图标,表示进入了调试模式。 - 点击`bug`图标可以查看当前的请求及错误日志等信息。