我应该如何将Web服务器部署到Amazon EC2

我有一个我们想要部署到Amazon EC2的小型网站。 原因是它比其他大多数VPS系统便宜,我们希望有完全自定义的configuration,所以共享主机是不可能的。 此外,select使用相同的图像扩展到更大的服务器是EC2的原因之一。

因为我们从一个t1.micro实例开始,我们将使用EBS启动的实例(x64_64)。 我们select的操作系统是Ubuntu服务器。 我们不编译任何packages十二,坚持稳定的软件包从仓库。

我们所有的networking服务器数据都存储在另一个EBS数据卷上。

现在的问题是:我们怎样才能最好地部署我们的networking服务器,同时保持数据。

我到目前为止所考虑的选项:

  • 用我们需要安装的所有软件制作自己的图像。
    • 缺点:我们必须定期更新映像,以便在重新启动服务器时拥有安全更新的映像。 另外,当我们切换到新版本的发行版时,我们必须安装所有的东西。
    • 优点:在任何安装程序启动服务器时没有时间
  • 使用标准的Ubuntu映像,并在启动时安装所有服务器,并从数据磁盘复制所有非标准configuration文件
    • 缺点:启动时间需要更长的时间,安装时可能出现错误,所以很容易出错
    • 优点:新分布,或更新的图像可以很容易地使用

什么是最好的办法呢? 我错过了什么好的select,还有我没有考虑过的选项的其他方面。

我们使用Fabric和libcloud编写可以调用api的python脚本来启动服务器,安装所有必要的软件并更改configuration。 每次我们启动服务器的时间比磁盘镜像要花费的时间要长一些,但是我们认为不必构build大量镜像的简单性要好得多。

确保所有这些文件都存在于您的VCS(包括configuration文件)中,这样您就可以基本上将其用作您的configuration文件。 然后旋转一个新的服务器可以很简单

fab create_server:server_type=webserver 

从OpsCode检查厨师和托pipe的服务。 厨师让你自动化你的部署和configuration。 厨师客户端作为守护程序在服务器上运行,如果愿意,可以为您升级软件包。

Fabric也很棒,我们主要用它来操作活动服务器。

我创build了我自己的AMI,它已经安装了LAMP堆栈和所有的应用程序。 我跟踪任何变化,然后当我有足够的时间更新图像。 我有Apache,MySQL和PHPconfiguration文件和mysql数据库符号链接到EBS。 这使我不必跟踪这些更改,并在将当前快照附加到新实例时捕获这些更改。