linux下基于nginx/wsgi部署Django项目

1. nginx

安装

启动、停止和重启

或者

2. uWSGI安装

用python的pip安装最简单:

apt-get install python-dev #不安装这个,下面的安装可能会失败

3. 基于uWSGI和nginx部署Django

1.原理

the web client <-> the web server(nginx) <-> the socket <-> uwsgi <-> Django

2.基本测试

测试uWSGI是否正常

在django项目的根目录下创建test.py文件,添加源码如下:

然后,Run uWSGI:

参数含义:

http :8000: 使用http协议,8000端口
wsgi-file test.py: 加载指定文件 test.py
打开下面url,浏览器上应该显示hello world

http://example.com:8000
如果显示正确,说明下面3个环节是通畅的:

the web client <-> uWSGI <-> Python

测试Django项目是否正常

首先确保project本身是正常的:

如果没问题,使用uWSGI把project拉起来:

module mysite.wsgi: 加载wsgi module

如果project能够正常被拉起,说明以下环节是通的:

the web client <-> uWSGI <-> Django

3.配置nginx

安装nginx完成后,如果能正常打开http://hostname,说明下面环节是通畅的:

the web client <-> the web server

增加nginx配置

将uwsgi_params文件拷贝到项目文件夹下。uwsgi_params文件在/etc/nginx/目录下,也可以从这个页面下载
在项目文件夹下创建文件mysite_nginx.conf,填入并修改下面内容:
# mysite_nginx.conf

这个configuration文件告诉nginx从文件系统中拉起media和static文件作为服务,同时相应django的request

在/etc/nginx/sites-enabled目录下创建本文件的连接,使nginx能够使用它:

部署static文件

在django的setting文件中,添加下面一行内容:

然后运行:

测试nginx

首先重启nginx服务:

然后检查media文件是否已经正常拉起:

在目录/path/to/your/project/project/media directory下添加文件meida.png,然后访问http://example.com:8000/media/media.png ,成功后进行下一步测试。

4.nginx and uWSGI and test.py

执行下面代码测试能否让nginx在页面上显示hello, world

访问http://example.com:8000 ,如果显示hello world,则下面环节是否通畅:

the web client <-> the web server <-> the socket <-> uWSGI <-> Python

用UNIX socket取代TCP port

对mysite_nginx.conf做如下修改:

重启nginx,并在此运行uWSGI

打开 http://example.com:8000/ ,看看是否成功

如果没有成功:

检查 nginx error log(/var/log/nginx/error.log)。如果错误如下:

connect() to unix:///path/to/your/mysite/mysite.sock failed (13: Permission
denied)

添加socket权限再次运行:

5.Running the Django application with uswgi and nginx

如果上面一切都显示正常,则下面命令可以拉起django application

每次都运行上面命令拉起django application实在麻烦,使用.ini文件能简化工作,方法如下:

在application目录下创建文件mysite_uwsgi.ini,填入并修改下面内容:

# mysite_uwsgi.ini file
[uwsgi]

现在,只要执行以下命令,就能够拉起django application:

编辑文件/etc/rc.local, 添加下面内容到这行代码之前exit 0:

/usr/local/bin/uwsgi –socket /path/to/mysite.sock –module /path/to/mysite.wsgi –chmod-socket=666
uWSGI的更多配置

暂无评论

发表评论