您的位置:首页 > 运维架构 > Nginx

Nginx+uwsgi+Django部署实战

2015-07-13 11:46 671 查看
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上,没问题。

至此,问题得以解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: