несколько экземпляров django на единственном домене

Я ищу хороший способ установить несколько совершенно других проектов Django на том же сервере только с помощью единственного доменного имени. Дело в том, что я хочу просмотреть к чему-то как:

http://192.168.0.1/gallery/ # проект фотогалереи Django
http://192.168.0.1/blog/ # ведущий блог проект

Таким образом, я могу разработать и протестировать несколько django проектов на том же сервере, просто обратившись к различным URL. (отметьте: Я не думаю, что этот модуль Django Sites - то, что я ищу, потому что проекты должны быть отличными). Как пример, PHP отчасти ведет себя таким образом, поскольку я могу установить что-то как php-галерея и phpmyadmin на том же сервере, только с различными путями URL.

Кто-либо знает о каких-либо хороших ресурсах того, как установить несколько проектов Django под несколькими URL на единственном сервере с помощью Apache (или с mod_python или с mod_wsgi)? Вещи я интересовался бы знанием, состоят в том, как установить apache.conf, возможную установку virtualenv и изменения в urls.py для размещения этого. Большинство примеров развертывания Django, которые я вижу, для одного приложения на домен или субдомен.
Любой совет очень ценится.

Спасибо,
Joe

8
задан Joe J 13 July 2010 в 07:16
поделиться

6 ответов

Я был в ситуациях, когда я не мог использовать поддомены, и способ справиться с этим с помощью Django на самом деле довольно прост.

Практически все в вашем файле настроек будет похоже на обычное приложение Django, за исключением того, что эти настройки должны включать путь к вашему проекту:

MEDIA_URL = 'http://192.168.0.1/gallery/media/'
ADMIN_MEDIA_PREFIX = '/gallery/admin_media/'
SESSION_COOKIE_PATH = '/gallery'
LOGIN_REDIRECT_URL = '/gallery/'
LOGIN_URL = '/gallery/accounts/login/'
LOGOUT_URL = '/gallery/accounts/logout/'

SESSION_COOKIE_PATH имеет решающее значение для предотвращения перезаписи всех ваших приложений в одном домене файлы cookie друг друга.

Приведенные выше инструкции должны касаться стороны Django, но на стороне веб-сервера еще предстоит проделать большую работу. Например, если вы используете apache + mod_wsgi, вам необходимо убедиться, что у каждого проекта есть собственный сценарий wsgi, который загружается следующим образом:

WSGIScriptAlias /gallery /path/to/gallery/apache/gallery.wsgi
Alias /gallery/media /path/to/gallery/media
Alias /gallery/admin_media /path/to/gallery/venv/lib/python2.6/site-packages/django/contrib/admin/media

и т. Д.

15
ответ дан 5 December 2019 в 05:55
поделиться

Давайте разберемся с терминологией.

Большинство примеров, которые вы видите в интернете, относятся к одному проекту Django на домен. Каждый проект может содержать несколько приложений.

Дальше я буду считать, что вы имеете в виду развертывание нескольких проектов на одном домене. (В противном случае - ваш вопрос не имеет смысла).

Это можно легко решить с помощью правильного развертывания по директориям (это зависит от того, какой метод развертывания вы используете) и обеспечения того, чтобы ваши URL не предполагали, что они существуют в корне домена.

2
ответ дан 5 December 2019 в 05:55
поделиться

Сделайте несколько проектов django, каждый с одним приложением (frontend, например) и используйте отображение url в django, чтобы сделать что-то вроде этого:

from django.conf.urls.defaults import patterns, include

urlpatterns = patterns('',
    url(r'^/', include('myproj.frontend.urls')
)

Я использую это, и все работает без проблем.

Если вы просите полноценный учебник/руководство по настройке чего-то подобного, извините, у меня его нет. Я просто следовал документации Django и пришел к следующему.

1
ответ дан 5 December 2019 в 05:55
поделиться

Один из подходов заключается в развертывании приложений на Apache, работающем под управлением mod_wsgi в режиме демона. Документацию можно найти здесь: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

1
ответ дан 5 December 2019 в 05:55
поделиться

В других описывается использование нескольких приложений в одном проекте Django. Однако если вы имели в виду проекты и / или имеете только одно приложение в каждом проекте, тогда простой ответ - использовать отдельную директиву WSGIScriptAlias ​​для каждого проекта при использовании mod_wsgi. Каждый такой проект при желании может быть делегирован группе процессов демона mod_wsgi, чтобы разрешить перезапуск каждого по отдельности без перезапуска всего Apache, но режим демона - это дополнительная вещь, которую можно сделать, а не само решение.

3
ответ дан 5 December 2019 в 05:55
поделиться

В вашем вопросе вы, похоже, используете проекты и приложения взаимозаменяемо. В Django они означают разные вещи. Проект project включает в себя установочный файл, конфигурацию базы данных и общую urlconf, и это то, что вы хотите видеть в корне вашего домена. приложение - это отдельный функциональный кусок кода, который (как правило) выполняет одну задачу.

Если вы хотите развернуть несколько приложений, вам нужно создать один проект и скопировать каждое приложение в каталог проекта. Если вы посмотрите учебник, вы увидите, как включить приложение в urlconf. Просто повторите это для каждого из них, убедившись, что regexes верны.

Ключевым моментом здесь является то, что вы запускаете apache для вашего общего проекта django, а затем используете внутренний urlconf Django для настройки доступа к каждому приложению. Не пытайтесь запустить несколько проектов под корнем одного и того же url - это почти наверняка признак того, что вы делаете это неправильно.

Если вы имеете в виду запуск нескольких проектов под одним доменом, мы решаем эту проблему с помощью поддоменов.

Поскольку проекты Django, которые мы создаем, (как правило) предназначены для того, чтобы жить в корне домена, когда они фактически развернуты, если вы используете app1.example.com и app2 и т.д., вы можете тестировать, как вы будете развертывать, в корне каждого домена. Вы можете настроить поддомены точно так же, как и домены верхнего уровня, а затем легко перейти к окончательному развертыванию.

Если вы пытаетесь действительно развернуть подобные приложения, создайте один общий проект Django и используйте urlconfs для включения каждого приложения Django в разные подпроекты.

6
ответ дан 5 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: