详解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 相关文章推荐
Pyramid添加Middleware的方法实例
Nov 27 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python模块搜索路径代码详解
Jan 29 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
python traceback捕获并打印异常的方法
Aug 31 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python多线程http压力测试脚本
Jun 25 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
python tqdm库的使用
Nov 30 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开发负载均衡指南
2010/07/17 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
javascript delete 使用示例代码
2010/03/29 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
竟聘演讲稿范文
2013/12/31 职场文书
社区工作者思想汇报
2014/01/13 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
收款委托书
2014/10/14 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