使用Gunicorn 来部署Django应用, 没有一步一步写怎么操作,简单记录下重要的点,方面以后查阅。 主要的方式还是Nginx反向代理到Gunicorn, Gunicorn wsgi来启动Django。

特点

  • Gunicorn是基于prefork模式的Python wsgi应用服务器,支持 Unix like的系统

  • 采用epoll (Linux下) 非阻塞网络I/O 模型

  • 多种Worker类型可以选择 同步的,基于事件的(gevent tornado等),基于多线程的

  • 高性能,比之uwsgi不相上下

  • 配置使用非常简单

  • 支持 Python 2.x >= 2.6 or Python 3.x >= 3.2

操作

Gunicron 安装很简单 pip install gunicorn或者用easy_install ,源码方式都可以,基本是纯Python代码,安装一般比较顺利,最好配合 virtualenv一起使用。

django最简单部署(wsgi只的是django项目中的wsgi.py文件)

gunicorn wsgi:application
#8个worker
gunicorn -w 8 wsgi:application
#指定端口号
gunicorn -w 8 -b 0.0.0.0:8888 wsgi:application
#unix socket
gunicorn -w 8 --bind unix:/xx/mysock.sock wsgi:application
#使用gevent做异步(默认worker是同步的)
gunicorn -w 8 --bind 0.0.0.0:8000 -k 'gevent' wsgi:application
#选项挺多,看文档或者使用 --help都可以查看
--log-level=DEBUG
--timeout=100

参考脚本

以下只是些参考样例,并不是实际部署配置等。

  • how-to-deploy-python-wsgi-apps-using-gunicorn-http-server-behind-nginx

部署脚本 参考一

#!/bin/bash
NAME="djangotut" # Name of the application
DJANGODIR=/xxx/django_project # Django project directory
SOCKFILE=/xxx/gunicorn.sock # we will communicte using this unix socket
USER=osboxes # the user to run as
GROUP=osboxes # the group to run as
NUM_WORKERS=8 # how many worker processes should Gunicorn spawn
MAX_REQUESTS=100000 # reload the application server for each request
DJANGO_SETTINGS_MODULE=django_project.settings # which settings file should Django use
DJANGO_WSGI_MODULE=django_project.wsgi # WSGI module name
echo “Starting $NAME as `whoami`”
# Activate the virtual environment
cd $DJANGODIR
source ~/.virtualenvs/django-tutorial-env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn’t exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use –daemon)
exec ~/.virtualenvs/django-tutorial-env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
–name $NAME \
–workers $NUM_WORKERS \
–max-requests $MAX_REQUESTS \
–user=$USER –group=$GROUP \
–bind=0.0.0.0:3000 \
–log-level=error \
–log-file=-

自己用的一个简单的shell脚本,参考二

#!/bin/sh
#file: gun.sh
#start and stop gunicorn+django app
P=8000
worker=1
host="0.0.0.0"
case "$@" instart)gunicorn -b $host:$P -w $worker -k 'gevent' wsgi:application -D;;stop)kill -9 `ps aux|grep gunicorn|grep $P|awk '{print $2}'|xargs`;;restart)kill -9 `ps aux|grep gunicorn|grep $P|awk '{print $2}'|xargs`sleep 1gunicorn -b $host:$P -w $worker -k 'gevent' wsgi:application -D;;reload)ps aux |grep gunicorn |grep $P | awk '{print $2}'|xargs kill -HUP;;status)pids=$(ps aux|grep gunicorn|grep $P)echo "$pids";;*)echo 'unknown arguments args(start|stop|restart|status|reload)'exit 1;;
esac

nginx 配置样例

