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

Stella981
• 阅读 709

本节内容

uwsgi 介绍

uwsgi安装使用

nginx安装配置

django with nginx

如何在生产上部署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 安装使用

1

2

3

4

# 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:

1

2

3

4

5

# test.py

def  application(env, start_response):

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

return  [b "Hello World" # python3

#return ["Hello World"] # python2

运行

1

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

用uwsgi 启动django

1

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

启动

1

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

Nginx安装使用

1

2

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# 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:

1

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:

1

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

and then run

1

python manage.py collectstatic

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

转载:http://www.cnblogs.com/alex3714/p/6538374.html

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
陈占占 陈占占
2年前
服务器Ubuntu系统上,利用Nginx+uWSGI部署Django项目(多个项目)
前提已经安装好Nginx和uwsgi。将Django项目上传到服务器上。在项目根目录上,创建uWSGI的配置文件uwsgi.ini。个人简历项目uwsgi.ini配置
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Nginx+uwsgi+ssl配置https
使用原始django,太过于笨重和杂多nginx是一个轻量级的web服务器,在处理静态资源和高并发有优势uwsgi是一个基于python的高效率的协议,处理后端和动态网页有优势所以这里采用静态网页交给nginx解析,动态网页交给uwsgi解析,并且nginx配置ssl,即可以使用出高安全,高效率的部署。步骤我
Stella981 Stella981
3年前
Flask + Gunicorn + Nginx 部署
最近很多朋友都在问我关于Flask部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用Flask了。之前我曾发表过一篇在Ubuntu上用uwsginginx的Flask部署方法,说实在的uwsgi是个大坑可能用在Django上还好吧,不过用在Flask上未必就如此。至少,uwsgi是个极
Stella981 Stella981
3年前
Nginx与uWSGI交互
1\.更改uwsgi的配置文件uwsgi.iniuwsgi...使用nginx连接时,监控地址socket127.0.0.1:8080直接做web服务器时,所监控地址http127.0.0.1:80802\.在nginx配置文件中的路由模块添加uwsgi支持.
Stella981 Stella981
3年前
Django3.0 + nginx + uwsgi 部署
CentOS7.6下部署Django3.0应用,使用nginxuwsgi部署:1\.uwsgi部署pipinstalluwsgi在项目的根目录中,新建文件夹conf,然后进入conf文件夹,并新建文件uwsgi.ini,内容如下:mysite_uwsgi.inifileuws
Stella981 Stella981
3年前
Docker部署Django+nginx+uwsgi环境
Cenos7环境下使用Docker部署Djangonginxuwsgi环境一、系统要求  此处略,详见(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnb
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django + Uwsgi + Nginx 的生产环境部署
DjangoUwsgiNginx的生产环境部署参考网址:https://www.cnblogs.com/chenice/p/6921727.html(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fchenice%2Fp%2F