2013-11-26 198 views
16

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

所以我的问题是:

  1. 只是要清楚,因为我将与上述任何一种工作,为什么我需要两台服务器,请给我解释一下?
  2. 如果我必须调整Ubuntu环境,是否必须学习Ubuntu shell脚本,SSH和其他内容?或者托管服务提供商会帮我做到这一点?
  3. 请让我知道我还需要什么以上有关。

非常感谢你的时间,请原谅,如果我的问题是一个蹩脚的问题。希望得到积极回应的答案。谢谢!

+0

你不必使用两台服务器,你可以在一台服务器上设置的Nginx + uWSGI +的Apache2,只是配置良好的一切共同努力,Nginx的和gunicorn几乎同样的事情,你只需要使用一个其中。我使用Ubuntu和它的美好,SSH与Ubuntu的整合,你不学大的事情对于 – drabo2005

+0

@ drabo2005我解释的问题作为两个服务器进程,而不是两个单独的机器;我同意没有迫切需要使用两台独立的机器来服务nginx +其他的东西。我不同意nginx和gunicorn是相同的东西,甚至是同一类软件。 nginx是一个反向代理和静态服务器,gunicorn是一个专用的wsgi应用程序Web服务器。 –

+0

感谢您的解释。 –

回答

14
  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. 问题的这部分太宽而不能回答,但让我在评论中知道,如果你需要澄清。

+0

感谢您的详细解释。与这两个人真的很混淆。现在我想我会采用vps和ssh使用putty。还有一件事,我如何对已部署的文件进行更改?我听说过布料,但很难掌握它背后的逻辑。你能解释一下怎么做?再次感谢。 –

+0

@Benjamin最终,您只需要在服务器上获取更新的程序文件并重新启动Web服务器进程(或者重新加载代码)。织物是一种使这更容易的工具,所以如果它比你需要的更复杂,就不要使用它。通过腻子scp或sftp是好的。像使用git从源代码库直接从服务器下载的任何其他方法也是公平的游戏。 –

+0

好的,我也会研究git。再次感谢! –

2

我做almoast像在本教程:http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Nginx的是我的代理Django应用程序上gunicorn和其服务静,virtualenv中我的蟒蛇环境,监事运行看我的应用程序的运行。
这是可能的,你会在一些错误的运行,如果不使用PostgreSQL,问我就去帮助(在过去使用的MySQL现在是PostgreSQL系统)

+0

谢谢你的回答。但是我对如何在开发和生产之间感到困惑。但上面的链接是肯定的帮助谢谢你! –

+1

该链接非常棒! – yeaske

1

首先,有没有必要,如果你使用Windows快乐使用Ubuntu。我不知道nginx是否可以在Windows上运行,但如果没有,我会非常惊讶(事实上,here是在Windows上安装的nginx文档)。与此同时,Apache确实在Windows上工作。 Django文档有a full explanation关于如何设置Apache/mod_wsgi来为Django提供服务。

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

+0

谢谢你的回答。当我搜索周围时,发现uWSGI/Gunicorn和nginx是最佳实践。所以,我想到了实施这两个问题,并在这里提出了问题。 –

相关问题