详解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 相关文章推荐
35个Python编程小技巧
Apr 01 Python
web.py获取上传文件名的正确方法
Aug 26 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
numpy中索引和切片详解
Dec 15 Python
python2.7实现FTP文件下载功能
Apr 15 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
使用Keras预训练好的模型进行目标类别预测详解
Jun 27 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
python开发实时可视化仪表盘的示例
May 07 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
用PHP连接Oracle数据库
2006/10/09 PHP
PHP 递归效率分析
2009/11/24 PHP
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
js选择并转移导航菜单示例代码
2014/08/19 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
python二分法实现实例
2013/11/21 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python3 log10()函数简单用法
2019/02/19 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
tensorflow入门:tfrecord 和tf.data.TFRecordDataset的使用
2020/01/20 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
办公室前台岗位职责
2014/01/04 职场文书
《草原》教学反思
2014/02/15 职场文书
美术教学感言
2014/02/22 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
Pandas加速代码之避免使用for循环
2021/05/30 Python