详解Django+Uwsgi+Nginx 实现生产环境部署


Posted in Python onNovember 06, 2018

uwsgi介绍

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。

uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

安装uwsgi

pip install uwsgi

uwsgi不支持windows

测试启动

创建测试文件并写入:

def application(environ, start_response): 
status = '200 OK' 
output = 'Hello World! powerde by wsgi' 
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))] 
start_response(status, response_headers)
return [output.encode('utf8'),]

执行命令:

uwsgi --http :8080 --file test.py

浏览器访问该端口,正常情况下能得到输出。

用 uwsgi 启动django

uwsgi --http :8080 --file django_project/wsgi.py

页面能访问,但是静态文件无法加载,需要

uwsgi --http :8080 --file django_project/wsgi.py --static-map=/static=static

静态文件就能加载了。

参数说明:

  • http 这个就和 runserver 一样指定 IP 端口
  • file 这个文件就里有一个反射,如果你在调用他的时候没有指定Web Server就使用默认的
  • static 做一个映射,指定静态文件

uwsgi配置文件启动django项目

uwsgi 支持的参数还挺多的,可以将他们写在配置文件中。在项目同级目录创建 uwsgi.ini 文件:

# uwsig使用配置文件启动
[uwsgi]
# 项目目录
chdir=/opt/webvirtcloud/
# 指定项目的application
module=webvirtcloud.wsgi:application
# 指定sock的文件路径 
socket=/tmp/uwsgi.sock
# 进程个数 
workers=5
pidfile=/tmp/uwsgi.pid
# 指定IP端口 
http=0.0.0.0:8080 # 如果和ngxin结合,本行注释掉
# 指定静态文件
static-map=/static=/opt/webvirtcloud/static
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
daemonize=/var/log/uwsgi.log

更多参数可见: https://uwsgi-docs.readthedocs.io/en/latest/Options.html

执行命令: uwsgi --ini uwsgi.ini ,命令都不再用shell终端,即使断开shell连接,页面仍然能访问。

那要如何关闭或重启它呢?

uwsgi --stop /tmp/uwsgi.pid

配置nginx

找到Nginx的配置文件,用虚拟域名的就在虚拟域名里写:

server {
listen 80;
server_name localhost;

location / { 
include uwsgi_params;
uwsgi_pass 127.0.0.1:8080; //必须和uwsgi中socket的设置一致
client_max_body_size 35m;
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
在Python中使用matplotlib模块绘制数据图的示例
May 04 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python实现ping指定IP的示例
Jun 04 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
基于python实现雪花算法过程详解
Nov 16 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
python使用隐式循环快速求和的实现示例
Sep 11 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 #Python
详解Python 正则表达式模块
Nov 05 #Python
用python3教你任意Html主内容提取功能
Nov 05 #Python
用Python实现读写锁的示例代码
Nov 05 #Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 #Python
详解Python下Flask-ApScheduler快速指南
Nov 04 #Python
Python中修改字符串的四种方法
Nov 02 #Python
You might like
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
使用jsonp完美解决跨域问题
2014/11/27 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
全面了解python字符串和字典
2016/07/07 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
python脚本和网页有何区别
2020/07/02 Python
CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
2016/05/17 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
敬老文明号事迹材料
2014/01/16 职场文书
《菜园里》教学反思
2014/04/17 职场文书
社区清明节活动总结
2014/07/04 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
质量整改报告范文
2014/11/08 职场文书
初中同学会致辞
2015/08/01 职场文书
投资入股协议书
2016/03/22 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python