前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx+uWSGI为Django提供高并发

Nginx+uWSGI为Django提供高并发

作者头像
Autooooooo
发布2020-11-09 11:29:23
1.8K0
发布2020-11-09 11:29:23
举报
文章被收录于专栏:CoxhuangCoxhuang

Nginx+uwsgi部署Django

#0 GitHub

代码语言:javascript
复制
None

#1 环境

代码语言:javascript
复制
CentOS6.9 ( 腾讯云服务器 )
Python 3.6.4
Django==2.0.7

#2 开始

#2.1 新建一个Django项目

项目根目录(把django项目放在opt目录下)

代码语言:javascript
复制
/opt/pro

#2.2 项目结构

工程名:pro app名:app

代码语言:javascript
复制
.
├── app
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
├── pro
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── templates

#2.3 修改settings.py

因为不涉及到数据库,所以把数据库配置删掉

代码语言:javascript
复制
#DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

允许所有url访问

代码语言:javascript
复制
ALLOWED_HOSTS = ["*"]

#3 uwsgi

#3.1 安装uwsgi

代码语言:javascript
复制
pip3 install uwsgi

#3.2 使用uwsgi启动django项目

安装django

代码语言:javascript
复制
pip3 install django==2.0.7

进入项目根目录(/opt/pro)

代码语言:javascript
复制
cd /opt/pro/ 
uwsgi --http 0.0.0.0:8080 --file pro/wsgi.py --static-map=/static=static

解释上述命令

代码语言:javascript
复制
--http 0.0.0.0:8080 # 指定ip,因为我用的是云服务器,所以是0.0.0.0,如果用的是虚拟机,把0.0.0.0改成虚拟机内网ip(猜测,没有实践过)
--file pro/wsgi.py # 指定django项目中wsgi.py文件
--static-map=/static=static # 静态文件

#3.3 使用uwsgi配置文件启动django项目(重点)

在项目根目录下新建文件夹 script

代码语言:javascript
复制
cd /opt/pro/ 
mkdir script

在script目录下新建 uwsgi.ini

代码语言:javascript
复制
cd script
vim uwsgi.ini

填入以下内容

代码语言:javascript
复制
# uwsig使用配置文件启动                                                                                                    
[uwsgi]                                                                                                                    
# 项目目录                                                                                                                 
chdir=/opt/pro/                                                                                                            
# 指定项目的application                                                                                                    
module=pro.wsgi:application                                                                                                
# 指定sock的文件路径                                                                                                       
socket=/opt/pro/script/uwsgi.sock                                                                                          
# 进程个数                                                                                                                 
workers=5                                                                                                                  
pidfile=/opt/pro/script/uwsgi.pid                                                                                          
# 指定IP端口 云服务器需要改成 0.0.0.0                                                                                      
http=0.0.0.0:8080                                                                                                          
# 指定静态文件                                                                                                             
static-map=/static=/opt/pro/pro/static                                                                                     
# 启动uwsgi的用户名和用户组                                                                                                
uid=root                                                                                                                   
gid=root                                                                                                                   
# 启用主进程                                                                                                               
master=true                                                                                                                
# 自动移除unix Socket和pid文件当服务停止的时候                                                                             
vacuum=true                                                                                                                
# 序列化接受的内容,如果可能的话                                                                                           
thunder-lock=true                                                                                                          
# 启用线程                                                                                                                 
enable-threads=true                                                                                                        
# 设置自中断时间                                                                                                           
harakiri=30                                                                                                                
# 设置缓冲                                                                                                                 
post-buffering=4096                                                                                                        
# 设置日志目录                                                                                                             
daemonize=/opt/pro/script/uwsgi.log 

启动uwsgi

代码语言:javascript
复制
cd /opt/pro/script/ 
uwsgi --ini uwsgi.ini # 启动uwsgi

uwsgi相关操作

代码语言:javascript
复制
uwsgi --ini uwsgi.ini # 启动
uwsgi --stop uwsgi.pid # 关闭

#4 Nginx

#4.1 安装Nginx

配置yum源

代码语言:javascript
复制
vim /etc/yum.repos.d/nginx.repo
代码语言:javascript
复制
[nginx]
name=nginx repo
# 下面这行centos根据你自己的操作系统修改比如:OS/rehel
# 6是你Linux系统的版本,可以通过URL查看路径是否正确
baseurl=http://nginx.org/packages/centos/6/\$basearch/
gpgcheck=0
enabled=1

