我必须为运行在apache2,mysql,capistrano和一些后台服务上的中型rails应用程序设置ec2。我想知道每个开发人员通常做什么来设置他的rails应用程序的最佳实践。我想知道什么样的设置易于扩展,至少可以模仿
我也对如何监控服务器状态和性能感兴趣,其他类型的最佳实践也会有所帮助。
ps:还要考虑到我的应用数据库会快速增长。
答案 0 :(得分:4)
我认为好好研究一下AWS文档,特别是architecture center将是最好的起点。但是,让我尽可能地解决你的许多问题。
<强>数据库强>
在AWS上获得可扩展的容错数据库的最简单方法是使用Relational Database Service。您应该阅读文档和最佳实践,以确保您从中获得最大收益 - 即。多个AZ。
EC2服务器
构建服务器的最佳方法是将它们分离为Web服务器(向用户提供html)和应用程序服务器(应用程序逻辑,通常返回json或xml等)。请参阅this体系结构示例。
但是,关键是在AutoScaling后面使用Elastic Load Balancer组。
<强>自动化强>
如果您想使用capistrano,只需将其安装到您的服务器中即可。您可以创建一个预配置的AMI,并将其与您想要的任何其他内容一起安装。或者,您可以将其安装在部署脚本中。但是,最常推荐的方法是使用云端的Chef OpsWorks服务。
服务器恢复&amp;容错
如果使用EC2 AutoScaling,如果服务器不可用,即。硬件失败或停止回复EC2运行状况检查,AutoScaling将自动终止它并启动替换。
通过添加ELB和ELB运行状况检查,ELB可以停止响应Web请求的实例。
您需要阅读文档以获取更多相关信息。
备份和恢复
要备份附加到EC2实例的EBS卷上的数据,请使用EBS Snapshots。但是,最好的架构类型使EC2实例无状态 - 它们不存储除应用程序代码之外的任何内容,如果它们死亡则无关紧要。在这些情况下,所有数据(包括用户文件)都可以存储在S3上。在S3上,您有许多备份选项,例如Cross Region Replication和/或Glacier的数据存档
<强>监控强>
AWS提供CloudWatch,它可以为您提供虚拟机管理程序可见指标,例如网络输入和输出,CPU利用率等。如果您想获得更多数据,可以使用custom metrics并推送例如。内存使用情况。除了cloudwatch之外,您还可以使用服务器级监控工具。
<强>部署强>
我推荐AWS Code Deploy。
安全强>
使用Security Groups仅打开您希望用户能够连接的端口。此外,使用安全组来锁定重要端口,例如.22仅限于一组特定的IP。您还可以使用Network ACLS来阻止不受欢迎的流量。 AWS提供了更多信息和建议here。
我还建议您阅读this白皮书。