Django + Uwsgi + Nginx 实现生产环境部署的方法


Posted in Python onJune 20, 2018

如何在生产上部署Django?

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

uwsgi介绍

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
1.WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
2.uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
3.而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
4.uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

uwsgi性能非常高

Django + Uwsgi + Nginx 实现生产环境部署的方法

uWSGI的主要特点如下
1.超快的性能
2.低内存占用(实测为apache2的mod_wsgi的一半左右)
3.多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
4.详尽的日志功能(可以用来分析app性能和瓶颈)
5.高度可定制(内存大小限制,服务一定次数后重启等)

总而言之uwgi是个部署用的好东东,正如uWSGI作者所吹嘘的:

If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid, fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.

Uwsgi 安装使用

# Install the latest stable release:

pip install uwsgi

# ... or if you want to install the latest LTS (long term support) release,

pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

基本测试

Create a file called test.py:

# test.py

def application(env, start_response):

  start_response('200 OK', [('Content-Type','text/html')])

  return [b"Hello World"] # python3

  #return ["Hello World"] # python2

运行

uwsgi --http :8000 --wsgi-file test.py

用uwsgi 启动django

uwsgi --http :8000 --module mysite.wsgi

可以把参数写到配置文件里

alex@alex-ubuntu:~/uwsgi-test$ more crazye-uwsgi.ini 

[uwsgi]

http = :9000

#the local unix socket file than commnuincate to Nginx

socket = 127.0.0.1:8001

# the base directory (full path)

chdir = /home/alex/CrazyEye 

# Django's wsgi file

wsgi-file = CrazyEye/wsgi.py

# maximum number of worker processes

processes = 4

#thread numbers startched in each worker process

threads = 2

#monitor uwsgi status 

stats = 127.0.0.1:9191

# clear environment on exit

vacuum     = true

启动

/usr/local/bin/uwsgi crazye-uwsgi.ini

Nginx安装使用

sudo apt-get install nginx

sudo /etc/init.d/nginx start  # start nginx

为你的项目生成Nginx配置文件

You will need the uwsgi_params file, which is available in the nginx directory of the uWSGI distribution, or from https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

Copy it into your project directory. In a moment we will tell nginx to refer to it.

Now create a file called mysite_nginx.conf, and put this in it:

# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
  # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
  server 127.0.0.1:8001; # for a web port socket (we'll use this first)

}
# configuration of the server

server {

  # the port your site will be served on

  listen   8000;

  # the domain name it will serve for

  server_name .example.com; # substitute your machine's IP address or FQDN

  charset   utf-8; 

  # max upload size
  client_max_body_size 75M;  # adjust to taste

  # Django media
  location /media {

    alias /path/to/your/mysite/media; # your Django project's media files - amend as required

  } 

  location /static {

    alias /path/to/your/mysite/static; # your Django project's static files - amend as required

  }

  # Finally, send all non-media requests to the Django server.

  location / {
    uwsgi_pass django;
    include   /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed

  }
}

This conf file tells nginx to serve up media and static files from the filesystem, as well as handle requests that require Django's intervention. For a large deployment it is considered good practice to let one server handle static/media files, and another handle Django applications, but for now, this will do just fine.

Symlink to this file from /etc/nginx/sites-enabled so nginx can see it:

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

Deploying static files

Before running nginx, you have to collect all Django static files in the static folder. First of all you have to edit mysite/settings.py adding:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

and then run

python manage.py collectstatic

此时启动Nginx 和Uwsgi,你的django项目就可以实现高并发啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python图像灰度变换及图像数组操作
Jan 27 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python简单生成8位随机密码的方法
May 24 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
django站点管理详解
Dec 12 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
python实现电脑自动关机
Jun 20 #Python
python3将视频流保存为本地视频文件
Jun 20 #Python
Python操作MySQL数据库的方法
Jun 20 #Python
python实现抖音视频批量下载
Jun 20 #Python
Python 类的特殊成员解析
Jun 20 #Python
python实现音乐下载的统计
Jun 20 #Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 #Python
You might like
PHP中文竖排转换实现方法
2015/10/23 PHP
PHP更安全的密码加密机制Bcrypt详解
2017/06/18 PHP
基于jquery的页面划词搜索JS
2010/09/14 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
微信小程序按钮点击动画效果的实现
2019/09/04 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
Python实现的计算器功能示例
2018/04/26 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
决心书范文
2014/03/11 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
2014年信访工作总结
2014/11/17 职场文书
2015年读书月活动总结
2015/03/26 职场文书
学校标语口号大全
2015/12/26 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
html5调用摄像头实例代码
2021/06/28 HTML / CSS