我有一个配置了生产代码设置的AMI。我使用Nginx + unicorn作为服务器设置。 我面临的问题是,每当流量上升时,我需要启动实例登录到实例并执行git pull,捆绑更新以及预编译资产。这很耗时。所以我想避免所有这些过程。
现在我想要一个脚本/进程,我可以自动完成整个部署过程,例如git pull,bundle update和precompile,一旦我从这个AMI启动一个新实例。
有没有最好的方法来完成这项工作?任何帮助,将不胜感激。
答案 0 :(得分:0)
您可以将代码放在/etc/rc.local中(此文件中的命令将在加载服务器时执行)。
但最好的方法是使用(capistrano)。您需要将require "capistrano/bundler"
添加到deploy.rb文件中,并且将自动运行捆绑包更新。有关详细信息,请阅读以下文章:https://semaphoreapp.com/blog/2013/11/26/capistrano-3-upgrade-guide.html
答案 1 :(得分:0)
另一种方法是将您的应用部署到单独的EBS卷(您仍然可以将其安装在/ var / www / application或其当前位置)
部署后,您可以创建此卷的EBS快照。当您创建新实例时,您告诉ec2从快照为您的实例创建一个新卷,因此该实例将以已安装的最新gem /代码开始(我发现bundle install可能需要几分钟)。您的所有启动脚本需要做的是安装卷(或者如果您在创建ami时将其添加到fstab,那么您甚至不需要这样做)。我更喜欢像这样的扩展操作没有依赖关系(例如,如果github或rubygems在你需要部署时发生中断,你会怎么做)
您甚至可以通过使用amazon的自动缩放服务更进一步。简而言之,您可以创建一个启动配置,您可以在其中指定ami,实例类型,卷快照等。然后,您可以根据固定的计划或基于cloudwatch指标手动(通过Web控制台或api)控制组大小。 Amazon将使用启动配置中的信息根据需要创建或销毁实例。