【Django】 gunicorn部署纪要

news/2024/7/9 18:39:38 标签: python, 运维, epoll

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

特点

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

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

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

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

  • 配置使用非常easy

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

操作

Gunicron 安装非常easy 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 "$@" in
    start)
        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 1
        gunicorn -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 meinheld

gunicorn --workers=2 --worker-class="egg:meinheld#gunicorn_worker" wsgi

http://www.niftyadmin.cn/n/1272738.html

相关文章

[python]二维数组保存为灰度图片

在使用python时,如果想将二维数组中的数据直接保存为灰度图片,可以通过imageio库中的imsave方法直接保存。 import numpy as np import imageiopic np.zeros((128, 128))for i in range(100):pic[127 - i][i] 255imageio.imsave("test.png"…

Shapefile文件格式介绍

介绍 Shapefile文件格式是一种矢量图形格式,它能够保存几何图形的位置和相关属性,但是它没法存储地理数据的拓扑信息,所以shapefile文件经常是和其他文件一起使用,本文主要关注shapefile文件的结构组成,关于shapefile…

Splunk-面向机器数据的处理分析平台

Spelunking,代表着去洞穴探险的意思。在如今的大数据时代,面对庞大的机器的数据,亦如在黑暗的洞穴探险一样,是一件让我们看不清楚、难以理解的事情。如何使机器数据对每个人都可取可用,发挥价值?秉持着这样…

ubuntu下怎么修改文件夹的名字

mv 原始文件夹名 修改之后的文件夹名字

自动化运维工具 puppet

是什么 puppet是一个IT基础设施自动化管理工具,基于puppet,可实现自动化重复任务、快速部署关键性应用以及在本地或云端完成主动管理变更和快速 扩展架构规模。 工作机制 puppet的使用模型分为单机使用模型和master/agent模型。 1、单机模型 2、maste…

Shapefile文件读取-文件头

1 介绍 在Shapefile文件格式介绍一文中我们介绍了shapefile文件的结构组成,本文主要介绍如何读取shapefile文件头部分,使用的语言是c。 2 文件头结构 Shapefile文件的文件头是固定长度的,总长度为100个字节,其中4-23字节为未使…

QOpenGLShaderProgram: could not create shader program QOpenGLShader: could not create shader

这个问题是我在换pyqt5的运行环境时出现的,唉!!! 废话不多说:来吧!解决方案1–success cd /etc/ld.so.conf.d目录中有 i386-linux-gnu_GL.conf and x86_64-linux-gnu_GL.conf等文件 cat x86_64-linux-gnu…

make和make install的区别

configure 这一步一般用来生成Makefile,为下一步的编译做准备,你可以通过在configure后加上参数来对安装进行控制,比如代码:./configure --prefix/usr上面的意思是将谇软件安装在/usr下面,执行文件就会安装在/usr/bin…