django - 在 aws 中使用 Auto Scaling 组和 ELB 构建系统

标签 django amazon-web-services jenkins deployment continuous-integration

我使用的是免费层 aws 帐户,其中有一台 ec2 机器 (Linux)。我有一个简单的网站,后端服务器在 django 上以 8000 端口运行,前端服务器以 Angular 编写并在 http (80) 端口上运行。我使用 nginx 进行 https 并将调用重定向到后端和前端服务器。

现在,对于后端构建系统,我执行了这 3 个主要步骤(通过在同一台计算机上运行 jenkins 来实现自动化)。

1) git pull (Pull the latest code from repo).
2) Do migrations (Updating my db with any new table).
3) Restarting the django server. (I was using gunicorn).

现在,我使用自动扩展组将前端和后端服务器拆分为 2 台不同的计算机,并且现在使用 ELB(Aws 弹性负载均衡器)来路由请求。我已经完成设置了。但现在我在持续部署方面遇到了问题。最主要的是 ELB 使用自动伸缩组,而自动伸缩组又使用 AMI。

现在,由于 AMI 创建一次,我的第一个问题是如何自动化此过程并在已运行的 AWS 服务器中部署我的最新代码。

其次,如果我想为所有服务器运行一次几个步骤,例如使用新表更新数据库的第二步,那么如何实现这一点。

第三,如果这些步骤需要在计算机上运行,​​那么我是否需要另一个 ec2 实例来自动执行创建 AMI、用它更新自动扩展组,然后在其中部署最新代码的过程。

所以,基本上我想知道人们在 AWS 机器中部署最新代码时遵循的最佳实践,这些机器是由自动扩展组在 AMI 的帮助下创建的。我还使用 bitbucket 进行代码管理。

最佳答案

第一个问题:如何自动化“基于包的部署”。

不要为每个版本创建新的 AMI,而是创建一个基准 AMI,该 AMI 仅在新版本需要操作系统更改/安全补丁/等时才会更改。查看 packer 等工具。自动创建 AMI。为了在更改时自动执行代码部署,您可以使用基于包的部署方法,这意味着您为每个版本创建一个包(应该是 CI 流程的一部分),该包存储在某个存储库中,例如 Nexus, Artifactory,甚至是一个简单的 S3 存储桶。 当您部署应用程序的新实例时,它应该运行某种脚本来在实例上拉取并解压/安装该包<这是基本概念,有很多工具可以帮助您实现这一目标,例如,Chef或 AWS CloudFormation。 因此,本质上,第 1 步应该提取代码,创建包并将其存储在应用程序服务器可用的某个存储库中 > 这可以离线完成。

第二个问题:如何运行其他任务,例如更新数据库架构。

如上所述,这也可以是“部署”自动化的一部分,因此,如果您使用 Chef 甚至是简单的 bash 脚本,它可以在解压新代码之前更新数据库架构,这实际上取决于您的数据库、您如何管理它以及谁协调部署。

例如,您可以有一个 Jenkins 作业,在您推出版本时提取新架构并更新数据库。

您的第三个问题可以通过 Packer 来解决,它可以启动实例、创建 AMI 并终止实例。

详细了解 CICD 和 CICD 相关工具。

关于django - 在 aws 中使用 Auto Scaling 组和 ELB 构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48327928/

相关文章:

amazon-web-services - 强制 WWW 支持 AWS EC2 负载均衡器

jenkins - 如何在WebSphere 8.5上安装Jenkins

python - isinstance(datetime.datetime, DateTimeField.value) 对于 Django DateTimeField 始终返回 false

python - 1970 年具有 time_start 属性的 Celery 任务

javascript - 如何在按钮单击时将填充的选择字段添加到表单中

scala - 使用 AWS s3 的分段上传 API 时出现内存不足问题

windows - 在 Windows 上从 Amazon ECR 拉取镜像失败

java - 如何使用 selenium、junit 和 jenkins 执行性能测试

docker - stash/unstash 将数据从构建容器传输到其他节点(在 jenkins 中)

angularjs - return 语句后无法访问代码 Angular Material 在 index.html 中链接时失败