详解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 相关文章推荐
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
python使用os.listdir和os.walk获得文件的路径的方法
Dec 16 Python
Python构建图像分类识别器的方法
Jan 12 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
Python select及selectors模块概念用法详解
Jun 22 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
Jun 29 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
python tkinter Entry控件的焦点移动操作
May 22 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
PHP HTML代码串截取代码
2008/12/29 PHP
PHP 代码规范小结
2012/03/08 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
2011/07/31 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Vue from-validate 表单验证的示例代码
2017/09/26 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python生成随机验证码(中文验证码)示例
2014/04/03 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
阿迪达斯墨西哥官方网站:adidas墨西哥
2017/11/03 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
环卫个人总结
2015/03/03 职场文书
安全员岗位职责范本
2015/04/11 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
python 多态 协议 鸭子类型详解
2021/11/27 Python