несколько экземпляров Django в одном домене - PullRequest
8 голосов
/ 13 июля 2010

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

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

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

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

Спасибо,
Джо

Ответы [ 6 ]

15 голосов
/ 13 июля 2010

Я был в ситуациях, когда не мог использовать субдомены, и способ справиться с этим с помощью 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

и т. Д.

6 голосов
/ 13 июля 2010

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

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

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

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

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

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

3 голосов
/ 13 июля 2010

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

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

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

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

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

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

1 голос
/ 13 июля 2010

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

1 голос
/ 13 июля 2010

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

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

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