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#

安装#

Copy
pip install uwsgi

启动文件#

Copy
[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

启动#

Copy
uwsgi --ini uwsgi.ini # 启动py # 手动启动 协程方式 uwsgi --gevent 100 --gevent-early-monkey-patch uwsgi.ini (dailyfresh) [root@SR dayfresh]# ps -aux | grep uwsgi # 查看uwsgi

收集python静态文件#

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

Nginx#

Copy
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开机启动#

创建开机启动的服务脚本#

Copy
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

开启命令#

Copy
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 @   SR丶  阅读(87)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS