当前位置 主页 > 网站技术 > 代码类 >

    nginx+uwsgi+django环境搭建的方法步骤

    栏目:代码类 时间:2019-11-25 09:09

    环境搭建

    1.安装uwsgi、nginx和django

    apt install nginx
    pip install uwsgi
    pip install django
    

    2.测试uwsgi和nginx的连接

    PS:下面的例子采用的是 unix socket 的链接发送

    创文件foobar.py

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

    创文件foobar_uwsgi.ini

    [uwsgi]
    
    # Django-related settings
    # the base directory (full path)
    chdir      = /home/dmd/project/ENV/mysite
    # Django's wsgi file
    module     = foobar
    
    # process-related settings
    # master
    master     = true
    # maximum number of worker processes
    processes    = 10
    # the socket (use the full path to be safe
    socket     = /home/dmd/project/ENV/mysite/foobar.sock
    # ... with appropriate permissions - may be needed
    # chmod-socket  = 664
    # clear environment on exit
    # 这个配置本来是true,即退出就删掉socket,但这会导致nginx的启动失败,所以改为false
    vacuum     = false
    
    

    创文件foobar_nginx.conf

    server {
      listen     8099;
      server_name  127.0.0.1
      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 uwsgi_params;
        uwsgi_pass unix:///home/dmd/project/ENV/mysite/foobar.sock; # 用unix socket
        # uwsgi_pass 127.0.0.1:8000 # 用TCP socket
        uwsgi_read_timeout 2;
      }
     }
    
    

    将这个文件链接到/etc/nginx/sites-enabled,这样nginx就可以看到它了

    sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

    启动nginx

    sudo service nginx start
    

    启动uwsgi

    uwsgi --ini foobar_uwsgi.ini
    

    访问127.0.0.1:8099,如果出现“Hello world”就说明下面连接栈是成功的。

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

    3.建立整个连接栈

    the web client <-> the web server <-> the socket <-> uwsgi <-> Django

    建立django项目

    django-admin startproject mysite

    在项目的根目录建立mysite_uwsgi.ini

    # myweb_uwsgi.ini file
    [uwsgi]
    
    # Django-related settings
    
    socket = mysite.sock
    
    # the base directory (full path)
    chdir      = /home/dmd/project/ENV/mysite
    
    # Django s wsgi file
    module     = mysite.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     = false
    
    

    在项目根目录建立mysite_nginx.conf

    server {
      listen     8099;
      server_name  127.0.0.1
      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 uwsgi_params;
        uwsgi_pass unix:///home/dmd/project/ENV/mysite/mysite.sock; # 用unix socket
        # uwsgi_pass 127.0.0.1:8000 # 用TCP socket
        uwsgi_read_timeout 2;
      }
      location /static {
        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias /home/dmd/project/ENV/mysite/static/;
       }
     }