Nginx高端成长之路程序员

nginx+uwsgi+django环境搭建

2019-11-23  本文已影响0人  陈某君

环境搭建

1.安装uwsgi、nginx和django

apt install nginx
pip install uwsgi
pip install django

2.测试uwsgi和nginx的连接

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

  1. 创文件foobar.py

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        return [b"Hello World"] # python3
        #return ["Hello World"] # python2
    
  2. 创文件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
    
  3. 创文件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;
        }
     }
    
  4. 将这个文件链接到/etc/nginx/sites-enabled,这样nginx就可以看到它了
    sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/

  5. 启动nginx
    sudo service nginx start

  6. 启动uwsgi
    uwsgi --ini foobar_uwsgi.ini

  7. 访问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

  1. 建立django项目
    django-admin startproject mysite

  2. 在项目的根目录建立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
    
  3. 在项目根目录建立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/;
         }
     }
    

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

  4. 运行

    # 运行uwsgi
    uwsgi --ini mysite_uwsgi.ini
    # 开启niginx
    sudo service nginx start
    
  5. 测试。访问 127.0.0.1:8099 ,如果看到django的页面,说明成功。

  6. 完整的目录树

    mysite/
    ├── db.sqlite3
    ├── manage.py
    ├── mysite
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-36.pyc
    │   │   ├── settings.cpython-36.pyc
    │   │   ├── urls.cpython-36.pyc
    │   │   └── wsgi.cpython-36.pyc
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── mysite.sock
    ├── mysite_nginx.conf
    ├── mysite_uwsgi.ini
    └── uwsgi_params
    
上一篇 下一篇

猜你喜欢

热点阅读