在AWS Opsworks中部署Symfony 2应用程序

时间:2014-12-10 17:29:14

标签: symfony amazon-web-services aws-opsworks

我想将一个php应用程序从git存储库部署到AWS Opsworks服务。 我已经设置了一个应用程序和配置的厨师烹饪书,因此它运行数据库模式创建,转储资产等...

但我的应用程序在web根目录下的子文件夹中有一些用户生成的文件。 git repository在该文件夹中有一个.gitignore文件,因此当我运行deploy命令时,会有一个空文件夹。

我的问题是:在该文件夹中生成一些文件(通过使用该网站)后,如果我再次运行'deploy'命令'Opsworks'在'site_name / releases / xxxx'文件夹下添加一个新版本,并从中添加符号链接'site_name / current'文件夹。

因此它使我以前的'用户生成的东西'无法访问。对于这种情况,最佳解决方案是什么?

提前感谢您的回答。

2 个答案:

答案 0 :(得分:1)

您有几种不同的选择。下面按个人喜好排列:

  1. 使用Simple Storage Service(S3)存储文件。
  2. 将Elastic Block Store(EBS)卷添加到服务器并将文件保存到卷。
  3. 将文件保存到数据库(这是我自己不会做的,但选项就在那里。)。
  4. 使用OpsWorks时考虑可复制/一次性服务器。

    我的意思是,如果您可以创建一个服务器(称为服务器A)然后切换到同一堆栈中的另一个服务器(称为服务器B),则使用服务器A或服务器B的结果应该是不影响您的应用程序如何工作。

    虽然在销毁服务器时将用户生成的文件保存在应用程序的不同版本之间通用的目录(每次部署新版本目录时)似乎是个好主意,但是运行破坏文件的风险。

    使用S3的好处和缺点?

    <强>优点:

    1. S3将为您的文件提供高冗余和可用性。
    2. S3在您的应用程序服务器外部,因此如果您的服务器死亡或决定将其移动到其他区域,您可以继续使用相同的s3存储桶。
    3. 应用程序易于扩展。您可以添加多个读取和写入文件到S3的应用程序服务器。
    4. <强>缺点:

      1. 您的应用程序中需要额外的代码。您必须使用AWS API才能存储和检索文件。使用S3 API并不难,但可能需要额外的步骤才能满足您的需求。看一下"Using an Amazon S3 Bucket"步行,以供参考。 This 是他们用来将文件上传到示例中的S3存储桶的代码。
      2. 使用EBS的好处和缺点?

        <强>优点:

        1. EBS是一种“外置硬盘”,您可以使用OpsWorks Resource Manager轻松安装到您的计算机上。
        2. 可以备份和恢复EBS卷。
        3. 实施和集成到您的应用程序可能是最快的选择。
        4. <强>缺点:

          1. 您需要在实例运行之前将其分配给实例。
          2. 从服务器A移动到服务器B可能会很费时间(可能需要停机时间)。
          3. 您无法横向扩展应用程序。虽然您可以创建EBS的副本并将它们分配给不同的实例,但不会共享EBS。
          4. 使用数据库的缺点?

            1. 只需对“在数据库中存储文件”进行谷歌搜索
            2. 查看Storing Images in DB - Yea or Nay?
            3. 我首选的选择是使用S3,但最终这是您的决定。

              祝你好运!

              编辑:

              看看这个存储库opsworks-chef-cookbooks它包含一些在OpsWorks上部署Symfony2应用程序的方法。我已经使用它超过一年,并且运作良好。

答案 1 :(得分:0)

使用Chef模板,并在opsworks deploy 生命周期事件中的配方中使用它们。