• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

初次部署django+gunicorn+nginx的方法步骤

python 搞代码 4年前 (2022-01-09) 41次浏览 已收录 0个评论

环境 ubuntu16.04 python3.6 django1.11 gunicorn19.7.1 nginx1.10.3

写在前面

其实无论是在部署,还是在其他方面,我们总会遇到一些问题。建议当感觉自己被卡住的时候,试着退出局部,从更高一层去观察问题,因为这个事情无论是多复杂,它还是由人设计出来的,它身上多多少少带着一些人类思考模式的通性(这个表达有点问题,但是我暂时想不出更好的了),尝试透过现象看本质,比如这个东西它为什么跑不起来,为什么我打开网页永远是404,如果这个时候你直接去问度娘,问逼乎,(我相信能看google的都不会看到这篇东西 :-) )我觉得你很难找到自己想要的答案。我的建议是尽量让问题细化,网页打不开,那往往只代表80端口不能访问,那你可以看看自己服务器的防火墙是不是进制了相关端口,又或者是服务器商帮你设置的安全组是不是把端口都关了;可以尝试ping一下,看服务器在不在线;看一下我们的代理服务器是不是监听了对的端口,诸如此类。

最后,我认为在绝大多数情况下,我们踩过的坑,都是有前人踩过,而且还帮我们填掉了,所以用心找,总能找到答案的。

关于Django

先确认在开发环境下能够正常访问

然后一般情况下,在执行python manager.py startproject project之后,目录应该是这个样子的

project/
  --project/
    --__init__.py
    --setting.py
    --urls.py
    --wsgi.py
  --templates/
  --your app/
  --manage.py

设置project/setting.py

要更改的几个点

1.DEBUG改成False,只有关闭了调试模式,后面才能让nginx来寻找静态文件。

2.ALLOW_HOSTS,加入你的域名,(或,和)服务器ip。我还加了127.0.0.1方便本地观察。

3.设置STATIC_ROOT,建议可以直接设为os.path.join(BASE_DIR, ‘static/’),也就把文件夹在manage.py的根目录里。

4.执行python manager.py collectstatic,就会将所有静态文件都放到第三步中设置的文件地址中。

执行完第四步后,目录结构应该是这样

project/
  --project/
    --__init__.py
    --setting.py
    --urls.py
    --wsgi.py
  --templates/
  --your app/
  --manage.py
  --static/
    --auth/
    --your app/
      --css/
      --js/
      --images/

关于Gunicorn

一开始可以先试着运行一下,进入project这本文来源gaodai$ma#com搞$$代**码网个根目录,然后

gunicorn -w 3 -b 127.0.0.1:8080 project.wsgi:application

不出意外,就应该可以跑起来了。

关于project.wsgi:application的解释,前半截很容易理解,就是调用了project下的wsgi.py,而后面的application,我一开始以为这个application是要改成自己app的名字,后来才发现,这个实际上是wsgi.py中的变量,所以是固定的,不用改。

试着运行没问题之后,可以直接在根目录下创建gunicorn.conf.py

来配置位置,以后运行就用

gunicorn -c gunicorn.conf.py project.wsgi:appliction

因为每次都在命令行输参数好累。

我是在docker下面跑的,用nohup来执行的时候,会有问题,报import error,应该是环境变量没有设置好,但我现在还没解决这个问题,所以就只用了&。

关于Nginx

我先尝试讲一下我对django + gunicorn + nginx 这三兄弟的理解。首先我们知道,我们访问网站,就是去网络上的一台电脑里访问某个路径下的某个文件,那django的作用主要是做(生产)这个文件,拿一家餐馆来讲,我认为django就是这个餐馆的厨师,他负责做菜,当规模很小的时候,比如路边卖鸡蛋饼的大妈,因为客人不多,所以可以自己问客人要什么,然后再自己做,这就是django和自带的runserver所做的事情;那当规模变大了,比如普通餐馆,客人很多,厨师做菜都来不急了,根本没时间去问客人要什么,所以这个时候我们就需要服务员了,服务员去记录客人要什么,然后跟厨房讲,接着从厨房拿菜给客人,而在这里,gunicorn就是这个服务员;当规模更大一些的时候,每分钟都有几百个人(现实中来讲这已经是多到爆炸了吧)要进餐馆吃饭,你在餐馆里安排再多的服务员也不能处理完这么多客人的请求,而且餐馆的空间是有限的,服务员也占空间,多了放不下,所以这个时候怎么办呢,答案是在餐馆门口安排咨客,有序地引导客人进入餐馆,也可以在门口就帮客人点好菜,提高整体效率,Nginx就扮演了咨客这个角色。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:初次部署django+gunicorn+nginx的方法步骤

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址