详解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 eval函数的妙用
Nov 16 Python
python机器学习之神经网络(二)
Dec 20 Python
python PyTorch预训练示例
Feb 11 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python 实现多线程下载视频的代码
Nov 15 Python
python实现自动清理重复文件
Aug 24 Python
python 可视化库PyG2Plot的使用
Jan 21 Python
numpy实现RNN原理实现
Mar 02 Python
Python socket如何解析HTTP请求内容
Feb 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
mysql 字段类型说明
2007/04/27 PHP
php cli换行示例
2014/04/22 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
[01:00] DOTA2英雄背景故事第五期之重力引力法则谜团
2020/07/16 DOTA
pyside写ui界面入门示例
2014/01/22 Python
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
python获取本机外网ip的方法
2015/04/15 Python
Python字符串的一些操作方法总结
2019/06/10 Python
python实现五子棋人机对战游戏
2020/03/25 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Python列表切片常用操作实例解析
2020/03/10 Python
学习Python爬虫的几点建议
2020/08/05 Python
用python对excel查重
2020/12/07 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
小区推广策划方案
2014/06/06 职场文书
大学同学会活动方案
2014/08/20 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
2014年组织部工作总结
2014/11/14 职场文书
海洋天堂观后感
2015/06/05 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL