AWS 弹性 beanstalk + Nginx + Gunicorn

AWS elastic beanstalk + Nginx + Gunicorn

我正在使用 AWS 上的资源创建一个 Django Web 应用程序。我是部署新手,在我的生产设置中(Elastic Beanstalk 即基于 ELB)我想离开 Django 开发 Web 服务器,而是使用 Nginx + Gunicorn。我一直在阅读有关它们以及 ELB 的信息。

如果我在 ELB 上部署我的 Django 应用程序,是否需要 Nginx + Gunicorn?由于 ELB 确实带有反向代理、自动缩放、负载平衡等。

感谢您的投入。

您在应用程序级别肯定还需要一些反向代理。虽然 ELB 没有特定的反向代理,但 Application Load Balancer (ALB) 可以替代对适当反向代理的需求,因为它允许定义基于路径的路由。尽管如此,在这种情况下它并不能完全替代 nginx。有了 nginx,您就配备了工具,可以让您做几乎无限的事情,这些事情可能是您的应用程序可能需要的,因为当严重的流量开始发挥作用时,它会不断增长。

此外,对于生产环境中的 Django 应用程序,您肯定希望 运行 它与一些 uwsgi 一起使用,因为它能够处理任何 "development" 服务器的流量,而 Django 附带的服务器无法做到.

有了上面描述的所有事情,您就可以通过准备好与您的应用程序一起使用的所有这些 nginx 和 uwsgi 东西来负责这里。

我喜欢在 EBS 多容器环境中将我们日常使用的所有应用程序与 Docker 相结合。我们有 nginx、uwsgi,所以我们可以做任何我们需要的事情。

部署 Django 时,推荐的部署方法之一是使用 WSGI(参见 Deploying Django)。

AWS Elastic Beanstalk 也很好地支持这种部署 Django 的方法,他们甚至有 Deploying a Django Application to Elastic Beanstalk.

在较高级别,您想执行以下操作:

  1. 创建虚拟环境(使用 virtualenv)以在开发时跟踪您的 python 依赖关系
  2. 为 Elastic Beanstalk 配置您的项目。这包括将您的 virtualenv 冻结到 requirements.txt 文件,并为 django 的 WSGI 配置 EB 扩展。
  3. 使用 EB CLI 初始化您的项目,并创建环境。

在幕后,Elastic Beanstalk 将启动实例、弹性负载均衡器等,并将实例配置为接受 Apache 的流量,然后使用 Apache 的 mod_wsgi 来处理流量姜戈。