ngix uwsgi django组合建站

由于最近要做一个创新项目,需要用到python web开发,于是研究了一下django这个很全能的python web框架。

为什么需要ngix呢?

首先说一下为什么需要这三者组合建站,只用django的话,不能做到负载均衡,比如需要请求一些静态资源,就需要django全部去处理,不能将请求合理分发,而ngix正好能解决这样的问题(似乎这个项目也不用怎么考虑负载均衡哈~~但是提高逼格总是必须的),ngix通过配置可以将一些动态请求发给django处理,而对于静请求则自己处理,另外如果网站上还要运行php页面,那么ngix绝对是一个很好的选择,将对php的请求分发给apache处理,ngix和apache通过socket端口通信,然后返回给客户端处理后的结果。

然后为什么又需要uwsgi呢?

WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。然后uwsgi是实现了uwsgi和WSGI两种协议的Web服务器。简单点说就是运用uwsgi我们可以实现由uwsgi启动django,然后ngix通过端口与uwsgi通信,在这个过程中,gjango实现了wsgi服务器的功能,ngix实现了wsgi客户端的功能,只不过在web里面,ngix扮演的又是服务器(计算机中的软件通信有很多都是客户端服务器模式。如文件资源就是一个服务,然后应用程序实现了了相应的协议从而去调用这个服务)。这样就实现了uwsgi在ngix和django的中转。

为什么不让ngix直接与django通信呢?

uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍那么快。
uWSGI的主要特点如下:

  1. 超快的性能。
  2. 低内存占用(实测为apache2的mod_wsgi的一半左右)。
  3. 多app管理。
  4. 详尽的日志功能(可以用来分析app性能和瓶颈)。
  5. 高度可定制(内存大小限制,服务一定次数后重启等)。

这三者之间的原理如下,

the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

开始部署

安装ngix sudo apt-get install ngix

由于我的机器上面还有apache,我需要修改ngix的监听端口为8080
修改如下

server {
    listen 8080 default_server;
    listen [::]:8080 default_server ipv6only=on;

    root /var/ngix;  #将根目录改为/var/ngix
    index index.html index.htm;
}

安装django

用python自带的包管理器easy_install安装 easy_install django会自动安装最新版本

安装uwsgi

apt-get install python-dev #不安装这个,下面的安装可能会失败
pip install uwsgi

如果是apt-get安装就需要

sudo apt-get install uwsgi-plugin-python

工具安装好以后就可以开始配置项目了,我用的开发环境是pycharm,可以自动生成django项目,如果不是需要运行django的admin.py生成相应的项目文件下面是我的项目的结构
.
└── myproject
├── app
│ ├── admin.py
│ ├── init.py
│ ├── migrations
│ │ └── init.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── db.sqlite3
├── manage.py
├── myproject
│ ├── django.xml
│ ├── init.py
│ ├── init.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── templates

django.xml文件内容为:


    127.0.0.1:8630
    /var/ngix/myproject/myproject
    ..
    wsgi

这里需要注意的是wsgi模块,网上很多都是错误的,直接用自动生成的就行。
用socket和ngix进行通信,端口号为本机的8630端口
然后需要在ngix的配置文件中添加

location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8630;
}

uwsgi是ngix自带的模块
重启ngix服务,然后启动uwsgi服务

$ uwsgi -x django.xml --plugin python

需要在django.xml所在目录执行

最后在浏览器输入127.0.0.1:8080就可以看见django的调试页面了~~

总结一下学到的其他东西:删除/etc/dpkg/info/下面对应的安装文件,可以解决apt子进程启动出错的问题。删了以后需要autoremove一下

资料分享:wsgi概念 uwsgi概念 基于nginx和uWSGI在Ubuntu上部署Django
如何把uwsgi交给supervisor管理 unavailable-modifier-requested-0解决办法
uwsgi手册 uwsgi部署django常见问题汇总 django中文教程 还是建议去看英文教程,完整点
如上便是我参考的资料

你可能感兴趣的:(ngix uwsgi django组合建站)