详解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中动态获取对象的属性和方法的教程
Apr 09 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
解决pycharm界面不能显示中文的问题
May 23 Python
flask session组件的使用示例
Dec 25 Python
python基于C/S模式实现聊天室功能
Jan 09 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python 随机森林算法及其优化详解
Jul 11 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 Python
基于Python 的语音重采样函数解析
Jul 06 Python
Python入门之使用pandas分析excel数据
May 12 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python登陆asp网站页面的实现代码
2015/01/14 Python
Python实现栈的方法
2015/05/26 Python
Python环境变量设置方法
2016/08/28 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python生成数字图片代码分享
2017/10/31 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
三星英国官网:Samsung英国
2018/09/25 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
2015新学期开学寄语
2015/02/26 职场文书
草房子读书笔记
2015/06/29 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
《窃读记》教学反思
2016/02/18 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL