0

我有一个最小的 Django 项目,我正在尝试将它部署到 Google App Engine Managed VMs 上。我在理解到底发生了什么以及什么在服务什么方面遇到了一些麻烦。我有一个 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?自定义运行时是否意味着默认情况下应用程序引擎不会为我的应用程序提供服务,而我必须指定特定的 WSGI 服务器?托管 VM 的文档还不是很详尽。抱歉,如果这些问题看起来有点令人困惑,但这也反映了我目前对该主题的困惑。谢谢你的帮助!

4

1 回答 1

0

看起来你在这里混淆了两件事。

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

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

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

于 2015-11-23T20:06:35.653 回答