详解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中集合类型(set)学习小结
Jan 28 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
python删除列表中重复记录的方法
Apr 28 Python
Python对文件操作知识汇总
May 15 Python
scrapy爬虫实例分享
Dec 28 Python
Python中一般处理中文的几种方法
Mar 06 Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 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 MySQL与分页效率
2008/06/04 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
laravel入门知识点整理
2020/09/15 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
详解a++和++a的区别
2017/08/30 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python遍历类中所有成员的方法
2015/03/18 Python
Python字符串处理实例详解
2017/05/18 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
啦啦队口号大全
2014/06/16 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS