2

我已经看过其他线程,但大多数都没有进入足够的设置细节,这是我需要帮助的地方。

我有一个基于 Ubuntu 的 VPS,运行 nginx,通过端口 9000 上的 php-cgi 为 PHP 站点提供服务。

我想开始用 Python 做更多的事情,所以我编写了一个部署脚本,我基本上想将它用作我本地 GitLab 服务器上的接收后挂钩,作为我的第一个 Python 脚本。我可以通过在命令行上运行来成功运行此脚本,python script.py但为了将其用作接收后挂钩,我需要它能够通过 http 访问它。

我在 nginx wiki 上查看了本指南,但中途说:

并启动 django fastcgi 进程:

python ./manage.py runfcgi host=127.0.0.1 port=8080

现在,就像我说的那样,我对 python 还很陌生,而且我从未使用过 Django 框架。任何人都可以帮助我应该如何启动 fastcgi 服务器吗?我用./manage.py我的脚本名称替换吗?任何帮助都会得到帮助,因为我在网上找到的所有内容都涉及使用 Django。

4

1 回答 1

3

我是否将 ./manage.py 替换为我的脚本名称?

不,您的脚本不太可能是FastCGI服务器,或者它可以接受任何类型的 HTTP 请求,因为您提到通过命令行运行它。(根据我对FastCGI的了解,支持它的应用程序必须能够处理通过标准输入以特定格式传入的请求流,因此肯定会涉及一些管道。)

我想说最简单的方法是使用一些Web 框架来充当 HTTP/FastCGI 中间件。供您使用,例如Flask(甚至是Paste,但我发现文档难以理解)之类的“微框架”听起来可以正常工作。这个想法是为您的主代码提供两个接口,一个可以处理命令行参数,一个可以处理 HTTP 请求,最终两者都只会调用一个实际完成工作的函数。(如果您想保留应用程序的命令行版本。)

Flask 文档还提到使用uWSGI独立工作者作为部署选项。我不熟悉前者;出于与下一段中的方法相同的原因,我不建议将后者用于简单、低流量的应用程序。

考虑到您使用 VPS,您甚至可以使用模块将应用程序作为独立服务器进程运行http.server,但我不确定这是更好的选择,除非您绝对想避免使用任何类型的框架。您必须确保应用程序在服务器重新启动时启动,或者它在崩溃时重新启动,并且让nginx完成主管的工作似乎更容易。

更新:从头开始,似乎nginx不会为您处理监督FastCGI工作进程,这将是该方法的主要优势。鉴于此,您使用三种方法中的哪一种并不重要,因为您必须以一种或另一种方式设置服务主管。我会说使用uWSGI,因为FlupFlask+FastCGI需要它)似乎自 2011 年以来就被放弃了,而且nginx本身显然支持uWSGI协议。否则,您需要使用与 nginx 不同的网络服务器,它会为您管理一个 FastCGI 工作器。如果这是一个选项,我会考虑切诺基,可以使用 Web GUI 进行配置。

tl; dr:您需要编写一个(非常简单的)webapp。虽然在没有任何类型的 Web 框架的情况下执行此操作是可行的,但在我看来,使用一个更容易,因为您可以免费进行一些(非平凡的)管道,并且有很多关于如何部署它们的指导。

于 2013-04-05T18:11:32.873 回答