2

我将 AWS 用于我的应用程序。当前的配置是:负载均衡器 --> 多个 EC2 实例(自动扩展) --> 全部使用 SVN 同步挂载 NFS 驱动器

每次我们想要更新应用程序时,我们都会登录 NFS 服务器(另一个 EC2 实例),然后对应用程序文件夹执行 svn update。

我想知道是否有更好的工作方式(架构),因为我有时会在 SVN 更新后获得权限更改,并且服务器需要一段时间才能更新。(考虑将 S3 安装为驱动器)。

我的应用程序是 PHP + Yii 框架 + 和 mysql DB。

谢谢你的帮助,丹尼

4

1 回答 1

1

您可以使用稍微复杂的解决方案:

  1. 将所有动态目录(protected/runtime/,assets/等)移出 SVN 目录(使用svn:ignore)并将它们符号链接到您的应用程序目录中。不过,这可能需要在您的网络服务器中进行一些配置更改才能遵循符号链接。

    /var/www/myapp/config
    /var/www/myapp/runtime
    /var/www/myapp/assets
    /var/www/myapp/htdocs/protected/config-> ../../config
    /var/www/myapp/htdocs/protected/runtime -> ../../runtime
    /var/www/myapp/htdocs/assets -> ../assets
    
  2. 在部署时从一个新的 SVN 副本开始htdocs.new,您可以在其中创建相同的符号链接并可以修复权限

    /var/www/myapp/htdocs.new/protected/config-> ../../config
    /var/www/myapp/htdocs.new/protected/runtime -> ../../runtime
    /var/www/myapp/htdocs.new/assets -> ../assets
    
  3. 移动htdocstohtdocs.oldhtdocs.newto htdocs。您可能还需要HUP网络服务器。

这样您就可以完全避免 NFS 挂载,因为您有时间准备第 1 步和第 2 步。唯一的挑战是在所有机器上同步第 3 步。例如,您可以使用at同时在所有机器上安排更新。

作为奖励,如果出现问题,您始终可以撤消部署。

但是,如果您必须运行迁移,情况可能会更复杂。如果迁移不向后兼容您的应用程序,您可能无法避免一些停机时间。

于 2013-04-10T07:01:10.920 回答