abh*_*aur 4 nginx flask gunicorn docker
我正在尝试使用 Gunicorn 和 nginx 部署 python Flask 应用程序。我正在尝试在同一个容器中运行 Gunicorn(wsgi) 和 nginx 。但是我的nginx没有启动。通过登录容器,我可以启动 nginx。下面是我的 dockerfile
RUN apt-get clean && apt-get -y update
RUN apt-get -y install \
nginx \
python3-dev \
curl \
vim \
build-essential \
procps
WORKDIR /app
COPY requirements.txt /app/requirements.txt
COPY nginx-conf /etc/nginx/sites-available/default
RUN pip install -r requirements.txt --src /usr/local/src
COPY . .
EXPOSE 8000
EXPOSE 80
CMD ["bash" , "server.sh"]
Run Code Online (Sandbox Code Playgroud)
server.sh 文件看起来像
# turn on bash's job control
set -m
gunicorn --bind :8000 --workers 3 wsgi:app
service nginx start or /etc/init.d/nginx
Run Code Online (Sandbox Code Playgroud)
Gunicorn由server.sh启动,但nginx未启动。
我的目标是稍后在 Kubernetes 中运行这些容器。我应该在单独的 pod 中运行 nginx 和 Gunicorn,还是 ii)在具有单独容器的同一个 pod 中运行它,还是 iii)在同一个 pod 中的同一个容器中运行
我的目标是稍后在 Kubernetes 中运行这些容器。我应该)在单独的 pod 中运行 nginx 和 Gunicorn
是的,这个。设置起来非常简单(考虑到“直接”有几十行的 YAML 文件):为 GUnicorn 后端编写一个 Deployment 和一个匹配的(ClusterIP 类型)服务,然后编写一个单独的 Deployment 和匹配的(NodePort 或 LoadBalancer) -type) Nginx 代理的服务。在 Nginx 配置中,使用proxy_pass
指令,指向 GUnicorn 服务的名称作为后端主机名。
这样做有几个优点。如果 Python 服务由于某种原因失败,您也不必重新启动 Nginx 代理。如果您正在处理足够的负载,需要扩展应用程序,则可以运行最少数量的轻量级 Nginx 代理(可能是 3 个以实现冗余),并根据负载运行更多数量的后端。如果您更新应用程序,Kubernetes 将为您删除并重新创建 Deployment 管理的 Pod,同样,对代理和后端使用单独的 Deployment 意味着如果仅应用程序代码发生更改,您无需重新启动代理。
因此,为了解决问题的第一部分:
我正在尝试使用 Gunicorn 和 nginx 部署 python Flask 应用程序。
在普通 Docker 中,出于类似的原因,您可以运行两个单独的容器。您可以在 Docker Compose 中进行管理,它具有更简单的 YAML 文件布局;它看起来像
version: '3.8'
services:
backend:
build: . # Dockerfile just installs GUnicorn, CMD starts it
proxy:
image: nginx
volumes:
- ./nginx-conf:/etc/nginx/conf.d # could build a custom image too
# configuration specifies `proxy_pass http://backend:8000`
ports:
- '8888:80'
Run Code Online (Sandbox Code Playgroud)
这避免了尝试在同一个容器中运行多个进程的所有麻烦。您可以简化显示的 Dockerfile:
# Dockerfile
FROM python:3.9
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get install --no-install-recommends --assume-yes \
python3-dev \
build-essential
# (don't install irrelevant packages like vim or procps)
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
# (don't need a shell script wrapper)
CMD gunicorn --bind :8000 --workers 3 wsgi:app
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3925 次 |
最近记录: |