AWS上带有nginx和gunicorn的Flask应用程序[重复]

Posted

技术标签:

【中文标题】AWS上带有nginx和gunicorn的Flask应用程序[重复]【英文标题】:Flask application with nginx and gunicorn on AWS [duplicate] 【发布时间】:2019-10-03 23:30:18 【问题描述】:

我有一个简单的 Flask 应用程序(只是显示“Hello world”),我想将它部署在 AWS Elastic BeanStalk 上。多个教程展示了使用 nginx 和 gunicorn 的部署。 1)我不明白为什么我们需要使用nginx,gunicorn已经是一个web-server来替换Flask内置的web server。 2) 教程展示了如何构建两个 Docker 容器:一个用于 Flask 和 gunicorn,另一个用于 nginx。为什么我需要两个容器,我可以将所有容器打包在一起吗?有两个容器我不能使用单容器 Docker,我需要使用多容器 Docker。

有什么想法吗?

【问题讨论】:

【参考方案1】:

通常在这个三重奏中,nginx 被用作反向代理。

可以将flask+gunicorn+nginx打包在同一个docker容器中:

例如:

FROM python:3.6.4

# Software version management
ENV NGINX_VERSION=1.13.8-1~jessie
ENV GUNICORN_VERSION=19.7.1
ENV GEVENT_VERSION=1.2.2

# Environment setting
ENV APP_ENVIRONMENT production

# Flask demo application
COPY ./app /app
RUN pip install -r /app/requirements.txt

# System packages installation
RUN echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list
RUN wget https://nginx.org/keys/nginx_signing.key -O - | apt-key add -
RUN apt-get update && apt-get install -y nginx=$NGINX_VERSION 
&& rm -rf /var/lib/apt/lists/*

# Nginx configuration
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/nginx.conf

# Gunicorn installation
RUN pip install gunicorn==$GUNICORN_VERSION gevent==$GEVENT_VERSION

# Gunicorn default configuration
COPY gunicorn.config.py /app/gunicorn.config.py

WORKDIR /app

EXPOSE 80 443

CMD ["nginx", "-g", "daemon off;"]

【讨论】:

非常感谢您的回复。我猜为了让一切正常工作,我需要 nginx 配置启动 gunicornwsgi.py 文件作为参数引用 Flask 应用程序运行

以上是关于AWS上带有nginx和gunicorn的Flask应用程序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

直接将 AWS ELB 与 Gunicorn 一起使用(没有 nginx)有啥缺点?

如何在 AWS Elastic Beanstalk 上使用 Nginx、React、Webpack、Gunicorn、PostgreSQL、Django 和 DRF 部署应用程序?如何使用此应用程序处

Docker + Gunicorn + Nginx + Django:将非 www 重定向到 AWS Route 53 上的 www

杂谈_浅谈nginx,gunicorn,flask差异比对

Gunicorn 不在 AWS EC2 上创建 .sock 文件

尝试在 Docker 上使用 NGINX + Gunicorn 时 NGINX 给出 502 Bad Gateway