最新nginx部署Django+uWSGI,提高并发

项目流程

  • 客户端访问请求发送到nginx
  • nginx自己处理static请求,通过web socket转发动态请求到uWSGI
  • uWSGI将接收到的包进行处理,转发给wsgi
  • wsgi根据请求调用django项目中的函数,结果返回给wsgi
  • wsgi将结果打包并转发给uWSGI
  • uWSGI将包再转发给nginx
  • nginx再将结果返回给客户端

Django

安装

diango安装包

  • django
  • django-cors-headers

本项目必须的安装包

  • librosa
  • soundfile
  • sklearn
  • ...

如果遇到soundfile引用错误:
OSError: sndfile library not found
解决方案=> apt-get install libsndfile1

测试

python manage.py runserver 0.0.0.0:8000

访问127.0.0.1:8000,看能否正常访问Django网站。
能正常访问,则Django项目成功搭建

注:本文中项目路径为/root/ai_security_platform

Virtualenv

root@iZ8vb7ux6dyyb6a2jkpo2kZ:~# apt-get update
root@iZ8vb7ux6dyyb6a2jkpo2kZ:~# apt-get install python3-pip
root@iZ8vb7ux6dyyb6a2jkpo2kZ:~# pip3 install virtualenv
root@iZ8vb7ux6dyyb6a2jkpo2kZ:~# mkdir vpservers
root@iZ8vb7ux6dyyb6a2jkpo2kZ:~# cd vpserver
root@iZ8vb7ux6dyyb6a2jkpo2kZ:~/vpserver# virtualenv -no-site-packages venv

即创建了新的venv环境,且不包含原系统的Python环境及包

source venv/bin/activate

激活新环境,开始新征程

uWSGI

安装

pip3 install uwsgi

测试

<span id="test_py">

新建test .py

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

python3时,return必须使用b"xxx",否则测试时会出现空白页面,没有显示"hello world"

运行

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

使用uwsgi运行test.py文件, 采用http模式, 端口8000

访问127.0.0.1:8000,页面出现"hello world"则运行成功

Django + uWSGI

uwsgi --http 0.0.0.0:8000 --chdir /root/ai_security_platform --wsgi speaker_recognition.wsgi

--chdir指定工作路径
--wsgi指定wsgi文件,其中speaker_recognition.wsgi表示在speaker_recognition文件夹下的wsgi.py文件

访问127.0.0.1:8000,成功访问则表示django+uWSGI联调成功

Nginx

安装

apt-get install nginx

配置

网上的许多教程中的nginx.conf在新版本中已经删除

修改/etc/nginx/sites-available/default这个文件中的配置:

vim /etc/nginx/sites-available/default

# default文件如下:
upstream django {
        server 127.0.0.1:8001;  #web的socket端口
}

server {
        listen 8000 default_server;
        listen [::]:8000 default_server;

        # root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                root /root/ai_security_platform;
                uwsgi_pass django;
                include /root/ai_security_platform/speaker_recognition/uwsgi_params;

        }
}

测试

nginx

开启nginx服务,若端口占用,则释放掉或者换端口再开
开启成功后,浏览器访问ip:port,出现502 Bad Gateway则说明成功启动,因为web的socket端口还没配置,所以出现502错误

nginx + uWSGI

使用test.py进行测试
运行

uwsgi --socket :8001 --wsgi-file test.py

不同的是,这次测试运行的命令中,--http改为--socket,端口改为上面配置nginx的web socket端口8001

访问上节启动nginx的页面,502变为hello world则联调成功

nginx + uWSGI + Django

uwsgi --socket :8001 --chdir /root/ai_security_platform --wsgi speaker_recognition.wsgi

访问ip:port,成功访问django项目则联调成功

配置文件化

项目中添加uwsgi的配置文件uwsgi.ini:

[uwsgi]
socket = 127.0.0.1:8001
chdir = /root/ai_security_platform/
module = speaker_recognition.wsgi
master = true
processes = 2
threads = 2
max-requests = 2000
chmod-socket = 664
vacuum = true
daemonize = /root/ai_security_platform/log/uwsgi.log
  • socket与nginx中配置的socket端口一致
  • chdir 为项目文件路径
  • module 为项目中wsgi的路径,speaker_recognition.wsgi表示speaker_recognition文件夹下得wsgi.py文件
  • daemonize表示后台运行,并且指定log输出文件

运行:

uwsgi --ini uwsgi.ini

访问nginx配置的地址,正常访问到django项目网站则联调成功

常见问题

  • Nginx : worker-connections are not enough.
    Solution:
    vim /etc/nginx/nginx.conf
events {
    worker_connections  2048;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容