2010-07-01 8 views
0

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

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

Проблема в том, что Apache на этом сервере не имеет возможностей CGI, нет mod_python, no mod_wsgi. I может работать с PHP, однако.

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

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

+0

ли ваш сервер уже питон установлен на всех? – miku

+0

Очевидно - у меня есть Python на сервере, а Django установлен на моем «PYTHONPATH». –

ответ

2

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

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

Так вы ваш

 
    python manage.py runserver 9999 

возможно запустить его с поЬир вместо того, чтобы сохранить это работает, когда вы выйти из системы:

 
    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, поэтому я не могу точно показать вам, как это записать, но я уверен, что кто-то там должен был реализовать HTTP-прокси в PHP.

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

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

 
    python manage.py runserver example.com:9999 

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

Смежные вопросы