如何在不停机的情况下将更改部署到生产中(通用托管)?

2024-03-02

在不停机的情况下部署从开发到生产的更改(例如某些内容类型模型中的更改)的推荐方法是什么?

我正在使用这个设置。

我有带有开发 postgres 数据库的开发实例。 在生产中,我有 3 个 Strapi 实例(同时服务 api 和 admin,使用相同的生产 postgres 数据库),这些实例位于负载均衡器后面。

假设我的内容类型名为:文章(在开发中和在生产中部署)。 假设我想更改该内容类型,例如我想在文章内容类型中添加一些字段并删除一些字段。

如何在不停机的情况下将变更部署到生产中?

我已经做了一些测试,例如,当我更新 Strapi Production Instance #1 以提取更新模型的新代码时,strapi 当然会更新数据库。从那时起,Strapi 生产实例 #2 和 #3 在服务管理面板时出现问题(JavaScript 错误,因为数据库已更改,但 JS 模型文件未更新)。 在我更新实例 #2 和 #3 上的代码后,一切都按预期工作。

但在“工作产品”上做这样的事情将被视为停机。

遇到这种情况该如何正确处理呢?感谢帮助!


我决定将此作为答案发布,因为感觉评论太长了。

我正在考虑类似的设置,并且由于 Strapi 在 stratup 上更新数据库,我认为没有停机时间就没有办法做到这一点(或者接受 #2 和 #3 显示错误,直到它们更新)。

供考虑的其他(不太好的)想法列表:

  • 在使用该 Strapi 后端的前端以及 Strapi 管理面板中引入一个老式的“停机维护”页面
  • 在部署期间从平衡器中取出#2和#3,部署到#1,更新数据库,部署到#2和#3,然后将#2和#3带回平衡器。这在很大程度上取决于平衡器。如果所有最终用户不点击 #2 和 #,效果会立即生效吗?或者他们还会因为一些 TTL 而排名第二和第三吗?
  • 改进 Strapi 实现(或创建某种插件/中间件),以便 API 可以与过时的模型正常工作 - 如果您保持数据库更改向后兼容,这应该可以工作
  • 改进 Strapi 实现,使其不更新 stratup 上的数据库。理想情况下,管理模型和数据库模式应单独编辑。管理面板必须能够使用具有“附加”字段的数据库。所以例如首先向数据库添加新字段,然后部署管理面板。删除字段时,我们首先从管理模型中删除字段,然后部署到产品(数据库未更新),当所有环境都更新时 - 然后更新数据库(删除字段)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不停机的情况下将更改部署到生产中(通用托管)? 的相关文章

随机推荐