我尝试使用 AWS 自动扩展框架运行我的生产服务器。
我想知道如何将新发布的代码部署到正在运行的生产服务器中。
我目前不关心停机时间
。
我使用 nginx
和 puma
运行 Web 服务器
完成此任务的常用方法是什么?
我想登录AWS控制台找到所有服务器的IP和SSH。更新代码库并重新启动 puma Web 服务器并不是维持产品质量的好方法
最佳答案
在 Amazon EC2 实例上部署代码的方法有多种选择。事实上,它与在任何普通计算机上部署代码的方式基本相同,但 Amazon EC2 有一些技术可以使这一切变得更容易。
选项 1:配置 AMI
启动新的 Amazon EC2 实例时,必须选择 Amazon 系统镜像 (AMI)。 AMI 是一个磁盘镜像,它被复制到新实例的启动磁盘,然后实例将使用该镜像启动。
因此,部署新代码的一种选择是:
- 构建新的 AMI(通过配置实例,然后从该实例创建镜像)
- 创建使用新 AMI 的新 Auto Scaling 启动配置
- 编辑 Auto Scaling 组以使用新的启动配置
- 在 Auto Scaling 组中启动新实例(例如增加
最小
实例数量) - 新实例启动后,删除旧实例(例如减少
最小值
并等待自动缩减流程,或通过降低所需容量
强制减少. 较旧的实例将首先自动删除,基于 Auto Scaling Termination Policy
选项 2:用户数据脚本
这与选项 1 类似,但不是配置新的 AMI,而是通过启动脚本进行实例自配置。脚本可以通过 User Data field 传递并且该脚本将在启动新实例时执行。
该脚本可以执行您想要的任何操作,例如下载并安装软件、使用 Puppet/Chef/Ansible 进行部署以及启动/停止 Web 服务器。
用户数据脚本应存储在 Auto Scaling 启动配置中(类似于选项 1 中的 AMI)。然后,只需启动新实例(类似于选项 1),它们就会自动使用最新版本的软件进行配置。
选项 3:使用部署服务
AWS 有多个可以将代码部署到 Amazon EC2 实例的系统,包括:
- AWS Elastic Beanstalk
- AWS OpsWorks
- AWS CloudFormation
- AWS CodeDeploy
前三个可以部署基础设施和代码。
虽然这些系统比简单地提供脚本更复杂,但它们允许更具可重复性、弹性的架构(例如处理故障和回滚)。
关于ruby-on-rails - 如何将最新代码推送到自动伸缩组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806677/