Как создать приложение SaaS с помощью Python и Django
Можете ли вы посоветовать мне некоторые статьи/приложения, которые позволяют вам создавать приложение SaaS (Software as a Service) с помощью Python и Django.
На данный момент общие темы, которые я не понимаю, следующие:
- У вас есть одно рабочее приложение для всех клиентов или одно приложение на клиента
- Как вы управляете доступом к базе данных, разрешениями или разными БД для каждого клиента.
- Существуют ли какие-либо инструменты, которые позволяют конвертировать одно приложение в SaaS
Ответы
Ответ 1
Ответ 2
Самый простой, элементарный пример того, как вы это сделаете.
Предположим, у вас есть простое приложение, предназначенное для решения конкретного бизнес-кейса. Например, вы создали приложение для обработки резервирования номеров в вашем офисе.
Чтобы "преобразовать" это приложение в службу, вы должны настроить его таким образом, чтобы большая часть пользовательских частей приложения была параметрической (их можно "запланировать" - из-за отсутствия лучшего слова).
Так будет преобразован передний конец. Вы можете создавать переменные для хранения логотипа, заголовка, тизера, цветовой схемы для приложения; позволяя каждому пользователю настраивать свой экземпляр.
Пока ваше приложение может настроить себя на передней панели. Он по-прежнему использует ту же базу данных, которая была разработана на первом этапе.
Теперь возникает вопрос о отображении только тех полей, которые относятся к определенному пользователю. Это будет параметризация базы данных. Таким образом, вы можете добавить столбец, который идентифицирует каждую строку как принадлежащую определенному пользователю; затем создавать представления или хранимые процедуры, которые фильтруют записи на основе зарегистрированного пользователя.
Теперь приложение может быть "сдано в аренду"; поскольку вы можете настроить экземпляр на основе пользователя.
Затем он просто становится больше отсюда - в зависимости от масштаба, типа и предполагаемой настройки вашего приложения. Вы можете решить, что ваше приложение работает лучше, когда каждый пользователь имеет свою собственную выделенную базу данных вместо хранимой процедуры + просмотр комбо.
Вы можете решить, что для некоторых типов пользователей (или "пакетов" ) вам нужен выделенный экземпляр вашего приложения. Таким образом, для пользователей "премиум" или "ультра" вы хотите, чтобы ваша собственная выделенная система работала.
Если вашему приложению требуется много места для хранения - вы можете взять плату отдельно для хранения.
Суть в том, что это не имеет никакого отношения к используемому языку. Это больше проблема архитектуры и дизайна.
Ответ 3
Программное обеспечение как услуга - это просто маркетинговое слово, оно технически не отличается от сервера, доступного через Интернет. Поэтому вопрос 3 не имеет смысла. Это оставляет нам вопрос 1 и 2:
-
Что вы подразумеваете под "приложением" в этом контексте? Ваше веб-приложение (построенное с помощью Python и Django) может иметь несколько приложений Django (компоненты, составляющие веб-приложение), но я думаю, что это не то, что вы имеете в виду. Вы можете создать свой сайт в Python/Django и иметь различные параметры настройки в зависимости от того, какой пользователь (клиент) зарегистрирован. Например, премиум-клиент может иметь несколько дополнительных опций, но он все еще является частью одной и той же базы кода. Просто некоторые опции (кнопки/элементы управления и т.д.) Не отображаются для определенных клиентов.
-
В Django есть множество инструментов для управления пользователями, разрешений и групп. Вы можете предоставить каждому пользователю (каждому клиенту) разные разрешения, и эти разрешения определяют, что они могут делать. Доступ к базе данных должен управляться вашим веб-приложением. Например, код определяет, какая информация должна отображаться на веб-странице (в зависимости от того, какой клиент входит в систему), и этот код извлекает информацию из базы данных. В зависимости от масштаба, на который вы нацеливаетесь, вы также можете указать, какая база данных должна использоваться для извлечения информации из.
Ответ 4
У меня есть сообщение в блоге, описывающее мое предложение о том, как сделать создание веб-приложения SAAS с несколькими арендаторами, используя Django. Многоуровневость здесь означает, что когда пользователь регистрируется, у них есть свой поддомен. Напомним:
- Все арендаторы используют одну базу данных, но каждая из них имеет свои собственные схемы. Представьте, что у вас есть веб-сайт abc.com, и кто-то зарегистрировал арендатора xyz, чтобы они могли получить доступ к своей странице через xyz.abc.com, затем для арендатор xyz у вас есть отдельная схема, содержащая все таблицы, таким образом инкапсулируя данные, относящиеся только к арендатору xyz. Существуют и другие способы, такие как наличие одной базы данных и одной схемы для всех или наличие даже отдельных баз данных. Но подход к схемам - лучший компромисс. Документация библиотеки django-tenants содержит более подробную информацию, если вы заинтересованы
- Используйте django-tenants библиотеку, чтобы абстрагировать работу с арендаторами. Когда кто-то обращается к xyz.abc.com, вам нужно знать, что xyz является арендатором и что вы должны использовать схему xyz. django-tenants библиотека делает это для вас, поэтому при каждом запросе вы можете получить объект арендатора, просто сделав
current_tenant = request.tenant
- Вам нужно различать общие таблицы и таблицы, относящиеся к арендатору. Например, наличие таблицы со списком заказов зависит от арендатора. У каждого арендатора может быть своя собственная база данных, содержащая все их заказы. Эта таблица должна быть внутри схемы xyz. В то же время у вас будут некоторые основные таблицы Django, например пользователь. Данные могут быть разделены, например, чтобы запретить двум пользователям регистрироваться с тем же адресом электронной почты.
- Вам нужно настроить DNS для поиска подстановочного выражения *. abc.com, для которого вы можете добавить запись A внутри вашей CPanel с помощью ссылки
*.abc.com
к IP вашего сервера.