Nginx+uwsgi+Django部署

Nginx+uwsgi+Django部署

术语简介

web框架

  • Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口、标准样板以及会话管理等,可提升代码的可再用性。
  • Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。其类型有基于请求的和基于组件的两种框架

web服务器

  • web服务器即用来接受客户端请求,建立连接,转发响应的程序,至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。
  • Nginx就是一个web服务器

uWSGI和WSGI

WSGI

简介

全称Python Web Server Gateway Interface,指定了web服务器和Python web应用或web框架之间的标准接口,以提高web应用在一系列web服务器间的移植性

  1. WSGI是一套接口标准协议/规范;
  2. 通信(作用)区间是Web服务器和Python Web应用程序之间;
  3. 目的是制定标准,以保证不同Web服务器可以和不同的Python程序之间相互通信

处理流程

  1. 接受用户操作浏览器发送的请求
  2. 接受用户的请求转发至对应的web服务器
  3. web服务器将请求转交给web应用程序,web应用程序处理请求
  4. web应用将请求结果返回给web服务器,由web服务器返回用户响应结果
  5. 浏览器收到响应,向用户展示

产生背景

请求时Web服务器需要和web应用程序进行通信,但是web服务器有很多种啊,Python web应用开发框架也对应多种啊,所以WSGI应运而生,定义了一套通信标准。试想一下,如果不统一标准的话,就会存在Web框架和Web服务器数据无法匹配的情况,那么开发就会受到限制,这显然不合理的。

uwsgi

与WSGI一样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。

uWSGI

  1. 是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。
  2. WSGI协议主要包括server和application两部分:

部署流程

项目部署

uWSGI

安装

pip install uwsgi

启动文件

[uwsgi]
#使用nginx连接时使用
socket=127.0.0.1:9999	# ip和端口

#项目目录
chdir=/root/projects/dayfresh
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=dayfresh/wsgi.py
# 进程数
processes = 4
# 线程数
threads = 2
# uwsgi服务器的角色
master = True
pidfile=/root/project/dayfresh/pidfile/uwsgi.pid	# uwsgi的pid生成文件
logto=/root/project/dayfresh/daemonize/uwsgi.log  # 日志文件
virtualenv=/root/project/.virtualenv/dailyfresh

启动

uwsgi --ini uwsgi.ini 	# 启动py

# 手动启动 协程方式
uwsgi --gevent 100 --gevent-early-monkey-patch uwsgi.ini



(dailyfresh) [root@SR dayfresh]# ps -aux | grep uwsgi	# 查看uwsgi

收集python静态文件

 python3.6 manage.py collectstatic 	# 收集django所需的静态文件

Nginx

server {
        listen       80;
        server_name  10.1.1.6;	# 监听地址

    

        location / {
          
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:9999;	# 与uwsgi中的地址端口一样
        }
        
        location /static {
       		 alias /var/www/html/dailyfresh/static/;	# 静态文件
        }
}	
(dailyfresh) [root@SR dayfresh]# nginx -t	# 查看配置是否有错误

(dailyfresh) [root@SR dayfresh]# nginx -s reload	# 重启nginx服务

配置uwsgi开机启动

创建开机启动的服务脚本

vim /lib/systemd/system/uwsgi.service
    [Unit]
    Description=HTTP Interface Server
    After=syslog.target

    [Service]
    KillSignal=SIGQUIT
    ExecStart=/usr/bin/uwsgi --ini /uwsgi路径/uwsgi.ini
    Restart=always
    Type=notify
    NotifyAccess=all
    StandardError=syslog

    [Install]
    WantedBy=multi-user.target
  

# 加载配置
systemctl daemon-reload

开启命令

systemctl stop uwsgi.service 关闭uwsgi服务
systemctl start uwsgi.service 开启uwsgi服务
systemctl restart uwsgi.service 重启uwsgi服务

注意事项

如果uwsgi配置文件中配置了 daemonize=/path/uwsgi.log (uwsgi服务以守护进程运行)会导致sytemctl启动时多次重启而导致启动失败
需改为 logto=/path/uwsgi.log

posted @ 2020-12-15 21:02  SR丶  阅读(84)  评论(0编辑  收藏  举报