Skip to main content

简介

  • 本文将引导你使用 Gunicorn(一个 Python WSGI HTTP 服务器)在生产环境中运行 Flask、Django 和其他 WSGI 应用。
  • 在开始之前,请确保你的环境中已安装 Python 和 Gunicorn。你可以使用以下命令安装 Gunicorn:
  • 同时把 gunicorn 添加到你的 requirements.txt 中,这样 Square Cloud 会将它与你的其他依赖一起安装:
requirements.txt

基本用法

要使用 Gunicorn 运行 Python Web 应用程序,你需要有一个 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 替换为你的项目名称):

在 Square Cloud 上运行

将该命令写入配置文件的 START 字段,这样 Square Cloud 就会用 Gunicorn 启动你的应用:
squarecloud.app
Gunicorn 必须绑定到 0.0.0.0:80:Square Cloud 会将你子域名的流量转发到应用的 80 端口。Square Cloud 还会将 PORT 环境变量设为 80,而 Gunicorn 会读取它:在没有 --bind 选项且设置了 PORT 时,它会监听 0.0.0.0:$PORT。

其他选项

Gunicorn 提供了若干选项来自定义其行为。这里我们将展示一些选项。

Workers

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

Name

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

Worker-class

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

附加内容

Gunicorn 还有更多选项和功能,你可以在官方文档中探索。

配置文件

  • 你也可以在 Python 配置文件中设置 Gunicorn 选项。Gunicorn 会自动从其运行目录加载名为 gunicorn.conf.py 的文件,在 Square Cloud 上即你的项目根目录。如果使用其他文件名,请通过 -c <file> 传入。
gunicorn.conf.py
  • 项目中有了这个文件后,START 字段只需写成:
squarecloud.app

后续步骤

Flask

在 Gunicorn 后面部署 Flask 应用。

Django

在 Gunicorn 后面部署 Django 项目。

应用无法启动

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

你喜欢这篇文章吗?

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

Google Reviews

在 Google Reviews 上留下你的评价。

Trustpilot

在 Trustpilot 上留下你的评价。