寻找一个 Java 应用本地更新方案

2022 年 4 月 1 日
 qjbcnrs

公司采用工控机整机交付客户。机器上运行 jar 包+Mysql 数据库+web 应用。机器能访问外网。 如何更新这些应用? 目前考虑采用 shell 更新。更新 jar->更新数据库结构->启用 jar->更新 web 。 但是万一 jar 更新失败或者启动失败,需要回滚数据库及 web 。也无法保证回滚成功。 对这种问题,市面上有什么现成的解决方案吗?

2684 次点击
所在节点    程序员
22 条回复
qfdk
2022 年 4 月 1 日
哈哈哈 shell 更新….
letitbesqzr
2022 年 4 月 1 日
打包成 docker ,方案就比较多了..
wxy1991
2022 年 4 月 1 日
你们公司没有测试吗。。。
C02TobNClov1Dz56
2022 年 4 月 1 日
没有测试环境?
LoNeFong
2022 年 4 月 1 日
准备数据库 up down 脚本 出问题好及时回滚
工控机安装 docker 也不现实 看来只能 scp 了
qjbcnrs
2022 年 4 月 1 日
@wxy1991 测试归测试啊,毕竟机器不在我们这边,啥情况都有可能。肯定要考虑启动失败的情况
qjbcnrs
2022 年 4 月 1 日
@LoNeFong scp 也不太可能,没有公网 ip ,也不允许外网映射。所以只能程序自己检测并自动更新
tuboshuv1
2022 年 4 月 1 日
其实保证数据库更新不出错就可以了。应用开始更新的时候,就给中央服务器发通知,执行状态什么的。然后每走一步就仔细校验,错了立马暂停。这种情况的更新不可能没人值守的
anyele
2022 年 4 月 1 日
难点是数据库更新, 要保留回滚的措施
night98
2022 年 4 月 2 日
linux cron 每天晚上 3 点定期拉取 docker hub latest 镜像并重启,java 服务打包成 docker 镜像,内置一下 flyway ,最好买个 flyway 的授权
qjbcnrs
2022 年 4 月 2 日
@night98 工控机不能装 docker 。内存不够。
zzh7982
2022 年 4 月 2 日
@zhongjun96 内存不够那为啥用 java 不用 go 呢
qjbcnrs
2022 年 4 月 2 日
@zzh7982 因为我不会 go
zzh7982
2022 年 4 月 2 日
@zhongjun96 学啊
zzh7982
2022 年 4 月 2 日
@zhongjun96 好像你 java 多会一样( dog
aptupdate
2022 年 4 月 2 日
机器多大内存? docker 自身不会占用很多内存的。
gitdoit
2022 年 4 月 2 日
别更表了, 直接建新库, 在新库上更新表结构,同步数据; 执行成功了 把数据源切过去
sky857412
2022 年 4 月 2 日
你需要再写一个监控程序,负责更新。监控程序,集成 web shell 的功能,让客户再给你们开个跳板机,做运维。这样虽然麻烦一点,但是靠谱一点
AItsuki
2022 年 4 月 2 日
建议还是上 Docker ,并且用 compose 配置,占不了多少内存的,java 你可以选择使用 openj9 版本。
qjbcnrs
2022 年 4 月 2 日
@aptupdate 只有 4G 。还要装 mysql ,nginx

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX