详解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之入门(四)运算
May 27 Python
python使用多线程不断刷新网页的方法
Mar 31 Python
python搭建微信公众平台
Feb 09 Python
python动态加载包的方法小结
Apr 18 Python
简单实现python进度条脚本
Dec 18 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python的历史与优缺点整理
May 26 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python实现我的世界小游戏源代码
Mar 02 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
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
JS事件Event元素(兼容IE,Firefox,Chorme)
2012/11/01 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
谈谈JavaScript中super(props)的重要性
2019/02/12 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
Django添加sitemap的方法示例
2018/08/06 Python
numpy基础教程之np.linalg
2019/02/12 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
详解如何解决H5开发使用wx.hideMenuItems无效果不生效
2021/01/20 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
工商管理应届生求职信
2013/10/07 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
企业演讲稿范文
2013/12/28 职场文书
语文教育专业求职信
2014/06/28 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
客户答谢会致辞
2015/01/20 职场文书
2015年工程师工作总结
2015/04/30 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL