wangbin
  • wangbin
  • 2018-05-01
  • IT

Gunicorn部署Django

一. 简介

最近用Django写了几个接口,并且部署到了服务器上,记录下过程。

二. Django

Django是一个开放源代码的Web应用框架,由Python写成。是Python Web框架重量级选手中最有代表性的一位,许多成功的网站都基于它。

最新发布的版本号为2.0,需要Python最低版本为3.5+,所以这里我们需要安装python34。

三. Gunicorn

Django自带的WSGI server性能不好,真正生产上部署时我们需要使用Gunicorn,它有很多优点:配置简单、部署方便、轻量级的资源消耗,以及相当迅速。

Instagram也使用它。

Gunicorn是基于”pre-fork worker”模型,这就意味着有一个中心主控master进程,由它来管理一组worker进程。而默认的sync worker有一些问题,这里我们使用异步的worker gevent代替它,且worker数量为(2 x $num_cores) + 1。具体的可以参考http://gunicorn-docs.readthedocs.io/en/latest/design.html

由于使用了Gunicorn,相应的我们需要在Django项目的settings.py中的INSTALLED_APPS加入:gunicorn。

四. virtualenv

virtualenv是一个创建隔绝的Python环境的工具,我们可以使用它创建不同Python版本的环境,使用起来很简单。

这里创建的是Python3环境-django。

创建好后我们可以执行 workon django进入该环境,执行deactivate退出该环境。

五. 安装

install_django.sh

# yum
yum -y install epel-release
yum -y install python-devel python34 python34-devel
yum -y install python-virtualenv python-setuptools
yum -y install libevent libevent-devel
yum -y install mysql-devel gcc gcc-devel

easy_install pip
pip install --upgrade pip

# virtualenv
pip install virtualenvwrapper
source /usr/bin/virtualenvwrapper.sh

mkvirtualenv -p python3 django
workon django

# django
pip install django

# gunicorn
pip install gunicorn
pip install gunicorn[gevent]
pip install greenlet
pip install gevent

# 其他
pip install mysqlclient
pip install djangorestframework
pip install django-simple-serializer

deactivate

# /etc/bashrc 
echo 'source /usr/bin/virtualenvwrapper.sh' >> /etc/bashrc 
source /etc/bashrc 

六. 配置

gunicorn.conf

import os

bind = '0.0.0.0:8000'
workers = 3
backlog = 2048
worker_class = 'gevent'
debug = True
proc_name = 'gunicorn.proc'
pidfile = '/var/run/gunicorn.pid'
logfile = '/var/log/gunicorn/debug.log'
loglevel = 'debug' 

七. 命令

项目名称:testProject

启动

cd 工程目录
/root/.virtualenvs/django/bin/gunicorn -c /usr/local/etc/django/gunicorn.conf --reload testProject.wsgi:application

可以正常启动,执行下面命令,以daemon方式后台运行

/root/.virtualenvs/django/bin/gunicorn -c /usr/local/etc/django/gunicorn.conf --reload testProject.wsgi:application -D

八. 结尾

刚接触Django,感觉用它来写个东西很方便,以后有时间多学习学习。

参考:

  1. http://gunicorn-docs.readthedocs.io/en/latest/settings.html