Развертывание Django без CGI? - PullRequest
0 голосов
/ 01 июля 2010

Мне нужно развернуть проект Django на общем сервере, к которому у меня нет корневого доступа и никаких возможностей администрирования.

У каждого пользователя на сервере есть специальный каталог, из которого Apache обслуживает файлы пользователей (общедоступный URL будет /~username/).

Проблема в том, что у Apache на этом сервере нет возможностей CGI, нет mod_python, нет mod_wsgi. Однако я могу работать с PHP.

Какие хаки мне нужны, чтобы развернуть проект Django на этом сервере, возможно, с использованием PHP как-нибудь?

Это никоим образом не производственный сценарий, и любой взлом, который вы можете себе представить, будет работать. Игнорировать любые факторы производительности или масштабируемости - это всего лишь POC.

1 Ответ

2 голосов
/ 01 июля 2010

Без mod_python, mod_wsgi или fastCGI вы не сможете сделать это напрямую.

Я думаю, что вам, возможно, придется запустить приложение django в автономном режиме, прослушивая другой порт, а затем в основном использовать PHP для запросов к нему через прокси.

Так ты делаешь

  python manage.py runserver 9999

возможно, запустив его с nohup, чтобы он продолжал работать при выходе из системы:

  nohup python manage.py runserver 9999 &

Затем в ~ username вы создаете сценарий proxy.php, который принимает любой дополнительный PATH_INFO и делает запрос к localhost: 9999, передавая заголовки HTTP, собирает ответ и отправляет его обратно в браузер.

Так, например, браузер запрашивает http://example.com/~username/proxy.php/some/path/, а PHP-скрипт запрашивает http://localhost:9999/some/path/ и отправляет результаты.

Я не программист PHP, поэтому я не могу точно показать вам, как это написать, но я уверен, что кто-то там реализовал HTTP-прокси в PHP.

Если у вас есть поддержка .htaccess в этом каталоге, а в apache включен mod_proxy_http, вы можете просто использовать apache для прямого прокси-запроса. Документация довольно проста в использовании. Но если у них не включен CGI, они, вероятно, тоже не настроены.

Конечно, проще всего было бы, если бы вы могли просто избежать запуска django и прослушивания открытого порта и получить к нему прямой доступ. Т.е.

   python manage.py runserver example.com:9999

и прямой доступ к нему как http://example.com:9999/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...