详解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中类型检查的详细介绍
Feb 13 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
python生成lmdb格式的文件实例
Nov 08 Python
python交互界面的退出方法
Feb 16 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
Jan 14 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 06 Python
python中str内置函数用法总结
Dec 27 Python
python爬虫基础之urllib的使用
Dec 31 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
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
jquery实现拖动效果
2016/08/10 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python根据日期返回星期几的方法
2015/07/06 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
Python字符串三种格式化输出
2020/09/17 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
医院护士的求职信范文
2013/12/26 职场文书
个人租房协议书
2014/04/09 职场文书
社区文艺活动方案
2014/08/19 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
幼儿园感恩节活动方案
2014/10/06 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
Redis特殊数据类型bitmap位图
2022/06/01 Redis
Python+DeOldify实现老照片上色功能
2022/06/21 Python