环境
- Django 1.11
- CentOS 7.2
- Python 2.7.11
使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态文件处理,安全,效率等等,本篇文章总结归纳了一下基于uwsgi+Nginx下django项目生产环境的部署
经测试,网上大部分教程在Django1.11的情况下,使用uwsgi进行反向代理,django应用无法正常运行,故对现有资料整理后,整理出django1.11通过uWSGI的方式启动,提供动静分离的访问方式。
一、安装依赖包
yum install python-pip -y
yum install python-devel
pip install django
pip install uwsgi
注意:直接使用pip 命令安装uwsgi可能会导致失败。按照官方文档,可使用解决
pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
这样大体的流程是:nginx作为服务器最前端,负责接收client的所有请求,统一管理。静态请求由Nginx自己处理。非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。
通信原理是:
the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django
二、 测试uwsgi
在linux上创建一个Django项目,这个不详述。可详见django官方文档。该测试文档目录结构如下:
[root@localhost djangoproject]# tree
.
├── db.sqlite3
├── djangoproject
│ ├── __init__.py
│ ├── __init__.pyc
│ ├── settings.py
│ ├── settings.pyc
│ ├── urls.py
│ ├── urls.pyc
│ ├── wsgi.py
│ └── wsgi.pyc
├── manage.py
├── nohup.out
├── test.py
└── uwsgi.ini
完成后,执行shell命令。
uwsgi --http :8000 --wsgi-file djangoproject/wsgi.py
报错信息1:
uwsgi: option '--http' is ambiguous; possibilities: '--http-socket' '--https-socket-modifier2' '--https-socket-modifier1' '--https-socket' '--http-socket-modifier2' '--http-socket-modifier1'
getopt_long() error
参考文档将启动参数改为:
uwsgi