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

django-webserver的Python项目详细描述


django网络服务器

以django管理命令的形式运行生产web服务器,如pyuwsgi(aka uwsgi)或gunicorn


build statuspypipyversions

用法

  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 docs

pyuwsgi已经知道要在django管理命令环境中使用的python解释器和virtualenv(如果适用)。默认情况下,它将使用以下标志运行(使用settings.WSGI_APPLICATION确定模块):

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

如果您使用本地url定义了STATIC_URL,那么它还将添加--static-map,派生自STATIC_URLSTATIC_ROOT

您可以从命令行传递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 docs

与标准的gunicorn配置相同,但将从settings.WSGI_APPLICATION为您设置应用程序。

注意:与其他服务器不同,您必须使用环境变量或通过sys.argv配置gunicorn。如果将它与django的call_command一起使用,请记住,传递的任何其他参数都不会被应用。

有uvicorn

uvicorn logo

uvicorn docs

与标准的uvicorn配置相同,但是将从settings.WSGI_APPLICATION--wsgi为您设置应用程序。

服务生

waitress logo

waitress docs

与标准的^{}参数相同,但将从settings.WSGI_APPLICATION为您设置应用程序。

与其他服务器不同,windows支持服务生。

预热应用程序

默认值:

WEBSERVER_WARMUP=True

通常,当wsgi服务器启动时,它将绑定到必需的端口,然后导入/设置应用程序。在大型项目中,启动需要几秒钟是正常的。在此期间,它无法响应传入的请求。

为了避免停机,此应用程序在启动相关服务器之前导入wsgi模块。如果由于某种原因,这种行为是不可取的,您可以在设置中设置WEBSERVER_WARMUP = False

启动时运行健康检查

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

WEBSERVER_WARMUP_HEALTHCHECK="/-/health/"

在启动服务器之前,内部调用所提供的URL,如果不返回^ {< CD19>},则退出。

<> P>如果您的应用程序无法成功地响应健康检查,那么立即退出您的应用程序是有帮助的。进程或容器管理器应立即显示服务失败,而不是等待负载平衡器或其他监视工具通知捕获问题。

动机

在某些场景中,使用单个入口点分发django项目以进行命令行交互是有益的。当使用shiv之类的东西构建docker容器或自包含的python应用程序时,这可能很有用。

预热应用程序并运行健康检查也可以为一些零停机部署场景打开大门,这些场景以前由于“预热应用程序”中描述的问题而不可能实现。例如,您可以使用uwsgi或gunicorn中的--reuse-port选项在同一端口上启动应用程序的新版本,因为您知道该应用程序已经预热并且运行正常。成功之后启动时,旧版本可以安全地被拆掉,而不会减少任何流量。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为引用变量指定默认值   java在2D数组中旋转innersquare   java将hashmap键值与int进行比较   java程序中的并发监视器陷入死锁   安卓 java。lang.NoClassDefFoundError:java。awt。光标   java有没有更好的方法来引用包含对象的对象?   如何在Java编程中循环代码块   java如何在Junit5中使用Serenity?   java使用ANTLR识别JavaScript文件中的全局变量声明   EJB查询对象生成的java视图SQL?   java查找股票报价的范围   java错误:(453,69)不允许使用字符串类型(在值为“”的“活动\u水平\u边距”处)   java安装的环境变量   amazon web服务在使用awssdkjava上载到S3存储桶时发生直接错误   java在Android的ArrayList中添加相等的值   尝试打开MyEclipse Enterprise Workbench时出现ide“无法创建java虚拟机”错误   java如何使用单元格指定的行和列更改jTable的单元格颜色?   java如何等待文件从系统目录复制到具有根访问权限的外部存储