Nginx + uwsgi + django + websocket(dwebsocket)環境部署

1.安裝nginx(/export/servers/nginx/)

保證/export/servers/nginx/是nginx的安裝目錄
/export/servers/nginx/conf/domain/xxx應用配置文件python

2.部署django環境,保證python manage.py runserver 0.0.0.0:8000能正常跑起來,websocket能調通

1.項目名稱:Python_20160906,裏面有2個應用
2.一個應用名字叫app,一個叫作api
3.項目路徑/export/App/DevOPS/Python_20160906
圖1
uwsgi相關的東西在下圖這個配置文件中(項目settings.py文件目錄下)
圖2nginx

3.uwsgi

(1)安裝web

pip install uwsgi

(2)測試是否安裝成功(uwsgi開啓服務)django

--home:指定virtualenv的環境目錄,若是沒用virtualenv的話不用指定可選
--chdir:指定django項目的根路徑:/export/App/DevOPS/Python_20160906
-w 指定django項目的wsgi文件位置,就是如圖2的東西(由於項目目錄爲/export/App/DevOPS/Python_20160906,項目目錄下還有個同名目錄Python_20160906,存放項目配置文件的地方,裏面有個wsgi.py文件,因此寫做Python_20160906.wsgi)
# uwsgi --http :8000 --home /home/siva/Env/first --chdir /export/App/DevOPS/Python_20160906 -w Siva_First.wsgi
uwsgi --http :8000 --chdir /export/App/DevOPS/Python_20160906 -w Python_20160906.wsgi

(3)直接訪問驗證vim

curl http://127.0.0.1:8000/

4.寫uwsgi配置文件(確定不能手工命令起啊)

mkdir -p /export/servers/nginx/conf/uwsgi/
cd /export/servers/nginx/conf/uwsgi/
vim Python_20160906.ini

<1>project:項目名
<2>chdir:指定django項目的根路徑
<3>module:對應了上面命令行啓動的-w參數,指定django項目的wsgi文件位置
<4>master:是否有主進程
<5>processes:幾個工做進程
<6>socket:建立的socket套接字文件位置
<7>chmod-socket:套接字權限
<8>vacuum:當服務器退出的時候自動刪除unix socket文件和pid文件後端

[uwsgi]
project = Python_20160906
 
chdir = /export/App/DevOPS/%(project)
module = %(project).wsgi
 
master = true
processes = 5
 
socket = /export/App/DevOPS/%(project)/%(project).sock
chmod-socket = 664
vacuum = true

5.開啓uwsgi服務(啓動後會建立sock套接字文件)

uwsgi --ini /export/servers/nginx/conf/uwsgi/Python_20160906.ini &

6.變動nginx配置文件

map $http_upgrade $connection_upgrade {
        default upgrade;
        ''   close;
}
server
                {
    
                listen                   80;
                server_name              devops.xx.com devops.xx.local;
                access_log               /export/servers/nginx/logs/devops.xx.local/devops.xx.local_access.log main;
                error_log                /export/servers/nginx/logs/devops.xx.local/devops.xx.local_error.log warn;
                error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 506 = http://www.jd.com/error2.aspx;
                    charset     utf-8;
    # #########################核心配置就這2行#########################################
      location / {
                include         /export/servers/nginx/conf/uwsgi_params;
                uwsgi_pass      unix:/export/App/DevOPS/Python_20160906/Python_20160906.sock;
        }
    #################################################################################
      location /static/ {
            alias   /export/App/DevOPS/Python_20160906/static/;
        }
      # websocket的匹配
      location ~ /index/websocket_demo/ {
            include     /export/servers/nginx/conf/uwsgi_params;
            uwsgi_pass      unix:/export/App/DevOPS/Python_20160906/Python_20160906.sock;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    }
        location = / {
            rewrite ^ /index/ permanent;
        }
        location = /favicon.ico {
            rewrite ^ /static/image/favicon.ico permanent;
    }
        location /devops/ {
            rewrite ^/devops/(.*)$ /$1 last;
    }
        location /software/ {
            alias /export/Data/software/;
            allow all;
            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on; 
        }
}

8.重啓nginx

/etc/init.d/nginx restart

9.uwsgi支持django後端的websocket(dwebsocket模塊)

(1)修改django項目的settings.py,添加一條數據api

WEBSOCKET_FACTORY_CLASS = 'dwebsocket.backends.uwsgi.factory.uWsgiWebSocketFactory'

(2)修改uwsgi的配置文件,添加異步選項bash

async = 30
ugreen = ''
http-timeout = 300

(3)重啓uwsgi服務服務器

killall uwsgi
相關文章
相關標籤/搜索