Django使用nginx部署

来源:互联网 发布:node express 中间件 编辑:程序博客网 时间:2024/05/22 17:18

Django使用nginx部署


原文使用连接
本文默认已经安装django和pip

Django使用nginx部署需要用到python uwsgi模块。
可能遇到的问题:需要安装pythonX.Y-dev,安装uwsgi编译时依赖。Centos叫做pythonX.Y-devel。

pip install uwsgi

1.安装完成之后一个基本的测试,测试uwsgi是否工作正常:

# test.pydef application(env, start_response):    start_response('200 OK', [('Content-Type','text/html')])    return [b"Hello World"] # python3    #return ["Hello World"] # python2

使用uwsgi启动

uwsgi --http:8000 --wsgi-file test.py

参数含义:

  • http:8000 使用http协议占用8000端口
  • wsgi-file test.py 加载文件 test.py

在浏览器中访问 http://127.0.0.1:8000 应该能够看到 hello world显示在网页上。
程序访问流程:网页->uwsgi->python
** 目前为止,uwsgi工作正常。

2.测试Django项目

Django目前的项目结构大致如下:

website - Django startserver生成的整体项目文件

manage.py
website - Django startserver生成的整体项目文件
app - Django startapp生成的应用项目文件

先确保Django项目运行无异常,这时应该能够看到Django访问正常的界面

python manage.py runserver 0.0.0.0:8000

如果 http://127.0.0.1:8000 访问正常,那么接下来使用uwsgi启动Django

uwsgi --http :8000 --module website.wsgi

  • module website.wsgi 加载wsgi模块,此命令需要在website目录下执行,其他目录加全路径也会报内部错误

** 目前为止,uwsgi+django工作正常。

3.测试nginx+wsgi

安装nginx,创建website.conf配置文件,并放置到文件夹/etc/nginx/servers或者/usr/local/etc/nginx/servers下,为什么要放到此路径下,是因为/etc/nginx/nginx.conf或者/usr/local/etc/nginx/nginx.conf中有一句include servers/*,这样配置比较方便。

# website.confupstream django {    # server unix:///path/to/your/mysite/mysite.sock; # 后面用到    server 127.0.0.1:8000; # 监听的ip及端口}server {    listen      9000; # 监听端口9000    server_name 127.0.0.1;    charset     utf-8;    client_max_body_size 75M;   # 最大上传文件大小    # 测试文件夹    location /media  {        alias /path/to/your/website/media;  # 静态文件文件夹    }    location / {        uwsgi_pass  django;        include     /path/to/your/mysite/uwsgi_params; # 一般可以直接使用nginx路径下的uwsgi_params,路径一般在/etc/nginx/uwsgi_params或者/usr/local/etc/nginx/uwsgi_params    }}

此时文件结构

website - Django startserver生成的整体项目文件

manage.py
website - Django startserver生成的整体项目文件
app - Django startapp生成的应用项目文件
media - 静态文件夹,可以向其中添加一些图片测试用

启动nginx

nginx

打开网页 http://127.0.0.1:9000/media/pic.png 应该能够看到一张图片
** 目前为止 nginx工作正常
启动uwsgi

uwsgi --socket :8000 --wsgi-file test.py

  • socket :8000 使用uwsgi协议,端口8000

与之前的不同是,此处使用socket通讯,因为nginx与uwsgi的协议必须使用socket
打开网页 http://127.0.0.1:9000 应该能够hello world界面。
打开网页 http://127.0.0.1:8000 应该看到网页加载失败。

** 目前为止 nginx+uwsgi工作正常

4.django+uwsgi+nginx

使用网络端口sock不是很好,更好的办法是使用文件socket,下面使用文件socket启动。
使用uwsgi启动django

uwsgi --socket website.sock --wsgi-file test.py

  • website.sock会在命令执行的时候自动创建

同时修改 website.conf中的文件

upstream django {    server unix:///path/to/your/mysite/mysite.sock; # 连接uwsgi启动时创建的website.sock    # server 127.0.0.1:8000; # 监听的ip及端口}

接下来使用uwsgi启动django,推荐也采用配置文件的方式:
配置文件如下django.ini

[uwsgi]chdir = /path/to/your/mysite/   # 工作路径module = website.wsgi           # 文件不存在,这样写就行socket = /path/to/your/mysite/website.sock  # 文件可以不存在,uwsgi启动时创建chmod-socket = 664                          # 没有权限的时候添加,没有权限问题可以去掉master = true                               # 是否有守护进程processes = 8                               # 启动多少个进程vacuum = true                               # 退出的时候是否删除运行时产生的临时文件daemonize = /path/to/your/mysite/log.log    # 指定日志文件,启动的时候后台启动pidfile = /path/to/your/mysite/pidfile.pid  # pid文件,感觉十分必要,不然uwsgi关闭非常费劲,指定pid文件之后可以使用uwsgi --stop /path/to/your/mysite/pidfile.pid 关闭uwsgi启动的进程

使用uwsgi启动django项目:

uwsgi –ini /path/to/your/mysite/django.ini

至此打开 http://127.0.0.1:9000 就能看到django正常的界面。

0 0
原创粉丝点击