公司采用工控机整机交付客户。机器上运行 jar 包+Mysql 数据库+web 应用。机器能访问外网。 如何更新这些应用? 目前考虑采用 shell 更新。更新 jar->更新数据库结构->启用 jar->更新 web 。 但是万一 jar 更新失败或者启动失败,需要回滚数据库及 web 。也无法保证回滚成功。 对这种问题,市面上有什么现成的解决方案吗?
1
qfdk 2022-04-01 14:15:29 +08:00 via iPhone
哈哈哈 shell 更新….
|
2
letitbesqzr 2022-04-01 14:50:23 +08:00
打包成 docker ,方案就比较多了..
|
3
wxy1991 2022-04-01 16:04:43 +08:00
你们公司没有测试吗。。。
|
4
chengyiqun 2022-04-01 17:31:27 +08:00
没有测试环境?
|
5
LoNeFong 2022-04-01 18:20:17 +08:00
准备数据库 up down 脚本 出问题好及时回滚
工控机安装 docker 也不现实 看来只能 scp 了 |
6
zhongjun96 OP @wxy1991 测试归测试啊,毕竟机器不在我们这边,啥情况都有可能。肯定要考虑启动失败的情况
|
7
zhongjun96 OP @LoNeFong scp 也不太可能,没有公网 ip ,也不允许外网映射。所以只能程序自己检测并自动更新
|
8
tuboshuv1 2022-04-01 21:21:47 +08:00
其实保证数据库更新不出错就可以了。应用开始更新的时候,就给中央服务器发通知,执行状态什么的。然后每走一步就仔细校验,错了立马暂停。这种情况的更新不可能没人值守的
|
9
anyele 2022-04-01 23:56:14 +08:00
难点是数据库更新, 要保留回滚的措施
|
10
night98 2022-04-02 01:14:01 +08:00
linux cron 每天晚上 3 点定期拉取 docker hub latest 镜像并重启,java 服务打包成 docker 镜像,内置一下 flyway ,最好买个 flyway 的授权
|
11
zhongjun96 OP @night98 工控机不能装 docker 。内存不够。
|
12
zzh7982 2022-04-02 10:02:11 +08:00
@zhongjun96 内存不够那为啥用 java 不用 go 呢
|
13
zhongjun96 OP @zzh7982 因为我不会 go
|
14
zzh7982 2022-04-02 11:09:31 +08:00
@zhongjun96 学啊
|
15
zzh7982 2022-04-02 11:10:23 +08:00
@zhongjun96 好像你 java 多会一样( dog
|
16
aptupdate 2022-04-02 11:32:18 +08:00
机器多大内存? docker 自身不会占用很多内存的。
|
17
gitdoit 2022-04-02 11:37:06 +08:00
别更表了, 直接建新库, 在新库上更新表结构,同步数据; 执行成功了 把数据源切过去
|
18
sky857412 2022-04-02 12:02:19 +08:00
你需要再写一个监控程序,负责更新。监控程序,集成 web shell 的功能,让客户再给你们开个跳板机,做运维。这样虽然麻烦一点,但是靠谱一点
|
19
AItsuki 2022-04-02 12:56:23 +08:00 via Android
建议还是上 Docker ,并且用 compose 配置,占不了多少内存的,java 你可以选择使用 openj9 版本。
|
20
zhongjun96 OP @aptupdate 只有 4G 。还要装 mysql ,nginx
|
21
git00ll 2022-04-02 19:07:41 +08:00
写代码时,尽量保证数据库兼容性。
如加字段这种可以兼容的改动,失败代码回滚后不影响。 如修改字段,删除字段这种改动,可分多次代码迭代实现,如增加字段取代旧的,然后再删除旧的。 |
22
night98 2022-04-02 22:00:40 +08:00
4G 内存够够的,java1g ,mysql1g ,nginx0.5g ,完美
|