由于最近要做一个创新项目,需要用到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的主要特点如下:
◆超快的性能。
◆低内存占用(实测为apache2的mod_wsgi的一半左右)。
◆多app管理。
◆详尽的日志功能(可以用来分析app性能和瓶颈)。
◆高度可定制(内存大小限制,服务一定次数后重启等)。
这三者之间的原理如下,
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
开始部署
1.安装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;
}
2.安装django
用python自带的包管理器easy_install安装 easy_install django会自动安装最新版本
3.安装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
└── test.py
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中文教程 还是建议去看英文教程,完整点
如上便是我参考的资料