跳转到主要内容

Django生产型Web服务器的管理命令

项目描述

django-webserver

以Django管理命令运行生产型Web服务器,例如pyuwsgi(即uWSGI)或gunicorn


build status pypi pyversions

用法

  1. 安装一个变体

    pip install django-webserver[pyuwsgi]
    

    pip install django-webserver[gunicorn]
    

    pip install django-webserver[uvicorn]  # Python 3.5+ only
    

    pip install django-webserver[waitress]
    
  2. 添加到INSTALLED_APPS

    INSTALLED_APPS = [
       # ...
       "django_webserver",
       # ...
    ]
    
  3. 运行

    manage.py pyuwsgi --http=:8000 ...
    

    manage.py gunicorn
    

    manage.py uvicorn
    

    manage.py waitress --port=8000
    

配置

使用pyuwsgi

uwsgi logo

(py)uWSGI文档

Pyuwsgi已经知道从Django管理命令环境使用的Python解释器和virtualenv(如果适用)。默认情况下,它将使用以下标志(使用settings.WSGI_APPLICATION确定模块)

--strict --need-app --module={derived}

如果您已定义STATIC_URL带有本地URL,它还将添加从STATIC_URLSTATIC_ROOT派生的--static-map

您可以通过命令行传递uWSGI接受的任何其他参数。

但uWSGI有很多标志,其中许多标志您希望在每次运行项目时都使用。对于这种情况,您可以使用可选设置PYUWSGI_ARGS配置自己的默认值。以下是一个可能对您有帮助的示例

PYUWSGI_ARGS = [
    "--master",
    "--strict",
    "--need-app",
    "--module".
    ":".join(WSGI_APPLICATION.rsplit(".", 1)),
    "--no-orphans",
    "--vacuum",
    "--auto-procname",
    "--enable-threads",
    "--offload-threads=4",
    "--thunder-lock",
    "--static-map",
    "=".join([STATIC_URL.rstrip("/"), STATIC_ROOT]),
    "--static-expires",
    "/* 7776000",
]

别忘了设置类似于--socket=:8000--http=:8000的东西,以便您的应用程序监听端口。根据您的设置,通过命令行传递此参数可能比在设置中硬编码它更有意义。

使用gunicorn

gunicorn logo

gunicorn文档

与标准 gunicorn 配置相同,但应用将由 settings.WSGI_APPLICATION 自动设置。

注意:与其他服务器不同,您必须通过环境变量或 sys.argv 来配置 gunicorn。如果您使用 Django 的 call_command,请注意您传递的任何额外参数都不会生效。

使用 uvicorn

uvicorn logo

uvicorn 文档

与标准 uvicorn 配置相同,但应用将由 settings.WSGI_APPLICATION 以及 --wsgi 自动设置。

使用 waitress

waitress logo

waitress 文档

与标准 waitress-serve 参数相同,但应用将由 settings.WSGI_APPLICATION 自动设置。

与其他服务器不同,waitress 支持 Windows。

预先预热您的应用

默认

WEBSERVER_WARMUP = True

通常,当 WSGI 服务器启动时,它将绑定必要的端口,然后导入/设置您的应用。在大型项目中,启动可能需要几秒钟。在这段时间内,它无法响应用户请求。

为了避免这种情况,此应用在启动相关服务器之前导入您的 WSGI 模块。如果出于某种原因,这种行为不理想,您可以在设置中设置 WEBSERVER_WARMUP = False

启动时运行健康检查

默认情况下不启用。它需要 WEBSERVER_WARMUP = True

WEBSERVER_WARMUP_HEALTHCHECK = "/-/health/"

在启动服务器之前,调用提供的 URL,如果它没有返回 200,则退出失败。

如果您的应用无法成功响应用户请求,则立即退出可能会有所帮助。您的进程或容器管理器应立即显示服务失败,而不是等待负载均衡器或其他监控工具通知。

动机

在某些场景中,将 Django 项目与单个命令行交互入口点一起分发是有益的。当构建 Docker 容器或带有类似 shiv 的自包含 Python 应用时,这会很有用。

预先预热应用和运行健康检查可以为一些零停机部署场景打开大门,这在之前由于“预热您的应用”中描述的问题而不可能实现。例如,您可以使用 uWSGI 或 gunicorn 的 --reuse-port 选项在同一端口上启动新版本的应用,知道它已经预热并健康。启动成功后,可以安全地关闭旧版本,而不会丢失任何流量。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

django-webserver-1.2.0.tar.gz (7.8 kB 查看散列)

上传时间

构建分发

django_webserver-1.2.0-py2.py3-none-any.whl (10.7 kB 查看散列)

上传于 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面