App Engine 托管 VM 上的 Django

Django on App Engine Managed VM

我有一个最小的 Django 项目,我正试图将其部署到 Google App Engine 管理的 VM 上。我在准确理解正在发生的事情以及什么服务于什么时遇到了一些麻烦。我有一个看起来像这样的 app.yaml 文件:

runtime: custom
vm: true
entrypoint: custom
api_version: 1

manual_scaling:
  instances: 1

handlers:
- url: /static
  static_dir: static

- url: /.*
  script: DjangoVM.wsgi.application

还有一个看起来像这样的 dockerfile:

FROM gcr.io/google_appengine/python
RUN apt-get update
RUN apt-get -y install python-numpy python-scipy
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
ADD . /app
CMD gunicorn DjangoVM.wsgi

我的 requirements.txt 看起来像这样:

Django==1.8.5
gunicorn==19.3.0
scikit-learn==0.16.1

站点部署正常,但我的静态文件没有显示。因此,在沙盒应用引擎项目中,app.yaml 中的处理程序负责为我的静态内容提供服务。我是否必须在我的 dockerfile 中配置 nginx 服务器或类似服务器来提供静态内容?

为了帮助我理解这一点,如果我没有 gunicorn 为我的应用程序提供服务,App Engine 是否默认不使用处理程序为它提供服务?即如果我没有 CMD gunicorn DjangoVM.wsgi 会怎样?自定义运行时是否意味着默认情况下 App Engine 不会为我的应用程序提供服务,我必须指定特定的 WSGI 服务器?托管 VM 的文档还不是很详尽。对不起,如果问题看起来有点混乱,但这也反映了我目前对该主题的困惑。感谢您的帮助!

看来您混淆了两件事。

有两种部署托管虚拟机的方法:使用标准运行时,在本例中 Python,以及使用自定义运行时。

标准运行时基本上是一个 App Engine 应用;你像往常一样在 app.yaml 中定义你的路线。 runtime 值应为 "python27"。但是,您不需要 Dockerfile,因此它不会包含 nginx 或 gunicorn;这些路由由 App Engine 运行时提供服务。

自定义运行时是通过给出 "custom" 的 runtime 值来定义的。这是一个完全自定义的应用程序,由 Dockerfile 定义。您没有在 app.yaml 中声明路由,它们需要由容器中正确配置的 nginx/gunicorn 提供服务。