【问题标题】:Flask application with nginx and gunicorn on AWS [duplicate]AWS上带有nginx和gunicorn的Flask应用程序[重复]
【发布时间】:2025-12-15 13:10:02
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: amazon-web-services docker nginx flask amazon-elastic-beanstalk


    【解决方案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 应用程序运行
    最近更新 更多