Несколько сайтов на Django

Я пытаюсь запустить большое количество сайтов, которые содержат около 90% их кода. Они просто предназначены для запроса API и возврата результатов. Они будут иметь общую базу данных/базу данных, но будут немного отличаться и будут иметь разные CSS (возможно, даже разные шаблоны).

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

https://docs.djangoproject.com/en/dev/ref/contrib/sites/

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

Ваш SITE_ID установлен в settings.py, поэтому, чтобы иметь несколько сайтов, вам нужно несколько настроек settings.py, что означает несколько отдельных процессов/экземпляров. Разумеется, вы можете поделиться кода между ними, но для каждого сайта потребуется специальный рабочий / WSGIDaemon для обслуживания сайта.

Это эффективно удаляет любое преимущество запуска нескольких сайтов под одним капюшоном, если каждому сайту нужен экземпляр UWSGI.

Альтернативные идеи систем:

Любые идеи или помощь будут оценены с наибольшей оценкой, я не знаю, какой маршрут следует принимать с этим.

Джеймс

Ответ 1

ИМХО это сводится к тому, какая степень изменения возможна, каково влияние и насколько это возможно. Например:

У них будет общая база пользователей/база данных

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

Если вы запускаете тот же экземпляр, тогда легко обновить каждый сайт сразу (скажем, вам нужно выполнить патч обслуживания в базовой системе), но, с другой стороны, вы можете укусить вас (одна группа пользователей счастлива для изменения, но другие - не из-за функционального изменения или простоев, необходимых для применения патча (например).

Запуск одной и той же базы кода, но в разных случаях - это большие накладные расходы на обслуживание, но устраняет большой риск, связанный с управлением изменениями; разговор затем становится одним из способов наиболее эффективного поддержания многих экземпляров одного и того же объекта, а не сопоставления риска, связанного с каждым изменением.

Ответ 2

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

Django 1.8+: https://bitbucket.org/levit_scs/airavata

Django <: 1.7: https://bitbucket.org/uysrc/django-dynamicsites/overview (но это, вероятно, потребует некоторого вовлечения в зависимости от вашей версии Django)

Что добавляют эти 2 приложения по сравнению с инфраструктурой сайтов Django - это возможность легко обслуживать сайты в одном экземпляре в соответствии с именем домена.