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

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

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

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

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

спасибо,
Джо!--1-->

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 имеет решающее значение для предотвращения перезаписи всех ваших приложений в одном домене друг друга cookies.

вышеуказанные инструкции должен охватывать сторону 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

etc.


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

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

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

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

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

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


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


перейдем на терминологию.

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

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

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


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

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

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

Я использую это, и это происходит без сучка и задоринки.

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


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