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