使用Gunicorn Ngnx Supervisor部署Django项目

源网页:https://blog.51cto.com/270142877/2119720


Django作为最受欢迎基于Python的Web框架之一,为用户提供了一个轻量级的测试Server,但这个Server最好不要用于生产环境。那么如果我们需要在生产环境上面部署Django项目,那么我们使用什么环境呢?最早Django推荐使用Apache+mod_wsgi,但现在已经Django的部署方法已对有很多,越来越好,也相对更复杂了,本文将介绍其中一种Django在生产环境的部署方案:Gunicorn+Nginx+Supervisor

实验环境:

操作系统:CentOS 7

Python版本:3.4.8

Django版本:2.0.5

准备实验环境:

因为CentOS 7默认的Python版本为2.7.5,所以我们需要再安装一个3.4.8的版本。另外我们使用的Django版本为2.0.5,Django 2.x版本只支持Python 3.x的版本,所以我们第一步先安装3.x版本的Python

yuminstallpython34 python34-pip

接下来再安装Django

#  此命令表示使用3.4版本的Python来安装Django,如果直接使用pip install django,默认是使用2.7.5的Python,这样会提示不支持,无法安装python3.4 -m pipinstalldjango

安装Gunicorn

python3.4 -m pipinstallgunicorn

安装Nginx

yuminstallnginx

安装Supervisor

yuminstallsupervisor

创建Django项目:

# 注意替换ProJectName为自己的项目名,AppName为自己的App名django-admin startproject ProJectNamecdProJectNamedjango-admin startapp AppName

使用Gunicorn测试启动Django项目:

# 必须进入到项目的目录再执行下面的命令cdProJectNamegunicorn ProJectName.wsgi

启动成功后输入大概如下

[2018-05-24 09:50:33 +0800][22849][INFO]Starting gunicorn 19.8.1[2018-05-24 09:50:33 +0800][22849][INFO]Listening at: http://127.0.0.1:8000(22849)[2018-05-24 09:50:33 +0800][22849][INFO]Using worker:sync[2018-05-24 09:50:33 +0800][22852][INFO]Booting worker with pid: 22852

从以上信息我们可以看出项目已经启动成功,gunicron版本为19.8.1,监听127.0.0.1:8000端口并且工作在22849号进程,启动的worker方式为sync,并启动了一个worker进程,进程号为22852。更多关于workder相关的资料自行查略更多的信息

由上面我们监听在127.0.0.1,我们客户端无法访问,所以我们需要指定监听端口启动,把上面的直接Ctrl+c结束,然后执行下面的命令启动

# 使用-b指定监听的地址和端口gunicorn Gogenius.wsgi -b 0.0.0.0:8000

配置Supervisor:

    Supervisor主要是用来管理进程的工具,默认安装好了以后有一个配置文件/etc/supervisord.conf,这是主配置文件。还有一个目录/etc/supervisord.d,这个目录一般用来存放我们管理的进程,每个进程一个配置文件,以.ini结尾

创建一个管理Gunicorn的配置文件

touch/etc/supervisord.d/gunicorn.ini

gunicorn.conf的内容为

[program:gunicorn]directory=/usr/local/ProJectNamecommand=/usr/bin/gunicorn ProJectName.wsgi -b 127.0.0.1:8000user=rootautostart=trueautorestart=trueredirect_stderr=truestdout_logfile=/var/log/gunicorn.log

说明:

[program:gunicorn]:其中gunicorn为要管理的子进程名称,此名称可以自定义,但最好不要乱写,与子进程有点关系为好

directory:Django项目的根目

command:要执行的命令,这里为启动子进程的命令,子进程为gunicorn

user:指定启动子进程的用户

autostart :自动启动,也就是当父亲进程启动的时候,子进程也跟随启动。supervisor为父进程

autorestart:自动重启,也就是当子进程挂掉的时候,父进程将会尝试自动去重启了进程

redirect_stderr:当此选项为true的时候,错误日志也会写进stdout_logfile中

stdout_logfile:定义stdout_logfile路径

关于更多资料可以参考此链接

接下来就是启动Supervisor

systemctl start supervisord.service

(这一步可能出错,出错是因为没有在python2所在pip库安装supervisor, 它有提示的)

systemctl enable supervisord.service

如果更改过子进程的配置文件,这时候我们只需要reload下我们的Supervisor服务即可,不需要重启整个服务,这样会影响其它的服务

supervisorctl reload

配置Nginx转发:

我们知道我们Django本身就可以作用一个轻量级的Web Server,Django里面为我们定义了我们html js img css等页面的存放位置,并且为自动的去找到需要的页面。但现在我们没有使用Django本身的Web Server,这时候就需要通过我们Nginx配置代理来让客户端请求访问到对应的页面,Nginx配置如下:根据自己需求

server{listen 5000;location /{# proxy_pass指定地址为访问gunicorn地址和端口proxy_pass http://127.0.0.1:8000;proxy_next_upstream http_500 http_502 http_503 errortimeoutinvalid_header;proxy_set_header Host$host;proxy_set_header X-Forwarded-For$remote_addr;}location ~.*\.(html|css|js|jpg|json|png|map|\ttf*|\woff2*|\woff*|eot|otf|ttf|json|cur|woff|svg|woff2|m3u8|ts|mp3)${# root指定Django项目的根目录root /usr/local/Gogenius;proxy_next_upstream http_500 http_502 http_503 errortimeoutinvalid_header;proxy_set_header Host$host;proxy_set_header X-Forwarded-For$remote_addr;}}

启动Nginx

systemctl start nginxsystemctlenablenginx

至此,我们就可以通过Nginx的5000端口访问我们的Django项目了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容