Django+gunicorn+Nginx环境的搭建

一.gunicorn和nginx的简介

gunicorn需要搭配nginx使用,那么两者的作用到底是什么。

1.gunicorn简介:gunicorn是一个Python WSGI UNIX服务器。WSGI(Web Server Gateway Interface)是Web服务网关接口,位于WEB应用层和WEB服务器层之间。在这里WEB应用当然是指Python解释器及Django编写的程序,而WEB服务器指的是Nginx,所以Gunicorn位于两者之间。

2.Nginx简介:Nginx是反向代理服务器,接收外部Internet网络请求,并将请求转发给内部网络的WSGI,并将响应信息反馈给外部Internet用户。所以gunicorn就是起到沟通作用,将Django和Nginx联系起来,也就是我们说的网关作用。

二.Django,Gunicorn,Nginx的安装

在这里我们使用的是Django最新版本1.8.4,当然,你也可以选择其他版本。

#pip3 install Django==1.8.4

#pip3 install gunicorn

#apt-get install python-dev nginx

三.环境搭建与测试

1.创建Django项目

创建mysite项目

#django-admin.py startproject mysite

#cd mysite/

创建home应用

# python3 manage.py startapp home

2.设置setting.py文件

添加app,需要添加gunicorn和home(你自己设置的应用名)两项。

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # add app
    'bugapp',
    'gunicorn',
 )

3.运行gunicorn

#nohup gunicorn mysite.wsgi:application -b 127.0.0.1:1010&

nohup是后台运行指令,详细请查看:《nohup-真正的shell后台运行

当然,你也可以参考《鸟哥的linux私房菜(第三版)》,第17章第2节《脱机管理问题》

运行后可tail查看nohup.out文件,gunicorn的运行情况会输出到这个文件中。

4.查看端口

#netstat -plnt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5414/nginx
tcp        0      0 127.0.0.1:1010          0.0.0.0:*               LISTEN      5131/python3
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      30237/sshd

很明显,gunicorn已经运行起来了,使用curl测试一下:

#curl 127.0.0.1:1010

这时候如果返回一个HTML页面,说明gunicorn运行成功。接下来就是将gunicorn的WEB数据发送到发向代理服务器Nginx了,并由它发布到Internet上接收访问。

4.配置Nginx

打开Ngnix配置文件/etc/nginx/site-available/default文件,建议提前将原文件做个备份。将该文件修改成一下内容:

  1 server{
  2     listen 80;
  3
  4     server_name www.edse.cn;
  5     location / {
  6         proxy_pass http://127.0.0.1:1010;
  7         proxy_set_header Host $host;
  8         proxy_set_header X-Real-IP $remote_addr;
  9         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 10     }
 11
 12     location /static/{
 13         root /data/testweb;
 14     }
 15     location /media/{
 16         root /data/testweb;
 17     }
 18 }

保存后测试一下配置文件:


# nginx -t
nginx: [warn] conflicting server name "www.edse.cn" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

OK了!

5.最后重启服务器

#service nginx restart

四.Gunload在代码变更后的reload问题

修改过Django代码后,需要重新建立gunicorn连接,否则页面还是维持代码变更前的状态。当然我们可以采取两种方法:

1.你可以KILL掉gunicorn进程,然后重新建立。但是费时费力,太麻烦,如果你在测试代码频繁变更,那无疑是巨大的工作量。

2.其实在gunicorn的19.0版本后已经加入了--reload选项,只要在运行gunicorn添加进去就可以了。如下:

#nohup gunicorn mysite.wsgi:application -b 127.0.0.1:1010 --reload&

加入--reload字段,就可以实时显示变更代码了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值