关于后端:Django笔记四十三之使用uWSGI部署Django系统

39次阅读

共计 3043 个字符,预计需要花费 8 分钟才能阅读完成。

本文首发于公众号:Hunter 后端

原文链接:Django 笔记四十三之应用 uWSGI 部署 Django 零碎

目前部署 Django 的形式一般来说是应用 Nginx + uWSGI + Django 来实现。

解决流程是,当一个申请发送过去会先通过 Nginx,如果是动态文件申请,Nginx 这一层间接解决,如果是后端动静接口,则会发送至 uWSGI,而 uWSGI 是一个 web 服务器,它实现的操作是将 HTTP 申请转换成 Python 反对的网络协议,比方 WSGI 协定。

以下是本篇笔记目录:

  1. Nginx 和 uWSGI
  2. WSGI、uWSGI 和 uwsgi
  3. uWSGI 示例及启动
  4. 配置项详解

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 进行反向代理和负载平衡的配置。

如果想获取更多相干文章,可扫码关注浏览:

正文完
 0