【问题标题】:How do I run my application code (PHP) across my various Amazon EC2 instances?如何跨各种 Amazon EC2 实例运行我的应用程序代码 (PHP)?
【发布时间】:2011-08-06 05:22:42
【问题描述】:

我一直在尝试为客户掌握亚马逊的 AWS 服务。正如我要问的非常愚蠢的问题所证明的那样,我在理解一些非常基本的事情时遇到了一些麻烦:

a) 我玩过几个实例并设法让 LAMP 工作得很好,我遇到的问题是我放在 /var/www 中的代码似乎没有在这些机器之间共享。我必须做什么才能实现这一目标?我在考虑共享 EBS 卷并更改 Apaches 文档根目录?

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

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

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

谢谢, 丰富。

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

请注意,我的设置尚未完成,我在此说明中提供的 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. 将更改合并到本地计算机上的 master 分支。
  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。

我会提供代码示例,但它们非常不完整,我需要更多时间。我还想让我的所有资产(css/js/img)自动推送到 s3,以便它们可以通过 CloudFront 分发给客户。

【问题讨论】:

  • [AWS FAQ: You can't share EBS ](aws.amazon.com/ec2/faqs/…) 我认为您需要通过 NFS 或其他操作系统级别的方法共享您的代码。
  • 我还听说过使用 CloudWatch/AutoScaling 将终止的实例替换为您的“主”AMI 副本。换句话说,您可以更新 Auto Scale 关闭的 AMI,然后终止池中的所有实例,直到它们全部被最新代码替换(通过 Auto Scale)。
  • 您也可以使用亚马逊弹性文件系统aws.amazon.com/efs

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


【解决方案1】:

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

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

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

你的其余设置看起来很标准。

【讨论】:

  • 你参加聚会有点晚了,但还是谢谢你。请参阅我的问题,了解我最终是如何做到的。
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2014-01-25
  • 2011-08-27
  • 2018-12-26
  • 2018-12-23
  • 2012-11-30
  • 2019-07-04
相关资源
最近更新 更多