Nginx+uwsgi+Django部署实战

来源:互联网 发布:身份证识别软件原理 编辑:程序博客网 时间:2024/06/07 22:50

 1) uwsgi+Django实现  http://django-china.cn/topic/101/

Django高版本中已经自动生成了wsgi.py文件,因此直接使用这个文件就可以了,不用自己去新建一个文件。

假如项目名称叫njbsv,则注意一定要是

 --chdir xxx/xxx/njbsv --module njbsv.wsgi

而不能是--chdir xxx/xxx/njbsv/njbsv --module wsgi

因为系统会去设置的os.environ.setdefault("DJANGO_SETTINGS_MODULE", "njbsv.settings") 找njbsv.settings文件才能读取到Django项目的设置信息

uwsgi --http :8000 --chdir /home/range/njbsv --module njbsv.wsgi
通过命令行的方式启动uwsgi服务器,这样所有的http请求都经过uwsgi服务其传递给Django项目程序去处理。


2) Nginx+uwsgi+Django实现 http://django-china.cn/topic/124/

① 配置uwsgi,这次(与之前命令行的方式不一样)是通过uwsgi配置文件(配置文件名为djangochina_socket.xml,在njbsv项目目录之下)的方式来设置服务。

  1 <uwsgi>
  2     <socket>:8077</socket>
  3     <chdir>/home/range/njbsv</chdir>
  4     <module>njbsv.wsgi</module>
  5     <processes>2</processes> <!-- 进程数 -->
  6     <daemonize>logs.uwsgi.log</daemonize>
  7 </uwsgi>

②配置nignx,在/etc/nignx/conf.d/目录下集中了各种server配置文件(每一个server单独一个配置文件),而在/etc/nginx/nginx.conf文件中通过include /etc/nginx/conf.d/*.conf;来包含所有的配置文件。

在conf.d/下新建njbsv的server配置文件njbsv.conf,该server监听8000端口,所有请求通过socket(8077端口)方式交给uwsgi来处理

  1 server {
  2 
  3         listen   8000;
  4         server_name njbsv;
  5         access_log /home/range/njbsv/logs/access.log;
  6         error_log /home/range/njbsv/logs/error.log;
  7 
  8         #charset koi8-r;
  9 
 10         #access_log  logs/host.access.log  main;
 11 
 12         location / {
 13          include        uwsgi_params;
 14          uwsgi_pass     127.0.0.1:8077;
 15         }
 16 
 17 }

③ 重启Nginx使配置信息生效

nginx -s  reload

检查两个日志是否有异常。

④ 启动uswgi服务器(配置写在django_socket.xml文件中)

uwsgi -x django_socket.xml
检查日志是否有异常

关闭uwsgi服务通过kill来操作(killall -9 uwsgi)


--------------------------------参考-----------------------------------

https://github.com/imelucifer/MyNote/blob/master/django/django%2Buwsgi%2Bnginx%2Bcentos%E9%83%A8%E7%BD%B2.md


--------------------------------2015.11.14 update-----------------------------------

有段时间没有管服务器那边了,然后就默默的挂了,可能是之前服务器重启过,于是我重新输入了nohup  uwsgi -x django_socket.xml来重启服务器端程序,但是依然不行,于是一步一步排除原因。

1) 首先在自己笔记本上运行服务器端程序,没问题。

2) 在服务器上直接跑python manage.py runserver 0.0.0.0:8000,没问题。

3) 不用nginx,而是直接用过uwsgi来运行,问题就出来了,会有import error的问题,就是“from django.core.wsgi import get_wsgi_application”这句话引起的,估计应该是uwsgi的问题,于是“ pip install --upgrade uwsgi”更新了uwsgi,这样之后再直接通过uwsgi来运行就没问题了。

4) 再将其运行到nginx上,没问题。

至此,问题得以解决。



0 0