在Ubuntu上使用nginx通过FastCGI运行Python

20 浏览
0 Comments

在Ubuntu上使用nginx通过FastCGI运行Python

我已经查看过其他帖子,但大多数没有提供足够的设置细节,这正是我需要帮助的地方。\n我有一个基于Ubuntu的VPS,在端口9000上通过php-cgi运行nginx,用于提供PHP网站。\n我想开始更多地使用Python,所以我编写了一个部署脚本,我希望将其作为我的本地GitLab服务器上的post-receive钩子使用,作为我的第一个Python脚本。我可以通过在命令行上运行python script.py来成功运行此脚本,但为了将其用作post-receive钩子,我需要通过http访问它。\n我查看了nginx维基上的这个指南,但在中间部分有这样的说明:\n

\n然后启动django fastcgi进程:\npython ./manage.py runfcgi host=127.0.0.1 port=8080\n

\n现在,正如我所说,我对Python还相当陌生,我从未使用过Django框架。有人可以帮助我如何启动fastcgi服务器吗?我是否应该用我的脚本名称替换./manage.py?感谢任何帮助,因为我在网上找到的所有内容都是关于使用Django。

0
0 Comments

问题的原因是用户想知道是否需要将"./manage.py"替换为他的脚本的名称。问题的回答是不需要,因为用户的脚本很可能不是一个FastCGI服务器,也不具备处理任何类型的HTTP请求的能力。解决该问题的方法是使用一个web框架作为HTTP/FastCGI中间件,例如Flask或Paste。用户需要为他的主要代码编写两个接口,一个用于处理命令行参数,一个用于处理HTTP请求,最终这两个接口都将调用一个实际执行工作的函数。

Flask的文档还提到了使用uWSGI或独立工作进程作为部署选项。考虑到用户使用的是一个VPS,他甚至可以使用http.server模块将应用程序作为独立的服务器进程运行。然而,由于nginx并不能为用户监控FastCGI工作进程,所以无论用户选择哪种方法,都需要设置一个服务监视器。建议用户使用uWSGI,因为flup已经在2011年之后没有更新,而uWSGI协议显然在nginx中原生支持。否则,用户需要使用与nginx不同的web服务器,其中一个能为用户管理FastCGI工作进程。如果这是一个选择,建议用户考虑使用可以使用Web界面配置的Cherokee。

总之,用户需要编写一个非常简单的Web应用程序。虽然在没有任何Web框架的情况下也可以做到这一点,但是使用一个Web框架会更容易,因为用户可以免费使用一些非常有用的功能,并且有很多关于如何部署它们的指导。

用户还提到了webpy.org是一个更小的框架,并且强调了CGI已经被废弃,WSGI是当前推荐的方法。

用户认为更好的解决方法是提供如何使用nginx和WSGI应用程序进行连接的答案。用户认为仅仅替换FastCGI并不是一个简单的解决方法,因为WSGI要求要么切换到代理+工作进程架构,要么在nginx中添加一个第三方模块。用户认为对于OP的规模来说,FastCGI是完全可以接受的,并且代理+工作进程的好处在这里并不适用。用户认为FastCGI和WSGI并不是互斥的技术。FastCGI是一种在"worker" Python进程中重复使用的"on-the-wire"协议,而WSGI是在Python端表示这些HTTP请求的抽象方式。用户认为flup所做的只是解析FCGI请求并将其转换为任何Python框架都能理解的WSGI调用。因此,选择不是FCGI vs. WSGI,而是FCGI vs.独立的HTTP工作进程 vs.将Python嵌入到前端服务器中。

用户对提供的答案表示感谢,并表示他将尝试安装uWSGI。他之前选择使用FastCGI只是因为他在使用PHP时也在使用它。他对于是否有更好的解决方法表示开放。

0