如何在我的各种Amazon EC2实例中运行我的应用程序代码(PHP)?

时间:2011-04-15 10:13:47

标签: amazon-ec2 amazon-web-services amazon lamp

我一直在努力为客户处理Amazons AWS服务。正如一些非常难以理解的问题所证明的那样,我要问我在解决一些非常基本的问题时遇到了一些麻烦:

a)我玩了几个实例并设法使LAMP正常工作,我遇到的问题是我放在/var/www中的代码似乎没有在这些代码之间共享机器。我该怎么做才能做到这一点?我在考虑共享EBS卷并更改Apaches文档根目录?

b)此外,将代码和资产上传到EBS / S3卷的最佳方法是什么?我应该设置一个实例来处理上述共享卷的FTP吗?

c)最后,我有一个基本的设置计划,我想让一个真正知道他们在说什么的人经营:

  • 指向Load Balancer(AW​​S Elastic Beanstalk)的DNS
  • 负载均衡器管理多个AWS EC2实例。
  • EC2实例共享来自单个EBS商店的代码。
  • 处理数据库查询的RDS实例。
  • Cloud Front直接向用户提供资源。

谢谢, 丰富。

编辑:我的解决方案适用于在谷歌上遇到此问题的任何人。

请注意我的设置还没有完成,我在这个解释中提供的bash脚本可能不是很好,尽管我对命令行非常熟悉我没有使用bash编写脚本的经验。但是,它至少应该向您展示我的设置在理论上是如何工作的。

所有AMI都是来自Alestic的Ubuntu Maverick i386。

我有两个AMI快照:

    • 用户
      • git - 非常有限的访问运行git-shell所以不能通过SSH访问,但是托管一个可以推送到或从中拉出的git存储库。
      • ubuntu - 默认SSH帐户,用于管理服务器和部署代码。
    • 服务
      • 通过ssh进行简单的git存储库托管。
      • Apache和PHP,数据库托管在Amazon RDS上
  • 从属
    • 服务
      • Apache和PHP,数据库托管在Amazon RDS上

现在(这会改变)这是如何将代码部署到我的服务器:

  1. 将更改合并到本地计算机上的主分支。
  2. 停止所有从属实例。
  3. 使用Git将主分支推送到主服务器。
  4. 在主服务器上通过SSH登录ubuntu用户并运行执行以下操作的脚本:
    1. 从本地存储库导出(git-archive)代码到文件夹。
    2. 压缩文件夹并将代码备份上传到S3,并将时间戳附加到文件名。
    3. 将/ var / www /中的代码替换为文件夹并提供适当的权限。
    4. 从主目录中删除导出的文件夹,但保留压缩文件并包含最新代码。 5启动所有从属实例。在启动时,他们运行一个脚本:
    5. Apache在触发之前不会启动。
    6. 使用scp(安全副本)将最新的压缩代码从master复制到/ tmp / www
    7. 提取代码并替换/ var / www /并提供适当的权限。
    8. 启动Apache。
  5. 我会提供代码示例,但它们非常不完整,我需要更多时间。我还希望将我的所有资产(css / js / img)自动推送到s3,这样他们就可以通过CloudFront向客户提供服务。

1 个答案:

答案 0 :(得分:4)

EBS就像你可以附加到一个实例的硬盘,基本上是1:1的映射。 S3是AWS中唯一的共享存储内容,否则您将需要设置NFS服务器或类似服务器。

您可以做的是将所有php文件放在s3上,然后在启动时将它们同步到新实例。

我建议将自定义AMI与您需要安装的所有内容(apache,php等)捆绑在一起,然后设置一个cron作业来将s3中的php文件同步到您的文档根目录。您的工作流程是,将文件上传到s3,让服务器cron同步文件。

您的其他设置似乎非常标准。