2010-07-01 25 views
0

我需要在共享服务器上部署一个Django项目,该服务器没有任何root权限,也没有任何管理功能。部署没有CGI可用的Django?

服务器上的每个用户都有一个专用目录,Apache将为该用户文件提供服务(公用URL将为/~username/)。

问题是,此服务器上的Apache没有CGI功能,没有mod_python,没有mod_wsgi。然而,我可以使用与PHP一起工作。

我必须在这个服务器上部署一个Django项目,或许以某种方式使用PHP?

这是决不会一个生产场景,任何黑客你可以想到哪些工作将是伟大的。忽略任何性能或可扩展性因素 - 这只是一个POC。

+0

请问您的服务器已安装在所有的Python? – miku 2010-07-01 15:55:59

+0

很明显 - 我在服务器上安装了Python,Django安装在我的'PYTHONPATH'上。 – 2010-07-01 16:02:56

回答

2

如果没有mod_python,mod_wsgi或fastCGI,您将无法直接执行此操作。

我在想你可能需要做的就是运行django应用程序作为独立的,在另一个端口上侦听,然后基本上使用PHP来代理对它的请求。

所以,你做你的

 
    python manage.py runserver 9999 

也许用nohup的开始它,而不是它的持续运作,当你登出:

 
    nohup python manage.py runserver 9999 & 

然后,在〜用户名,你犯了一个proxy.php脚本它接受任何额外的PATH_INFO并向localhost:9999发出请求,传递HTTP头文件,收集响应并将其发送回浏览器。

因此,例如,浏览器请求http://example.com/~username/proxy.php/some/path/和PHP脚本请求http://localhost:9999/some/path/并发送结果。

我不是PHP程序员,所以我不能完全向您展示如何编写该代码,但我确定有人在那里必须在PHP中实现HTTP代理。

如果你在该目录中有.htaccess支持,并且apache启用了mod_proxy_http,那么你可以让apache直接代理请求。 documentation很容易遵循。但是如果他们没有启用CGI,他们可能也没有设置。

当然,最简单的事情是,如果你能逃脱django的运行,并在面向公众的端口上收听并直接访问它,即,

 
    python manage.py runserver example.com:9999 

,并直接访问它作为http://example.com:9999/