实验指导-基于阿里云Serverless应用引l擎SAE的服务部署迀移
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1. 环境准备
- 1.1 开通Serverless应用引擎 SAE
- 1.2 代码准备
- 1.3 构建CokdeUp代码仓库
- 1.4 User-Admin服务数据库迁移
- 1.5 Device-Control服务数据库初始化
- 2. 基于SAE部署User Admin服务
- 2.1 创建Web应用并配置应用基本信息
- 2.2 基于SAE部署Device Control服务
- 总结
前言
1. 环境准备
1.1 开通Serverless应用引擎 SAE
开通Serverless应用引擎 SAE
可以这样理解SAE用来弄java,上传jar包,FC用来写python
1.2 代码准备
我们这里一共有两个服务,一个用户管理服务user_admin
一个设备管理服务
一个是java的,一个是python的
1.3 构建CokdeUp代码仓库
构建CokdeUp代码仓库
点击代码组,然后新建代码组
然后在代码组里面新建代码库
r然后把代码上传到仓库里面去
再打开user-admin的代码,修改application.yml文件(12~14行)中MySQL数据库配置为PolarDBMySQL的内网访
问地址及对应的用户名和密码。
以前是
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "publicKey"
但是Windows不认识~,这个表示当前用户目录所以
ssh-keygen -t ed25519 -f C:/Users/zjdsx/.ssh/id_ed25519 -C "publicKey"
#这样就在本地生成了ssh了
然后把Windows上生成的公钥放在这里
这样我们本地就可以git remote了
git init
git remote add origin ssh秘钥
git pull origin master
git add .
git commit -m "init"
git push -u origin master
修订数据库连接配置
打开user-admin的代码,修改application.yml文件(12~14行)中MySQL数据库配置为PolarDBMySQL的内网访
问地址及对应的用户名和密码。
直接把以前的127.0.0.1换为那个私网ip就可以了
打开device的代码,修改server-config.ini文件(1~5行)中MySQL数据库配置为PolarDBMySQL的内网访问地址
及对应的用户名和密码。修改完成后点击提交按钮。
打开device-control的代码库,修订callback_url字段(第8行)为cloudflow的内网触发地址。当边端设备
向Device-Control服务发送温湿度数据后,将回调该地址,触发工作流的运行。
内网触发地址在这里
1.4 User-Admin服务数据库迁移
在java文件里面,有一个db_user_admin.sql,初始化数据库
实验预设了一个分组:Administrator(管理员)。创建了张三、李四和王五三个用户,初始密码均为
oooooo,并为王五绑定Administrator分组。
进入DMS,创建数据库db_user_admin
然后点击常用功能,点击数据导入,选择批量数据导入
然后点击上传文件,把sql脚本弄进来就可以了,再提交申请
再点击执行变更
1.5 Device-Control服务数据库初始化
这个还是一样的操作,sql脚本在device文件里面
2. 基于SAE部署User Admin服务
2.1 创建Web应用并配置应用基本信息
注意我们数据库使用的VPC和交换机
因为VPC就是公共云里给用户隔离出来的私有网络
所有我们现在创建的这个SAE也必须和PolarDB一样的VPC,不然SAE里面配置的数据库是内网,如果不在一个局域网,是无法链接到数据库的
一定要命名好,不然只是看id根本不知道是什么意思
先创建一个命名空间,和云数据库一个VPC的
进入SAE控制台
点击应用列表,里面创建应用,我选择的是轻量版
选择代码包部署,把Windows本地的jar包上传过来,看到了吗,我们选择的都是和云数据库一样的VPC,交换机,安全组
注意选择JDK17
以前我们可以创建web应用,然后可以从代码仓库里面打包,但是现在不可以了,所以我们就从本地打包然后传上来吧
然后是点击下一步高级设置
什么都不用干
最后点击创建应用
很简单
点开日志看,发现成功了
变更也是成功的
点击基础信息里面的部署应用
但是怎么访问呢
基础信息里面找到应用访问设置,点击CLB访问
然后添加
然后添加公网ip访问,因为我们要用apifox访问的
然后就生成成功了
我们访问接口/l/a也就是登录操作
{"account": "zhangsan","password": "000000"
}
没有问题的,说明成功了
2.2 基于SAE部署Device Control服务
还是创建轻量版应用
应用名称为device-control
然后是设置代码包部署
上传的是zip文件,记得压缩一下,然后启动命令是
python server.py
然后直接创建应用
然后还是添加CLB的公网访问,端口号还是9000
[{"name": "温湿度设备","type": "null","sn": "SNTAH","passwd": "123456"}
]
http://xxxxxx:9000/devices
然后我们在提供一个python代码
python client.py ws://<your_sae_domian>/devices/auth/ws SNTAH 123456
然后执行这个命令
#第一个参数为Device-Control应用的地址(注意:不需要https://,只需要域名)
#第二个参数是前面步骤创建的设备sn
#第三个参数是该设备的密码
这个python代码的作用是
与Device-Control建立WebSocket连接。
并测试接口/devices/auth/ws,看数据库中存不存在sn为SNTAH ,密码为123456的数据,测试的还是device-control
说明我们都成功了
然后注意一点就是SAE中我们弄了CLB去访问
CLB是一种传统型的负载均衡,是要收费的
负载均衡控制台
可以去这里释放CLB,因为关闭了CLB还是会计费,只有释放了才不会计费
还要关闭SAE的服务,这个也是要计费的,这个只需要关闭就可以了,不用释放
然后这两个都是按照一个小时一个小时来计费得到
一定要停止,不然一直计费
还有一点值得注意的就是,我们在1.3的时候
打开device-control的代码库中server-config.ini,修订callback_url字段(第8行)为cloudflow的内网触发地址。当边端设备
向Device-Control服务发送温湿度数据后,将回调该地址,触发工作流的运行。
然后Device-Control里面的/devices/auth/ws中有一个东西,就是在查询数据库之后,身份验证成功之后,会调用ws_biz方法
ws_biz会发送请求resp = requests.post(biz_callback_url, json=report_data)
就是对biz_callback_url发送请求,json为report_data
report_data = {"sn": sn,"temperature": temperature,"humidity": humidity,}
所以我们还会触发工作流,所以还会有邮件的接收