server {listen 80;server_name 0.0.0.0;client_max_body_size 4G;location /static/ {alias /xxx/static/;}location /media/ {alias /xxx/media/;}location / {proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $http_host;proxy_redirect off;# Try to serve static files from nginx, no point in making an# *application* server like Unicorn/Rainbows! serve static files.if (!-f $request_filename) {proxy_pass http://app_server;break;}}
}

优化

  • 采用 meinheld 来代替默认的那些worker,这也是一个基于事件的async worker,但是比gevent等更快。

pip install -U meinheldgunicorn --workers=2 --worker-class="egg:meinheld#gunicorn_worker" wsgi

【Django】 gunicorn部署纪要相关推荐

  1. 使用uwsgi和gunicorn部署Django项目

    https://uwsgi-docs.readthedocs.io/en/latest/Management.html https://uwsgi-docs.readthedocs.io/en/lat ...

  2. 容器化部署实践之Django应用部署(二)

    上一篇文章有些同学感觉不够详细理解起来有些困难,我再来简单解释一下. 我们在开发的情况下:     浏览器请求→ python manage.py runserver(比如8000) → 到应用代码( ...

  3. 如何将本地python项目部署到服务器上_如何将本地的Django项目部署到云服务器

    如何将本地的Django项目部署到云服务器 开发环境 开发语言: Python 后台框架:Django 前端框架:bootstrap web服务器:nginx wsgi服务器:uwsgi 查看本地项目 ...

  4. 关于 WSGI、uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述

    关于 WSGI.uwsgi和uWSGI的区别及基于 uWSGI和gunicorn 部署python web 简述 引言 最近基于 Flask Web框架在开发一个后端项目,在Web Server和 F ...

  5. django 部署_狂野的Django:部署生存的技巧

    django 部署 by Ali Alavi 通过Ali Alavi 狂野的Django:部署生存的技巧 (Django in the wild: tips for deployment surviv ...

  6. 基于docker+gunicorn部署sanic项目

    基于docker+gunicorn部署sanic项目 源代码: https://github.com/ltoddy/Python-useful/tree/master/sanic-app 最近云服务提 ...

  7. 基于华为云的Django网站部署

    学习笔记,仅供参考,有错必纠 参考自:Xshell远程连接服务器:win10 开启ssh server服务 远程登录 文章目录 基于华为云的Django网站部署 远程登录华为云 Xftp+Xshell ...

  8. gunicorn部署Flask服务

    作为一个Python选手,工作中需要的一些服务接口一般会用Flask来开发. Flask非常容易上手,它自带的app.run(host="0.0.0.0", port=7001)用 ...

  9. Django项目部署在Centos7

    把Django项目部署在Centos7下 先有一个Django项目 一个员工管理系统(ems) 员工管理系统 使用VMware创建一个虚拟的Linux系统 Centos7下安装MySql5.7 详细安 ...

最新文章

  1. redis 亿级查询速度_Redis 性能优化的 13 条军规!史上最全
  2. 高通首次推出AI引擎 打包所有软硬件算力
  3. MySQL服务启动脚本
  4. 小米今日正式进军越南市场 借助合作方铺渠道分销
  5. jsp cookie 中文乱码 的解决方法
  6. VM:Vmware简介、安装、使用方法详细攻略
  7. when is OData model initialized - finally found done by Framework
  8. 用java编程实现集合的交、并、差和补运算
  9. java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇
  10. 【Tensorflow】Tensorflow中的卷积函数(conv2d、slim.conv2d、depthwise_conv2d、conv2d_transpose)
  11. CGContextRef:mask和layer绘图
  12. Android Support兼容包详解
  13. qt控制程序打开记事本_Qt 记事本程序
  14. SCRT804安装教程
  15. 天猫精灵服务器修改密码,天猫精灵怎么解绑 天猫精灵解绑账号方法
  16. php 豆瓣api_豆瓣申请API Key教程
  17. 通俗解读SGD、Momentum、Nestero Momentum、AdaGrad、RMSProp、Adam优化算法
  18. 用迭代算法实现扭蛋机例子
  19. 将寄存器放入IOB的方法
  20. Element UI, Ant Design Vue

热门文章

  1. UBOOT移植详细解析(转)
  2. 关于spring @JsonFormat
  3. tddl+diamond(一)
  4. 在地图上可视化地理空间数据的12种方法
  5. 基于51单片机的篮球计时计分器仿真原理图PCB方案设计
  6. 无兄弟,不编程!在兄弟连我学到的不仅仅是PHP
  7. 中石油、长安、奥动新能源合作打造换电站;玛氏箭牌与阿里巴巴合作同城零售 | 美通企业日报...
  8. 小车红外线自主充电方案-1
  9. docker安装postgis
  10. jQuery是什么?和它的优缺点