Django:使用manage.py和其他服务器(如gunicorn等)之间的区别。哪个更好?

40

我一直在使用manage.py runserver来运行我的初学者Django项目。我看到建议改用gunicorn。这两者有什么区别?


这是你现在不应该花太多时间思考的事情,因为你很新。让你的项目开始运行,然后当你准备好将其推向线上时再关注这个问题。你可以使用Heroku,这仍然允许你使用manage.py文件轻松部署。祝你好运。 - Jody Fitzpatrick
7
文档中有一个重要的警告,提示不要在生产环境中使用runserver。 - Sayse
2个回答

92

Nginx和Gunicorn可能是生产部署中最受欢迎的配置。在详细介绍为什么推荐Gunicorn而不是runserver之前,让我们快速澄清一下Nginx和Gunicorn之间的区别,因为它们都声称自己是Web服务器。

NGINX应该是您与公众互动的入口点,它是监听端口80(http)和443(https)的服务器。它的主要目的是处理HTTP请求,即应用重定向、HTTP身份验证(如果需要)、管理TSL/SSL证书以及-除其他事项外-决定您的请求最终要去哪里。例如,可能有一个运行在localhost:3000上并等待来自/foo/api的请求的node.js应用程序,而gunicorn则在localhost:8000上等待为您的精彩应用提供服务。将传入的请求代理到所谓的upstream服务(在这种情况下为node.js和gunicorn)的此功能称为反向代理。

GUNICORN是一个将HTTP请求转换为Python的服务器。WSGI是其中一个接口/实现,可以做到这一点(例如,HTTP头的文本部分被转换为键值字典)。

Django的内置开发Web服务器(在运行manage.py runserver时获得)也提供了此功能,但它针对的是开发环境(例如,在代码更改时重新启动),而Gunicorn则面向生产环境。

Gunicorn有许多Django内置服务器缺少的功能:

  • gunicorn可以生成多个工作进程以将传入请求并行化到多个CPU核心
  • gunicorn具有更好的日志记录
  • gunicorn通常经过优化以提高速度
  • gunicorn可根据您的设置进行微调配置
  • gunicorn正在积极设计和维护,考虑到安全性

除了Gunicorn之外还有其他Web服务器,但是Gunicorn(受Ruby的独角兽启发)非常受欢迎且易于设置,因此不仅是一个很好的起点,而且是大型项目使用的专业解决方案。


1
你应该在开发中使用runserver,在生产中使用gunicorn,这与你的技能水平无关。 - shredding
提供一些参考/确认,例如“Gunicorn拥有许多Django内置服务器缺乏的功能”。 - Gathide

9

manage.py runserver 只是一个开发服务器,绝不能在任何情况下用于生产环境。 当你的Django项目准备好进入部署阶段时,你需要使用类似Apache、uWSGI、NGINX或其他服务器来为其提供服务。


20
希望能看到更详细的回答,包含更多关于“为什么”的细节。 - The Godfather

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接