文档章节

使用uwsgi和nginx部署django应用

alazyer
 alazyer
发布于 2016/03/02 16:41
字数 834
阅读 153
收藏 3

概述

文章是uwsgi关于django部署的学习笔记,过程中涉及:

  • 浏览器
  • nginx服务器
  • linux socket
  • uwsgi服务
  • django应用

最终各个组件之间的关系是 浏览器 <-> nginx服务器 <-> linux socket <-> uwsgi服务 <-> Django应用

  • 当浏览器访问web页面时,如果请求的是静态文件,或者是纯粹html代码是直接从nginx服务器读取就可以了
  • 当请求的是django应用中内容的话,浏览器发生请求时,经过nginx服务器的中转,将请求交给uwsgi进行处理,而uwsgi最终调用django中的具体处理函数进行处理,得到响应,一层层返回给浏览器

验证uwsgi和python之间的交互

首先,创建一个test.py文件用来处理来自浏览器的请求,内容如下:

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

其次,启动uwsgi,并指定test.py进行请求处理

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

最后,打开浏览器,请求http://localhost:8000页面,如果可以看到Hello World的话,说明浏览器 <----> uwsgi服务 <----> python应用这个通道是顺畅的。


验证uwsgi和django之间的交互

首先,创建django项目,比如叫mysite。 其次,启动uwsgi,并指定由mysite.wsgi文件处理请求

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

最后,打开浏览器访问http://localhost:8000页面,如果一切正常的话,访问到的应该是django经典的It worked页面了。如果看到的话,说明浏览器 <----> uwsgi服务 <----> django应用这个通道是同样是顺畅的.


配置ngnix提供django中静态文件的处理

首先,配置nginx使用8000端口,处理/media和/static的请求,其他请求一律交给uwsgi启动的8001端口处理.

# configuration of the server
server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name .example.com; # substitute your machine's IP address or FQDN
    charset     utf-8;

    # max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
        alias /path/to/your/mysite/media;  # your Django project's media files - amend as required
    }

    location /static {
        alias /path/to/your/mysite/static; # your Django project's static files - amend as required
    }

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  http://localhost:8001;
        include     uwsgi_params;
    }
}

其次,在mysite中的settings.py文件中进行如下配置

STATIC_ROOT=os.path.join(BASE_DIR, 'static')
STATIC_URL='/static/'
MEDIA_ROOT=os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

执行python manage.py collectstatic将所有的静态文件收集到指定的位置. 最后,打开浏览器,访问http://localhost:8000/static/js/jquery.min.js。如果一切正常的话,会看到jquery文件,说明nginx已经可以处理用户对静态文件的请求了.


终极整合

首先,使用上面的nginx配置。 其次,使用uwsgi启动django应用

uwsgi --http :8001 --module mysite.wsgi

最后,打开浏览器访问http://localhost:8000,将出现django的it worked,访问http://localhost:8000/static/js/jquery.min.js会出现jquery文件.


更高级的使用方法

  • 使用socket代替http,并使用uwsgi配置文件

    # mysite_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    # the base directory (full path)
    chdir           = /path/to/your/project
    # Django's wsgi file
    module          = project.wsgi
    # the virtualenv (full path)
    home            = /path/to/virtualenv
    
    # process-related settings
    # master
    master          = true
    # maximum number of worker processes
    processes       = 10
    # the socket (use the full path to be safe
    socket          = /path/to/your/project/mysite.sock
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    
  • 将uwsgi设置为开机自启动

    # /etc/rc.local
    /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log
    exit 0
    

© 著作权归作者所有

下一篇: Git学习笔记
alazyer
粉丝 5
博文 68
码字总数 35105
作品 0
程序员
私信 提问
Nginx+uWSGI 部署 Django 应用

常见的 webapp 部署方式采用 或 的方式部署,今天我这备忘下采用的部署方式。 目前我这博客就是采用 Nginx + uWSGI + Python + Django 构建的,部署虽没有php那样扔到目录那么方便,但是并发和...

鉴客
2011/10/26
28.1K
8
nginx + uwsgi + Django 应用部署

今天来看下基于Django开发的应用如何在Centos6环境部署 系统环境:Centos6.5 x64 软件版本:Django 1.9.5 、uwsgi-2.0.13.1 nginx 安装配置(略)请见:http://tchuairen.blog.51cto.com/384811...

qw87112
2018/06/28
0
0
python + django + bootstrap + uWSGI + nginx 环境搭建

原文:http://www.huangdc.com/103 在了解 uWSGI 之前,我们不妨先了解一下 python http服务器? 要使 Python 写的程序能在 Web 上被访问,还需要搭建一个支持 Python 的 HTTP 服务器,列举几...

dchuang
2015/07/19
490
0
Django + Uwagi + Nginx部署,亲自实验

Django + Uwsgi + Nginx 的生产环境部署 使用runserver可以使我们的django项目很便捷的在本地运行起来,但这只能在局域网内访问,如果在生产环境部署django,就要多考虑一些问题了。比如静态...

静水大智
2017/10/28
0
0
Ubuntu 下面部署Django 项目

django 是 python 开源的 web 框架 ,django 本身运行后也是一个轻量级的服务器,可以满足本地的测试,生产环境中的 大量访问, 一般和nginx 和 apache 结合。下面以 Django 与nginx 结合为例...

水滴石川1
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

正则表达式匹配

请实现一个函数用来匹配包括 '.' 和 '*' 的正则表达式。模式中的字符 '.' 表示任意一个字符,而 '*' 表示它前面的字符可以出现任意次(包含 0 次)。 在本题中,匹配是指字符串的所有字符匹配...

Garphy
41分钟前
5
0
Laravel 5.1的多路由文件的配置

默认的路由配置文件只有一个, \app\Http\routes.php。 在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件。 找到加载\app\Http\routes.php的文件, 打开\app\Provid...

mdoo
今天
5
0
Hibernate 5 开始使用指南前言

同时在面向对象软件和关系型数据库进行工作,可能会非常复杂和费时。数据在对象和数据库之间可能会不一致,然后导致开发成本会非常高。 Hibernate 是一个针对 Java 环境的对象关系映射(Obj...

honeymoose
今天
5
0
聊聊nacos ServiceManager的UpdatedServiceProcessor

序 本文主要研究一下nacos ServiceManager的UpdatedServiceProcessor ServiceManager.init nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/ServiceManager.java @Compone......

go4it
今天
7
0
正则表达式的使用(QQ格式的判断与空格的切割)

//正则表达式的使用 public static void main(String[] args) throws IOException, ClassNotFoundException { //test1("123456"); test2("-1 99 kk"); } /** * ......

zhengzhixiang
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部