我知道这已经在很多地方得到了部分答案,但答案是如此......整个地图,日期都没有得到很好的解释。截至2016年2月,我正在寻找最佳做法。
设置:
基于PHP的RESTful应用程序服务,它位于EC2实例中。 EC2实例将S3用于上传的用户数据(图像文件),将RDS MySql用于其DB(这两点并不特别重要。)
我们在PHPStorm开发,我们的源代码控制是GitHub。部署时,我们只使用PHPStorm的内置SFTP部署将文件直接上传到EC2实例(我们的Staging环境有一个实例,生产环境有另一个实例)。我经常部署到Staging 非常。可能一天20次。我只需点击PHPStorm中的一个文件,然后说“部署到Staging'”进行SFTP传输。或者,我可能只需点击整个项目,然后点击“部署到暂存”即可。 - 上传中排除了某些文件夹和文件,这是PHPStorm部署配置的一部分。
最近,我把我的EC2实例放在Load Balancer后面。我这样做是因为我可以通过证书管理器利用亚马逊的免费SSL产品,证书管理器不支持单独的EC2实例。
所以,现在,还有一个Load Balancer,后面只有一个EC2实例。我维护一个指向EC2实例的弹性IP,以便我可以直接访问它(参见我上面的当前部署方法)。
问题:
我还没有勇气在我的Load Balancer后面创建额外的(克隆)EC2实例,因为我不确定应该如何部署它们。想到了一些想法,但他们都非常讨厌。
鉴于上述情况,目前最顺畅,最好的方式 A)快速将代码库部署到负载均衡器后面的一组EC2实例, B)实际上克隆'我当前的EC2实例,用于创建其他实例。
尽管事实上我已经完成了一些(技术性很强的)建议,但我还是无法在脑海中清晰地描绘出上述情况。
谢谢!
答案 0 :(得分:2)
您需要将您的EC2实例视为100%可有可无。意思是,它可以在任何时候终止,你不应该在乎。替换EC2实例将启动并接管工作。
有三种方法可以实现这一目标:
方法1:每个部署都会创建一个新的AMI图像。
部署应用程序时,将其部署到工作人员EC2实例,该实例的唯一目的是设置"设置"你的应用程序。部署新版本后,您可以从EC2实例创建新的AMI映像,并使用新的AMI映像更新Auto Scaling启动配置。旧的EC2实例终止并替换为新代码。
新的EC2实例已经有最新的代码,因此可以将它们添加到负载均衡器中。
方法2:每个部署都是针对实例外存储(如Amazon S3)完成的。
EC2实例将从Amazon S3下载最新代码并在启动时安装。
因此,为了使新代码生效,您将终止旧实例,并启动新实例以替换开始使用新代码的实例。
这可以通过滚动更新方式或蓝/绿部署完成。
方法3:与方法2类似,但这次实例有一些智能,可以发信号通知下载和安装代码。
这样,您就不需要终止实例:现有实例被告知从S3更新,并且他们自己这样做。
可能有用的一些工具包括:
<强>更新强>
方法2&amp; 3都以&#34; basic&#34;开头。 AMI,配置为从S3提取网页资产。此AMI不会因您的网站版本而异。
例如,AMI可以安装Apache和PHP,并在启动时从S3中提取.php网站资产并将它们放入/var/www/html
。
CloudFormation适用于此。此外,对于方法3,您可以使用cfn-hup
等待更新信号。发出信号后,它会从S3中提取更新的资产。
另一种可能性是使用Elastic Beanstalk,它可用于为您管理所有这些。
<强>更新强>
要从Git获取AMI图像,请尝试以下操作:
Git pull
。部署时,请执行以下操作:
Git push
到GitHub 作为用户数据的一部分(在EC2实例启动期间指定),请指定以下内容:
#!/bin/sh
cd /git/app
git pull
; copy files from repo to web folder
composer install
完成此操作后,该用户数据将作为首次启动时运行的脚本。