美文网首页
基于uWSGI和nginx部署Django

基于uWSGI和nginx部署Django

作者: Harvest | 来源:发表于2017-08-28 14:15 被阅读92次

    基于uWSGI和nginx部署Django

    原理

    Web Client <===> Web Server(nginx) <===> The tcp <===> uWSGI <===> Django

    也就是说我们通常这么做:将nginx作为服务器最前端,它接收WEB 即客户端的所有请求,统一管理请求。nginx把所有静态请求自己来处理 (这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理 ,从而完成一次WEB请求

    安装uwsgi

    pip install 
    # Or 安装最新版
    $pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
    

    安装之后简单的测试:创建一个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服务器:

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

    启动django项目


    附张项目结构图

    uwsgi --http :8000 --chdir /usr/projects/WillingDo/ -w WillingDo.wsgi

    WillingDo.wsgi指项目下的wsgi.py文件,django创建项目时会自己生成

    uwsgi一些常用选项

    uwsgi --chdir=/path/to/your/project \
        --module=mysite.wsgi:application \
        --env DJANGO_SETTINGS_MODULE=mysite.settings \
        --master --pidfile=/tmp/project-master.pid \
        --socket=127.0.0.1:49152 \      # can also be a file
        --processes=5 \                 # number of worker processes
        --uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges
        --harakiri=20 \                 # respawn processes taking more than 20 seconds
        --max-requests=5000 \           # respawn processes after serving 5000 requests
        --vacuum \                      # clear environment on exit
        --home=/path/to/virtual/env \   # optional path to a virtualenv
        --daemonize=/var/log/uwsgi/yourproject.log      # background the process  
    

    安装nginx

    sudo apt-get install nginx

    增加些关于nginx的配置

    uwsgi_params文件拷贝到项目文件夹下。uwsgi_params文件在/etc/nginx/目录下,也可以从这个页面下载

    在项目文件夹下创建nginx的配置文件mysite_nginx.conf

    upstream django{
        server 127.0.0.1:8001;
    }//
    server {
        listen         8000;//外界访问端口
        server_name    116.196.87.3;//主机ip,有域名可以填域名
        charset UTF-8;
        access_log      /var/log/nginx/myweb_access.log;
        error_log       /var/log/nginx/myweb_error.log;
    
        client_max_body_size 75M;
    
        location / { 
            include /usr/projects/WillingDo/uwsgi_params;
            uwsgi_pass django;//照应第一行的 django 指的本机IP端口,与myweb_uwsgi.ini中的端口要一致
            uwsgi_read_timeout 2;
        }   
        location /static {
            expires 30d;
            autoindex on; 
            add_header Cache-Control private;
            alias /usr/projects/WillingDo/static/;
         }
     }
    
    

    之前一直没搞懂这些配置是干嘛的,后面好几个blog的都试了遍,终于成功,发现

    include /usr/projects/WillingDo/uwsgi_params;
    uwsgi_pass django;//照应第一行的 django 指的本机IP端口,与myweb_uwsgi.ini中的端口要一致
    

    主要这两行,把nginx与uwsgi关联了起来;保存重启nginx

    service nginx restart

    用.ini文件配置uwsgi

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

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

    [uwsgi]
    
    # Django-related settings
    
    socket = :8001 //对应nginx的配置文件
    
    # the base directory (full path)
    chdir           = /usr/projects/WillingDo
    
    # Django s wsgi file
    # 对于mysite_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。
    module          = WillingDo.wsgi
    
    # process-related settings
    # master
    master          = true
    
    # maximum number of worker processes
    processes       = 4
    
    # ... with appropriate permissions - may be needed
    # chmod-socket    = 664
    # clear environment on exit
    vacuum          = true
    # 这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。
    

    切换到项目目录下,读取mysite_uwsgi.ini文件启动项目

    uwsgi --ini mysite_uwsgi.ini

    访问http://外网ip:你设置的端口应该能行了,如下是我测试的

    2017-08-28_140224.png

    感谢几个大佬 ,参考

    基于nginx和uWSGI在Ubuntu上部署Django

    通过Nginx部署Django(基于ubuntu)

    ubuntu下的django 安装mysql

    相关文章

      网友评论

          本文标题:基于uWSGI和nginx部署Django

          本文链接:https://www.haomeiwen.com/subject/mbfgdxtx.html