跳转到主要内容
Gunicorn 是一个 Python WSGI HTTP 服务器,用于在生产环境中运行 Flask、Django 和其他 WSGI 应用。本指南介绍如何用 Gunicorn 启动你的应用,根据套餐的 RAM 进行调优,并在 Square Cloud 上运行它。

安装 Gunicorn

在你的电脑上安装 Gunicorn:
同时把 gunicorn 添加到你的 requirements.txt 中,这样 Square Cloud 会将它与你的其他依赖一起安装:
requirements.txt

基本用法

要使用 Gunicorn 运行应用,你需要一个 WSGI 应用(例如用 Flask 或 Django 构建的应用),并且需要知道包含 WSGI 应用对象的模块名和变量名。 例如,如果你有一个位于名为 app.py 文件中的 Flask 应用,且 Flask 实例名为 app,你可以使用以下命令通过 Gunicorn 运行它:
在此命令中:
  • python -m gunicorn 将 Gunicorn 作为一个 Python 模块运行。
  • --bind 0.0.0.0:80 告诉 Gunicorn 在所有网络接口的 80 端口上监听。
  • app:app 指定了包含 WSGI 应用对象的模块名(app)和变量名(app)。
对于 Django,请将 Gunicorn 指向 Django 在你的项目包中创建的 wsgi.py 模块(将 myproject 替换为你的项目名称):

其他选项

Gunicorn 提供了若干选项来自定义其行为。下面是最常用的几个;Gunicorn 官方设置参考列出了全部选项。

工作进程数

  • --workers <number>
此选项设置用于处理请求的工作进程数量。每个工作进程都是一个独立的进程,在内存中拥有你应用的一份完整副本,因此在 Square Cloud 上,限制通常来自 RAM 而不是 CPU。先从 2 个工作进程开始,只有在提高 MEMORY 之后再增加。如果你的应用因 LACK_OF_RAM 而停止,请减少工作进程数量。
不要用 multiprocessing.cpu_count() 或 (2 x $num_cores) + 1 公式来决定工作进程数量:在容器内,获取到的核心数可能是宿主机的,这会启动几十个工作进程并耗尽你的 RAM。

进程名称

  • --name <name>
  • -n <name>
此选项设置 Gunicorn 的进程名称。

工作进程类型

  • --worker-class <class>
  • -k <class>
此选项设置要使用的工作进程类型。默认值为 sync,但你也可以使用 gevent、eventlet、tornado 或其他工作进程类型。

配置文件

你也可以在 Python 配置文件中设置 Gunicorn 选项。Gunicorn 会自动从其运行目录加载名为 gunicorn.conf.py 的文件,在 Square Cloud 上即你的项目根目录。如果使用其他文件名,请通过 -c <file> 传入。
gunicorn.conf.py
项目中有了这个文件后,启动命令就不再需要 --bind 选项。

在 Square Cloud 上运行

在项目根目录创建 squarecloud.app 文件,并把 Gunicorn 命令写入其 START 字段,这样 Square Cloud 就会用 Gunicorn 启动你的应用,而不是默认的 python app.py:
Gunicorn 必须绑定到 0.0.0.0:80:Square Cloud 会将你子域名的流量转发到应用的 80 端口。Square Cloud 还会将 PORT 环境变量设为 80,而 Gunicorn 会读取它:在没有 --bind 选项且设置了 PORT 时,它会监听 0.0.0.0:$PORT。
对于 Django,请在 START 中使用 myproject.wsgi:application,并将项目的 manage.py 作为 MAIN。Flask 和 Django 教程介绍了完整的部署过程。

后续步骤

Flask

在 Gunicorn 后面部署 Flask 应用。

Django

在 Gunicorn 后面部署 Django 项目。

应用无法启动

修复 EADDRINUSE、LACK_OF_RAM 和其他启动失败问题。

你喜欢这篇文章吗?

  • 我们精心创作了这些内容,只为提供尽可能好的帮助。 如果这篇文章对你有任何帮助,请支持我们的工作!已经有开发者在 Google 和 Trustpilot 上给 Square Cloud 打出了 4.9/5 分(共 402 条评价),也留下你的评价吧!这能帮助我们了解什么对你最重要。

Google Reviews

在 Google Reviews 上留下你的评价。

Trustpilot

在 Trustpilot 上留下你的评价。