2010-07-01 36 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/