首页 > 代码库 > ngix部署

ngix部署

平时在测试环境下的项目不能承载高并发,需要部署到web server上。
web server:
    apache(早期)
    ngix(更能承载高并发、轻量级,底层是I/O多路复用epoll)

如何在生产上部署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性能非常高

技术分享

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 # Install the latest stable release:
2 pip install uwsgi
3 # ... or if you want to install the latest LTS (long term support) release,
4 pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
安装uwsgi

基本测试

Create a file called test.py:

技术分享
1 # test.py
2 def application(env, start_response):
3     start_response(200 OK, [(Content-Type,text/html)])
4     return [b"Hello World"] # python3
5     #return ["Hello World"] # python2
测试代码

 运行

技术分享
1 uwsgi --http :8000 --wsgi-file test.py   #在项目中运行
运行

 用uwsgi启动Django

技术分享
1 uwsgi --http :8000 --module projectname.wsgi
用uwsgi启动Django

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

技术分享
 1 [uwsgi]
 2 http = :9000
 3 # the local unix socket file than commnuincate to Nginx
 4 socket = 127.0.0.1:8001
 5 # the base directory (full path)
 6 chdir = /home/ubuntu/midware
 7 # Django‘s wsgi file
 8 wsgi-file = midware/wsgi.py
 9 # maximum number of worker processes
10 processes = 4
11 # thread numbers startched in each worker process
12 threads = 2
13 # monitor uwsgi status
14 stats = 127.0.0.1:9191
15 # clear environment on exit
16 vacuum  = true
uwsgi.ini

 用uwsgi启动Django

技术分享
1 /usr/local/bin/uwsgi crazye-uwsgi.ini
用uwsgi启动Django

 

技术分享
1 /usr/local/bin/uwsgi midware-uwsgi.ini
用uwsgi启动Django

 

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

  

 

ngix部署