在 Angular、PHP API 和 Ansible 项目中如何实现持续部署

160次阅读
没有评论

问题描述

正在开发一个 Angular2 项目,使用 Yii2(PHP/MySQL)作为其 API 端点。他们希望为不同的客户部署不同语言的 Angular 应用(使用 angular-cli 进行 AOT 编译)。用户想知道如何实现这个需求,他们正在考虑使用 Docker 或 Ansible(容器化)来完成。然而,现有的示例主要是针对 1:1 的部署设置,而用户需要实现 1:n 的部署,例如:

deploy app-de new_costomer prod_server

此外,当有新版本的应用程序可用时,用户希望通过一条命令更新整个网络中的所有应用程序(这需要上传 AOT 编译的 src/ 文件夹以及在 Yii2 端运行的数据库迁移脚本)。
理想情况下,用户希望能够执行以下命令:

deploy update network-all prod_server

用户希望为每个客户都创建一个容器(使用 Docker 和 Ansible-Container)。每个容器中都包含了 AOT 编译的 Angular 代码(仅为 JS)以及带有 MySQL 的 PHP 后端。
每个客户都在一个服务器上部署这个设置(例如,3个客户=3个包含 Angular + PHP + MySQL 的 Docker 容器)。
用户经常推送 Angular 和 PHP 的更新(例如,需要上传整个 DIST 文件夹或差异文件,运行 PHP/MySQL 后端的迁移脚本等)。
用户希望通过一条命令完成所有这些操作,而不必手动 SSH 进入每个容器。
由于用户以前没有做过这种设置,他们希望得到一些使用 Ansible(或类似工具)实现这个需求的想法。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

假设您的情况如下:您有许多客户,但大多数客户使用的是相同的应用程序,只有一些配置更改。您希望每个客户尽快获得最新的应用程序。
如果这是您的情况,那么尝试将所有需要在应用程序之间区分的内容作为配置更改。您构建一个(或一组)Docker 容器,根据给定的配置可以处理任何客户。然后在部署时,为每个客户提供适当的配置。
这种方法的好处是,当有新客户加入时,您不会产生大量的开销。您只需生成他们的配置,创建新的服务器,将一些条目添加到清单文件中,下次部署时,它们也会被部署。如果您的持续部署流程设置得足够好,您可以自动化这个过程。
下面是这种方法的一般流程:
1. 您有一个可以为所有客户提供服务的应用程序代码库。
2. 您为应用程序构建 Docker 容器(一个用于前端,一个用于后端,可能还有一些支持性的容器)。
3. 您有一个部署脚本,使用配置文件来确定在哪里部署以及部署什么。
4. 您运行此部署脚本。它将遍历所有客户,并根据适当的配置部署最新版本的应用程序。
如果您有一个新客户,您只需要更改部署配置文件。如果您使用的是 Ansible,您可能需要更改清单文件和变量文件。假设您获得了一个新客户,该客户希望应用程序在西班牙语环境下运行,并且可以访问 beta 功能。该客户的配置可能如下所示:

config.js:SETTINGS = { locale: 'es', beta: true };
config.php:define('CUSTOMER_LOCALE','es');
define('CUSTOMER_BETA','true');

然后,您需要确保在部署时将这些文件挂载到容器中。

方案2

将每个关注点(前端、后端、数据库等)分别放入独立的容器中,以便可以独立部署和扩展,虽然这不是强制性的,但通常是一个很好的做法。
另一种方法是将每个关注点(前端、后端、数据库等)分别放入独立的容器中,以便可以独立部署和扩展。

总结

在 Angular、PHP API 和 Ansible 项目中实现持续部署的方法有很多。您可以根据您的具体需求选择适合您的方法。方案1建议将所有需要在应用程序之间区分的内容作为配置更改,并使用一个通用的容器来处理所有客户。方案2建议将每个关注点放入独立的容器中,以便可以独立部署和扩展。根据您的具体情况,选择适合您的方法,并根据您的需求进行相应的配置和部署。

正文完