Django+Nginx+uwsgi 部署网站项目
1.UWsgi
wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了; uwsgi:同WSGI一样是一种通信协议 uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与WSGI相比是两样东西。 uWSGI :一种python web server或称为Server/Gateway uWSGI类似tornadoweb或者flup,是一种python web server,uWSGI是实现了uwsgi和WSGI两种协议的Web服务器,负责响应python 的web请求。
因为apache、nginx等,它们自己都没有解析动态语言如php的功能,而是分派给其他模块来做,比如apache就可以说内置了php模块,让人感觉好像apache就支持php一样。 uWSGI实现了wsgi协议、uwsgi协议、http等协议。 Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
2.nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
3.安装UWsgi
安装 uwsgi uwsgi:https://pypi.python.org/pypi/uWSGI uwsgi 参数详解:http://uwsgi-docs.readthedocs.org/en/latest/Options.html pip install uwsgi uwsgi --version # 查看 uwsgi 版本 测试 uwsgi 是否正常: 新建 test.py 文件,内容如下: def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return "Hello World" 然后在终端运行: uwsgi --http :8001 --wsgi-file test.py 在浏览器内输入:http://你服务ip:8001,查看是否有"Hello World"输出,若没有输出,请检查你的安装过程。
4.安装nginx
安装 Nginx 安装命令如下: cd /temp/dow wget http://nginx.org/download/nginx-1.5.6.tar.gz tar xf nginx-1.5.6.tar.gz cd nginx-1.5.6 ./configure --prefix=/usr/local/nginx-1.5.6 \ --with-http_stub_status_module \ --with-http_gzip_static_module make && make install 保证你的安装nginx能正常提供服务。
5.uwsgi 配置
uwsgi支持ini、xml等多种配置方式,本文以 ini 为例, 在/etc/目录下新建uwsgi9090.ini,添加如下配置: [uwsgi] socket = :8080 #监听提供服务端口,负责和nginx交互 chdir = /web/gatherweb # Django项目地址 module = gatherweb.wsgi # Django提供的wsgi.py. master = true #主进程 workers = 2 # 子进程 processes = 4 # 进程数 vacuum = true # 退出、重启时清理文件 daemonize = /web/weblog/uwsgi9090.log # 日志文件 附django项目目录结构: /web/gatherweb/gatherqq APP目录 /web/gatherweb/gatherweb/settings.py /web/gatherweb/gatherweb/wsgi.py 启动命令: uwsgi --ini /etc/uwsgi9090.ini
6.Nginx 配置
找到nginx的安装目录(如:/usr/local/nginx/),打开配置文件,修改server配置: server { listen 80; server_name localhost ; charset utf-8; access_log /web/weblog/nginx_access.log; error_log /web/weblog/nginx_error.log; client_max_body_size 75M; # 解决admin管理静态文件经过nginx加载失败问题。 # 将django安装目录中admin静态目录拷贝一份到你的项目中即可。 location /static { alias /web/gatherweb/static; } location / { include uwsgi_params; uwsgi_pass 127.0.0.1:8080; #与uwsgi 打交道的端口。 } }
nginx常用命令: nginx -t 测试配置文件 service nginx start service nginx restart service nginx stop service nginx status 在浏览器输入:http://你的域名或者ip,你就可以看到 django 的 "It work" 了。
7.其他安装过程中的问题。
安装 uwsgi 如果失败,有可能是缺少Python的头文件和静态库,需要安装开发版本: For apt (Ubuntu, Debian...): sudo apt-get install python-dev # for python2.x installs sudo apt-get install python3-dev # for python3.x installs For yum (CentOS, RHEL...): sudo yum install python-devel For dnf (Fedora...): sudo dnf install python2-devel # for python2.x installs sudo dnf install python3-devel # for python3.x installs For zypper (openSUSE...): sudo zypper in python-devel # for python2.x installs sudo zypper in python3-devel # for python3.x installs