共计 3043 个字符,预计需要花费 8 分钟才能阅读完成。
本文首发于公众号:Hunter 后端
原文链接:Django 笔记四十三之应用 uWSGI 部署 Django 零碎
目前部署 Django 的形式一般来说是应用 Nginx + uWSGI + Django 来实现。
解决流程是,当一个申请发送过去会先通过 Nginx,如果是动态文件申请,Nginx 这一层间接解决,如果是后端动静接口,则会发送至 uWSGI,而 uWSGI 是一个 web 服务器,它实现的操作是将 HTTP 申请转换成 Python 反对的网络协议,比方 WSGI 协定。
以下是本篇笔记目录:
- Nginx 和 uWSGI
- WSGI、uWSGI 和 uwsgi
- uWSGI 示例及启动
- 配置项详解
1、Nginx 和 uWSGI
应用 Nginx 相当于实现了一次反向代理,也能够通过应用 Nginx 实现负载平衡,将申请调配给不同的后端服务,同时动态文件和动静接口离开申请,进步服务响应性能。
如果部署操作间接应用 uWSGI + Django,那么 uWSGI 就相当于一个 web 服务器,用于间接解决 HTTP 申请。如果是配合 Nginx 应用,相当于是一个中间件的作用,起到转发来自 Nginx 申请的作用。
2、WSGI、uWSGI 和 uwsgi
接下来了解一下 uWSGI,WSGI 和 uwsgi 这几个概念。
WSGI
web server gateway interface,web 服务器网关接口,是一种协定标准,是用于 wsgi 服务器(比方 uWSGI)和 wsgi 利用(比方 Django)之间进行通信的标准。
uWSGI
web 服务器,或者叫 wsgi 服务器,实现 http 协定,用于接管 http 申请并可能解析信息。要将信息发给 Django,必须要用到 WSGI 协定,所以同时也能够实现 WSGI 协定。
uwsgi
是 uWSGI 服务器自有的线路协定,用于与 Nginx 等代理服务器通信。
3、uWSGI 示例及启动
咱们能够通过 uWSGI 命令,将参数都写入命令行间接运行,也能够将配置项写入配置文件,用 uWSGI 间接获取配置信息,这里咱们介绍都写入配置文件的办法来操作。
1、uWSGI 装置
首先咱们须要装置一下 uWSGI:
pip3 install uwsgi -i https://mirrors.aliyun.com/pypi/simple/
2、配置示例及启动
假如咱们的 Django 系统目录为 /path/to/hunter/
,咱们在该目录下创立一个文件 uwsgi.ini
。
uwsgi.ini 内容如下:
# uwsgi.ini
[uwsgi]
http = :9898
chdir = /path/to/hunter/
wsgi-file = hunter/wsgi.py
master=true
processes = 4
threads = 2
以上是一个简略的可运行 uwsgi.ini 配置示例。
接着咱们运行一下:
uwsgi uwsgi.ini
能够看到在 shell 的前台输入上面的信息:
*** Starting uWSGI 2.0.21 (64bit) on [Mon Mar 20 00:14:08 2023] ***
...
...
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 16291)
spawned uWSGI worker 1 (pid: 16295, cores: 2)
spawned uWSGI worker 2 (pid: 16296, cores: 2)
spawned uWSGI worker 3 (pid: 16299, cores: 2)
spawned uWSGI worker 4 (pid: 16301, cores: 2)
示意 uWSGI 曾经失常启动,接着咱们在浏览器拜访该地址的 9898 端口的 admin 页面,能够看到没有款式的 admin 登录页面,如下:
4、配置项详解
在这里咱们是间接应用 uWSGI + Django 的形式启动,所以首行是 http=:9898
,示意能够通过浏览器的形式拜访。
如果回头咱们应用 Nginx + uWSGI + Django 的形式启动,这里就要改成 socket=:9898
。
chdir
chdir 参数指向的是咱们我的项目根目录
wsgi-file
这里咱们填写的是绝对地址,文件是 Django 零碎在创立我的项目时主动创立的。
master
示意的是启动的 uWSGI 主过程是否开启
processes
示意启动的是过程数,所以在启动后输入的信息里,会有主过程和四个过程的信息
threads
示意的线程数,在下面的过程数前面 cores: 2
,输入的就是线程信息。
除了下面这些参数,咱们还能够定义一些其余的参数
daemonize
daemonize 的值为一个地址,用于记录 uWSGI 运行的日志,同时将服务在后盾运行。
daemonize = /var/log/uwsgi/xxx.log
static-map
static-map 参数作用是映射 Django 的动态文件门路,后面咱们运行之后,拜访后盾 admin 界面,发现没有前端款式对不对,如果想要有款式显示,则须要先定义这个参数,而后将 Django 的 admin 款式文件迁徙到指定文件,操作步骤如下:
1. 定义 STATIC_ROOT
首先,咱们须要在 settings.py 里定义 STATIC_ROOT,这个参数是一个门路,示意咱们在下一步须要将动态文件集中到的文件门路,假如咱们须要把文件都集中到 /var/static/ 目录下:
# settings.py
STATIC_ROOT = "/var/static/"
2.collectstatic 命令
接下来执行动态文件集中的命令:
python3 manage.py collectstatic --no-input
原本后面的命令就能够了,然而执行的时候会有选择项须要咱们抉择,在后续部署的时候,咱们能够加上 –no-input 示意不须要提醒输出信息。
3. 定义 static-map
接下来咱们定义 static-map 就能够映射动态文件的地址,这样,咱们应用 uWSGI 部署 Django 后也能够拜访 admin 的动态文件里。
static-map = /static/=/var/static/
stats
stats 参数前面接的内容是端口,用于获取 uWSGI 几个 worker 的状态信息。
如果想要到浏览器拜访的话还须要加一个 stats-http=true,如下:
stats = 127.0.0.1:9897
stats-http = true
timeout
对于 timeout 有两个参数,一个是 http-timeout,一个是 socket-timeout。
后面介绍了凋谢端口的时候,如果是 uWSGI 独自应用,就应用 http,那么 timeout 就应用 http-timeout
如果是配合 Nginx 应用,那么就应用 socket-timeout。
它的单位是秒.
http-socket=60 # 60 秒超时工夫
留神 :下面的计算运行超时之后,会断开与前端的连贯,然而后端还是会继续执行逻辑
harakiri
这个也是超时工夫,然而与 timeout 不同的是,这个参数在超时之后断开连接之后,同时后端也进行执行运算,具体的操作是重启该申请所在的过程。
它的单位也是秒。
max-requests
重启过程的最大申请数,比方咱们设置:
max-requests=5000
那么在某个 worker 过程解决 5000 个申请之后则会重启。
以上就是应用 uWSGI 启动 Django 零碎的示例及介绍,在之后的笔记中会再介绍如何应用 Nginx 进行操作,包含应用 Nginx 进行反向代理和负载平衡的配置。
如果想获取更多相干文章,可扫码关注浏览: