18

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

所以我的问题是:

  1. 为了清楚起见,因为我将不得不使用上述其中之一,请向我解释为什么我需要两台服务器?
  2. 如果我必须适应 Ubuntu 环境,我是否必须学习 Ubuntu shell 脚本、SSH 和其他东西?或者托管服务提供商会帮助我做到这一点?
  3. 请让我知道我还需要什么来解决上述问题。

非常感谢您抽出宝贵时间,如果我的问题是一个蹩脚的问题,请原谅。希望得到积极的答复。

4

3 回答 3

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. 这部分问题过于宽泛,无法回答,但如果您需要澄清,请在评论中告诉我。

于 2013-11-26T07:11:42.950 回答
3

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

于 2013-11-26T07:14:00.790 回答
2

首先,如果您对 Windows 更满意,则无需使用 Ubuntu。我不知道 nginx 是否可以在 Windows 上运行,但如果不能,我会感到非常惊讶(事实上,这里是用于在 Windows 上安装的 nginx 文档)。与此同时,Apache 确实可以在 Windows 上运行。Django 文档对如何设置 Apache/mod_wsgi 以服务 Django有完整的解释。

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

于 2013-11-26T08:17:42.450 回答