Django-cms для нескольких веб-сайтов

Как настроить django-cms проект для поддержки нескольких веб-сайтов?

В официальной документации нет ссылки на эту информацию и только ограниченную информацию в списке рассылки, но она находится в заголовке "Приложение Django для управления иерархическими страницами контента, возможно, на нескольких языках и/или на нескольких сайтах". и через Django Sites Framework уже встроена поддержка, а на страницах администратора могут быть связаны с разными сайтами.

по теме:

Django-CMS: несколько доменов в одном проекте

Ответ 1

существует несколько различных вариантов управления различными веб-сайтами (и, следовательно, шаблонами и содержимым страницы) в Django-cms.

Основной подход

Мой любимый, наверное, самый простой:

В моем virtualenv у меня есть единственная установка django-cms И один "проект", содержащий ВСЕ шаблоны, которые я использую.

У меня есть файл глобальных настроек плюс один для каждого веб-сайта, который только импортирует все глобальные настройки и устанавливает "SITE_ID".

from base import *
SITE_ID = XXX

Для структуры я обычно имею папку settings, пустую __init__.py внутри, a base.py со всеми общими настройками, включая настройки django-cms, а затем различные веб-сайты, например. site1.py site2.py и т.д. (иногда моя структура даже немного сложнее, чтобы также учитывать dev/production, разные машины и т.д., но это не имеет значения здесь).

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

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

server {
    listen      80;
    server_name example1.com www.example1.com;
    ...
    location / {
        proxy_pass  http://localhost:PORT;
    }

}

Любой из экземпляров gunicorn может получить доступ к администратору, и все данные будут совместно использоваться в одной базе данных, но для простоты

Что все!

Конечно, это можно сделать аналогично Apache, mod_wsgi и другим виртуальным хостам.

Дополнительно

Темы

Я фактически структурировал свои папки, чтобы иметь папку приложений под названием themes. Каждая тема на самом деле является APP, хотя в основном содержит только папки templates и static, и она добавляется в INSTALLED_APPS. Это позволяет использовать такие интересные вещи, как наследование и/или переопределение между различными темами.

Динамический SITE_ID

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