详解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实现的各种排序算法代码
Mar 04 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
python实现自动解数独小程序
Jan 21 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
如何在python中写hive脚本
Nov 08 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
python图形用户接口实例详解
Dec 16 Python
pandas-resample按时间聚合实例
Dec 27 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 Python
解决echarts中饼图标签重叠的问题
May 16 Python
python实现人像动漫化的示例代码
May 17 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
深入phpMyAdmin的安装与配置的详细步骤
2013/05/07 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP根据IP判断地区名信息的示例代码
2014/03/03 PHP
php中类和对象:静态属性、静态方法
2017/04/09 PHP
用 JSON 处理缓存
2007/04/27 Javascript
Ext 今日学习总结
2010/09/19 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
概述jQuery的元素筛选
2016/11/23 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Python实现在线批量美颜功能过程解析
2020/06/10 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
德国机场停车位比较和预订网站:Ich-parke-billiger
2018/01/08 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
机关作风建设心得体会
2014/10/22 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
如何写观后感
2015/06/19 职场文书
红歌会主持词
2015/07/02 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
vue中div禁止点击事件的实现
2022/04/02 Vue.js