在生产服务器中部署django

时间:2013-11-26 07:01:00

标签: django web-deployment uwsgi gunicorn django-deployment

首先请让我明白我是一个Windows用户,对网络世界来说还是一个新手。在过去的几个月里,我一直在学习python和django,对我来说这是一次很棒的经历。现在我以某种方式创建了一个我希望在生产服务器中部署的小项目。由于django有内置的开发服务器,对我来说没问题。但现在我必须将它部署到生产服务器上,我用Google搜索并发现Nginx + uWSGI或Nginx + Gunicorn是它的最佳选择。由于uWSGI和Gunicord与Windows不兼容,我认为我应该适应Ubuntu或其他Unix系统。

所以我的问题是:

  1. 为了清楚起见,因为我必须使用上述其中一项,请向我解释为什么我需要两台服务器?
  2. 如果我必须适应Ubuntu环境,我是否必须学习Ubuntu shell脚本,SSH和其他东西?或托管服务提供商会帮我这么做吗?
  3. 请让我知道上述相关内容还需要什么。
  4. 非常感谢你的时间,如果我的问题是一个蹩脚的问题,请原谅。希望得到积极回应的答案。

3 个答案:

答案 0 :(得分:15)

  1. 典型配置涉及两个服务器进程(可以在同一个实际硬件或虚拟服务器上一起运行),以便前面的代理服务器可以缓冲慢速客户端。例如:一个慢客户端将通过请求连接到nginx。 Nginx将把请求传递给Gunicorn并且Gunicorn会做出回应。 Nginx将立即消耗Gunicorn响应,立即释放Gunicorn资源。此时,慢速客户端可以花费尽可能多的时间来消耗来自Nginx的响应,而不会占用很多服务器资源。双服务器进程模型的替代方法是使用与Gunicorn的异步工作者并将Gunicorn本身放在前面,或使用像Waitress这样的异步同步组合。尽管如此,Nginx在前面具有加倍作为即用型静态服务器的好处。

    请注意,“慢客户端”可以描述:手机丢失连接并使TCP套接字挂起,直到请求超时;移动电话只是很慢;所有类型的不可靠联系;故意试图使用服务器资源的恶意拒绝服务客户;有时任何旧连接因任何原因而出现打嗝或故障。所以这个问题几乎会影响到任何网站。

  2. 您本身不需要shell脚本,但习惯Ubuntu需要一些时间。即使在脚本编写之外,还有很多东西需要学习,例如如何使用包管理器,如何以不会混淆未来更新的方式安装包,如何配置包等。您肯定必须学会使用SSH ;它是* nix世界中最基础的服务器管理工​​具之一。

    学习使用Ubuntu或其他服务器平台的另一种方法是使用像Heroku这样的平台即服务选项,因为PaaS托管服务提供商真的会为您处理所有这些事情。我推荐这种方法。尽管如此,即使我认为PaaS对于那些想要专注于开发而不是服务器管理的人来说是一个很好的选择,无论他们的技术水平如何,对Linux服务器平台的一点点经验也是如此。帮助您了解代码运行的环境。因此,即使您使用PaaS,您仍然可以通过修改Ubuntu(或者很多)来获益。

    PaaS的另一个好处是,通常他们的基础设施处理交易的Nginx部分(通过代理缓冲慢速请求)。例如,Heroku就是这种情况。因此,您根本不必担心基础设施的这一部分。

  3. 这部分问题过于宽泛而无法解答,但如果您需要澄清,请在评论中告诉我。

答案 1 :(得分:3)

我正在像本教程中那样做:http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Nginx是我的代理django应用程序运行gunicorn和它的服务静态,virtualenv我的python环境,主管看我的应用程序运行。
如果不使用Postgresql,你可能会遇到一些错误,请问我会帮忙(过去使用过的MySQL现在是Postgresql)

答案 2 :(得分:2)

首先,如果您对Windows更满意,则无需使用Ubuntu。我不知道nginx是否可以在Windows上运行,但如果没有,我会非常惊讶(事实上,here是在Windows上安装的nginx文档)。与此同时,Apache绝对可以在Windows上运行。 Django文档有a full explanation如何设置Apache / mod_wsgi来为Django提供服务。

您不需要两台服务器。我不确定你为什么这么认为:通常的原因是将静态资产放在一个单独的服务器上,但你没有提到这是一个原因。既然你只是在谈论一个小网站,你甚至不需要这样做。一台配置为同时为Django和静态资产提供服务的服务器都可以。同样,文档解释了如何做到这一点。

相关问题