详解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 相关文章推荐
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
python实现学生管理系统
Jan 11 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
Python3实现购物车功能
Apr 18 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python基于Selenium的web自动化框架
Jul 14 Python
MNIST数据集转化为二维图片的实现示例
Jan 10 Python
Django choices下拉列表绑定实例
Mar 13 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 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中文件缓存转内存缓存的方法
2011/12/06 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
PHP7 弃用功能
2021/03/09 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
Vue数据驱动模拟实现2
2017/01/11 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
python在不同层级目录import模块的方法
2016/01/31 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
python SocketServer源码深入解读
2019/09/17 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
卡拉威高尔夫官方网站:Callaway Golf
2020/09/16 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
两则小学生的自我评价分享
2013/11/14 职场文书
广告学专业推荐信范文
2013/11/23 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
工地食品安全责任书
2015/05/09 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
Redis三种集群模式详解
2021/10/05 Redis
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python