我正在使用Yii2(PHP / MySQL)作为其API点的Angular2项目。我们将需要为不同的客户部署不同语言的Angular应用程序(使用angular-cli的AOT编译)。

实现此目的的最佳方法是什么?我正在寻找Docker或Ansible(-container)来完成这项工作。但是这些示例主要针对1:1设置。但是我需要一个1:n,例如:

deploy app-de new_costomer prod_server

此外,当有新版本的应用程序可用时,我想用新应用程序(需要上载已编译的src /文件夹AOT,并在Yii2端上传数据库迁移脚本)。理想情况下,它会执行以下操作:

deploy update network-all prod_server

有什么想法吗?

要澄清一下:我有很多客户,每个客户都应该拥有自己的容器(docker,通过ansible-container)。有AOT编译的Angular内容(仅JS)和MySQL的PHP​​后端。

每个客户都在服务器上进行此设置(因此3个客户= 3个Docker容器,使用Angular + PHP + MySQL) 。

我们相当频繁地将更新推送到Angular和PHP(即,整个DIST文件夹需要上传或至少是一个差异,需要运行PHP / MySQL后端的迁移脚本等)。 。

这是来自一个命令的(因为我显然不想让SSH进入每个容器以半手动方式完成所有操作)。

因为我从未这样做过之前的设置,我想了解如何使用Ansible(或类似工具)来实现此目的。

评论

您不清楚要什么。听起来您的一般问题是国际化。通常,这是一个应用程序设计问题,而不是部署问题。您可以将不同的语言部署为单独的容器,但是我不确定这将是最简单或最有效的解决方案。

看起来就像是另一个站点上粘贴复制的问题,包括该问题周围的SE链接和图标。修复格式后,请明确说明此问题,以便理解和回答。

嘿@Evgeny,是的,它是从我在Stackexchange上的帖子复制的,有人对此发表了评论,并告诉我在这里接管。因此,重复。我更新了上面的问题。

通常不建议使用@axtho交叉发布-您应该在此网站上或Stack Overflow上都发布该帖子,而不能同时在两者上都有。这可能就是为什么您的问题没有得到很好答复的原因。
最好通过编辑,不要在查看修订时指定“ edit”,我们可以知道已添加的内容,并且在检查队列中突出显示了更改。投票重开

#1 楼

让我们假设您有以下情形:您有许多客户,但是除了一些配置更改外,大多数客户使用完全相同的应用程序。您希望每个客户都尽快获得最新的应用程序。

如果这是您的情况,请尝试使所有需要区别于应用程序的内容都进行配置更改。您构建一个(或一组)Docker容器,该容器可以根据给定的配置来处理您的任何客户。然后,在部署时,您只需为每个客户提供该容器的正确配置。

这种方法的好处是,当新客户来临时,您并不会真正承担大量的管理费用。您生成它们的配置,创建新服务器,将一些条目添加到清单文件中,然后在下次部署时也到达那里。 CD管道设置得越好,您就可以越多地自动化该过程。

所以流程通常如下所示:您的应用程序代码库,可以满足所有客户的需求
您为应用程序构建docker容器(一个用于前端,一个用于后端,可能还有更多支持的容器)
使用配置文件确定部署位置和部署内容的脚本。
运行此部署脚本。它会覆盖所有客户,并只需使用适当的配置来部署应用程序的最新版本。

如果您有新客户,则唯一需要更改的地方就是部署配置文件。如果您使用的是Ansible,则必须更改库存和vars文件。假设您有一个新客户,该客户希望该应用程序在西班牙语语言环境下运行,并且可以使用Beta功能。该客户的配置可能如下所示:

config.js:

SETTINGS = { locale: 'es', beta: true };

config.php:

define('CUSTOMER_LOCALE','es');
define('CUSTOMER_BETA','true');


然后,请确保在部署期间,容器在启动时将这些文件装入。

评论


谢谢。也就是说,主要是我需要的东西和一个好的起点。出于好奇:您为什么要为一位客户建议许多Docker映像?

–axtho
17 Mar 7 '17 at 9:52



@axtho不是强制性的,尽管通常将每个关注点(前端,后端,数据库等)分离到一个单独的容器中是一个好习惯,因此可以独立部署和扩展它们

–SztupY
17 Mar 7 '17 at 10:01