Django uWSGI部署

阿里云ubuntu18.04
python3.6
Django2
MySQL5.7

为什么需要uWSGI部署Django

  • Django runserver 可以直接对外服务,但只是用于测试,不安全,性能低。
  • uWSGI可以很好的进行多线程调度,进程监控.监控Django应用,重启应用等功能。
  • uWSGI提供完善的请求日志处理.

环境配置

项目环境的安装
  1. 进入项目目录
cd /home/deployment/django_deployment
  1. Ubuntu下安装项目所需的Python模块
pip install -r packages.txt
  1. 安装uwsgi
pip install uswgi
数据准备
  1. 创建数据库
create database db1 default charset 'utf8';
  1. 执行migrate命令创建表
python manage.py makemigrations
python manage.py migrate
  1. 导入公共基础数据。
收集静态文件
  1. 创建静态文件目录
root@iZ8vbgll9tzu0dgfcvf6s4Z:/home/deployment/django_deployment# mkdir static
root@iZ8vbgll9tzu0dgfcvf6s4Z:/home/deployment/django_deployment#
root@iZ8vbgll9tzu0dgfcvf6s4Z:/home/deployment/django_deployment# ll
total 32
drwxr-xr-x 6 root root 4096 Mar 30 11:05 ./
drwxr-xr-x 3 root root 4096 Mar 29 22:10 ../
-rw-r--r-- 1 root root    0 Mar 29 22:40 db.sqlite3
-rw-r--r-- 1 root root  330 Mar 30 10:53 django-uwsgi.ini
drwxr-xr-x 3 root root 4096 Mar 29 22:40 django_deployment/
drwxr-xr-x 2 root root 4096 Mar 29 23:21 log/
-rwxr-xr-x 1 root root  637 Mar 29 22:10 manage.py*
drwxr-xr-x 2 root root 4096 Mar 30 10:54 pid/
drwxr-xr-x 2 root root 4096 Mar 30 11:05 static/
root@iZ8vbgll9tzu0dgfcvf6s4Z:/home/deployment/django_deployment#
  1. 修改settings.py配置文件添加配置项
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'common_static'),)
  • STATIC_ROOT 是在执行pyhtonmanage.pycollectstatic时所有的静态文件存放的目录,django会自动查找APP中static目录下的文件并复制到STATIC_ROOT目录下。
  • STATICFILES_DIRS:STATICFILES_DIRS告诉django APP以外的静态文件位置。
  1. 执行命令收集静态文件
python manage.py collectstatic

uwsgi配置

命令行启动
# uwsgi --http :8000 --module django_deployment.wsgi --static-map /static=static &
# uwsgi --http :8000 --module django_deployment.wsgi --static-map /static=static
uwsgi --chdir /home/deployment/django_deployment --module django_deployment.wsgi --http-socket :8000 --max-requests 5000 --processes 4
  • & 表示后台运行,也可不加。
配置文件启动
  1. 项目根目录下创建django-uwsgi.ini文件
[uwsgi]
chdir=/home/deployment/django_deployment
module=django_deployment.wsgi
# wsgi-file=django_deployment/wsgi.py
http-socket=:8000
# http = [ip]:port
master=true
processes=4
# workers=4  # 指定进程数,等同于processes
threads=2
vacuum=true

# 静态文件
# static-map=/static=static_file

# 后台启动
# 日志文件位置
daemonize=%(chdir)/log/uwsgi-8000.log
# 日志文件大小byte
log-maxsize = 1024000000  # 1G,单位字节byte
# 进程id信息
pidfile = %(chdir)/pid/uwsgi-8000.pid

    • 创建对应文件夹
# cd /root/work/ds
# mkdir log
# mkdir pid
  1. 启动:
# uwsgi --ini django-uwsgi.ini
[uWSGI] getting INI configuration from django-uwsgi.ini
#
# ps -aux | grep uwsgi
root      1248  4.5  1.8 115064 36744 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1250  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1251  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1252  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1253  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1255  0.0  0.0  16156  1036 pts/1    S+   10:45   0:00 grep --color=auto uwsgi
#
  1. 停止
# uwsgi --stop pid/uwsgi-8000.pid
#
# ps -aux | grep uwsgi
root      1238  0.0  0.0  16156  1084 pts/1    S+   10:44   0:00 grep --color=auto uwsgi
#
查看uWSGI进程
# ps -aux | grep uwsgi
root      1248  4.5  1.8 115064 36744 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1250  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1251  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1252  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1253  0.0  1.4 115064 28856 ?        S    10:45   0:00 uwsgi --ini django-uwsgi.ini
root      1255  0.0  0.0  16156  1036 pts/1    S+   10:45   0:00 grep --color=auto uwsgi
#

一个主进程和4个配置文件设置的工作进程。

uWSGI参数说明

官方文档

static-map

uWSGI服务器可以完美提供静态文件服务,但是并不如一个专用的web服务器,例如Nginx,那么快速有效。

使用uWSGI提供静态文件,设置静态文件挂载点的方式“映射”指定请求前缀到你的文件系统上的物理目录。
--static-map mountpoint=path选项可以实现此目的。

例:--static-map /images=/var/www/img

如果你接收到一个对·/images/logo.png的请求,并且本地文件系统中/var/www/img/logo.png存在,那么将会提供它。否则,你的Django应用会管理这个请求。
你可以多次指定 --static-map 选项,即使是对于同一个挂载点。--static-map /images=/var/www/img --static-map /images=/var/www/img2 --static-map /images=/var/www/img3。在找到文件之前会在每个目录中进行搜索,如果找不到,这个请求就会交由你的应用管理。

max-requests

max-requests = 5000
为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,那么该工作进程就会被回收重用(重启)。你可以使用这个选项来默默地对抗内存泄漏

开放端口

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值