安装nginx

代码语言:javascript
复制
yum -y install nginx

测试是否安装完成,命令启动nginx

代码语言:javascript
复制
/etc/init.d/nginx start

#4.2 Django + Uwsgi + Nginx

创建配置文件

代码语言:javascript
复制
cd /etc/nginx/conf.d/
vim pro.conf
代码语言:javascript
复制
server {                                                                                                               
        listen 80;                                            
        server_name 192.144.190.22; # 如果服务器已经被域名解析,必须填域名                        
        access_log  /var/log/nginx/access.log  main;                                                           
        charset  utf-8;                                                 
        gzip on;                                              
        gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;                          
        error_page  404           /404.html;                                                                   
        error_page   500 502 503 504  /50x.html;          
        # 指定项目路径uwsgi                                      
        location / {                                            
            include uwsgi_params;                  
            uwsgi_connect_timeout 30;                               
            uwsgi_pass unix:/opt/pro/script/uwsgi.sock;              
        }                                                        
        # 指定静态文件路径                                       
        location /static/ {                                    
            alias  /opt/pro/pro/static/;                                            
            index  index.html index.htm;                               
        }   
    }

完美 !!!

Nginx相关命令

代码语言:javascript
复制
/etc/init.d/nginx start # 开始
/etc/init.d/nginx stop # 关闭
/etc/init.d/nginx restart # 重启

#5 注意

  • 用Nginx+uwsgi部署django,必须Nginx和uwsgi都启动

#6 番外篇

#1 uWSGI

# 启动django
代码语言:javascript
复制
# file : Django项目中wsgi.py文件路径
uwsgi --http 0.0.0.0:8000 --file Demo/wsgi.py
# uWSGI参数

参数

说明

http

地址和端口号,例如:uwsgi --http 0.0.0.0:8000

socket

地址和端口号,例如:uwsgi --socket :8001

listen

设置socket的监听队列大小(默认:100)

processes

开启的进程数量

workers

开启的进程数量,等同于processes

threads

运行线程(processes的线程数)

master

允许主进程存在,启动主进程,来管理其他进程,其它的uwsgi进程都是这个master进程的子进程,如果kill这个master进程,相当于重启所有的uwsgi进程。

daemonize

使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

log-maxsize

以固定的文件大小(单位KB),切割日志文件

pidfile

指定pid文件的位置,记录主进程的pid号。

chdir

指定运行目录

wsgi-file

载入wsgi-file

stats

在指定的地址上,开启状态服务

vacuum

当服务器退出的时候自动清理环境,删除unix socket文件和pid文件

disable-logging

不记录请求信息的日志。只记录错误以及uWSGI内部消息到日志中。如果不开启这项,那么你的日志中会大量出现这种记录

  • http 和 socket 的区别

http : nginx 和 uwsgi 中间走的是 http 协议,文本

socket : nginx 和 uwsgi 中间走的是 wsgi 协议,二进制

生产环境百分之九十九是 unix Socket 的方式,ngnix 是做反向代理用的,因为 uwsgi 不具备路由、过滤等方向代理功能,但论执行效率,可以做性能测试,如果是 http 协议的话,性能是没有 unix Socket 方式好的

# uWSGI 加进程启动Django
代码语言:javascript
复制
# 添加4个进程,每个进程2个线程

uwsgi --http 0.0.0.0:8000 --file Demo/wsgi.py --processes 4 --threads 2

#2 Nginx

未完待续…

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-02-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx+uwsgi部署Django
  • #0 GitHub
  • #1 环境
  • #2 开始
    • #2.1 新建一个Django项目
      • #2.2 项目结构
        • #2.3 修改settings.py
        • #3 uwsgi
          • #3.1 安装uwsgi
            • #3.2 使用uwsgi启动django项目
              • #3.3 使用uwsgi配置文件启动django项目(重点)
              • #4 Nginx
                • #4.1 安装Nginx
                  • #4.2 Django + Uwsgi + Nginx
                  • #5 注意
                  • #6 番外篇
                    • #1 uWSGI
                      • # 启动django
                      • # uWSGI参数
                      • # uWSGI 加进程启动Django
                    • #2 Nginx
                    相关产品与服务
                    云服务器
                    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档