Автоматическое развертывание приложения на Heroku на основе создания пользователя

У меня есть мультитенантное приложение Django, работающее с Postgres на Heroku. Есть ли способ создать экземпляр нового dyno / db / поддомена в зависимости от того, когда в моем приложении создается новый пользователь?

Как у вас дела с мультиарендностью?

Chris 25.04.2018 03:02

Что ж, я либо планирую сделать то, что описал выше, где я в основном реплицирую приложение (отдельная база данных для каждого клиента) на разные поддомены, либо я буду искусственно изолировать каждую аренду с помощью таблицы сопоставления в Postgres, используя только одну базу данных. .

Oh Great One 25.04.2018 04:19

Вы смотрели django-tenants? Он использует схемы PostgreSQL для изоляции данных и поддоменов для различения клиентов. Есть другие библиотеки тоже для изучения.

Chris 25.04.2018 13:09

Вау, это здорово, Крис. Я понятия не имел, что такое сложное решение уже существует для django!

Oh Great One 25.04.2018 21:30

@Chris, у вас есть идеи, как я могу сгенерировать субдомен на стороне моего хоста домена? Я понимаю, как использовать подстановочные домены на heroku, но разве мне не нужно создавать поддомен?

Oh Great One 26.04.2018 09:24

Вы можете настроить запись DNS с подстановочными знаками для соответствия всем поддоменам. В своем приложении вы, вероятно, захотите отобразить разумную страницу, если запрашивается поддомен, который не соответствует клиенту.

Chris 26.04.2018 13:18

@Chris Итак, обновление ... Я действительно все реализовал с помощью django-tenants, и это живо. Единственное, чего я не понимаю, это когда я хочу создать новый субдомен, я могу сделать это на стороне Heroku без проблем, однако как мне создать новую запись CName для этого субдомена, не переходя вручную на мой DNS ?

Oh Great One 30.04.2018 19:39

Кто ваш DNS-провайдер?

Chris 30.04.2018 20:32

@Chris в настоящее время это GoDaddy, но я собираюсь передать домен в DNSimple

Oh Great One 30.04.2018 20:41

Хорошо. Я добавлю ответ сейчас и включу информацию об этом.

Chris 30.04.2018 20:42

Отлично, поставлю в качестве ответа.

Oh Great One 30.04.2018 20:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это сильно зависит от того, как достигается многопользовательская среда.

Если вы еще не встроили в свое приложение мультитенантность, я рекомендую вам взглянуть на что-то вроде django-tenants, которое добавляет поддержку мультиарендности на основе поддоменов и схем PostgreSQL. Если это не подходит, вы можете исследовать другие похожие библиотеки.

После того, как вы настроили django-tenants, со стороны Django больше нечего делать. Все дело в конфигурации. Запросы к настроенным поддоменам будут перенаправлены в соответствующую общую схему или схему базы данных клиента.

Но эти запросы должны попасть в ваше приложение. Вот где приходит DNS, в идеале с использованием поддоменов с подстановочными знаками.

Во-первых, добавьте *.your-domain.tld в домены вашего приложения на стороне Heroku:

heroku domains:add *.your-domain.tld

Затем добавьте запись CNAME с подстановочным знаком с вашим поставщиком DNS. Точный механизм того, как это сделать, будет варьироваться от поставщика к поставщику. Вы сказали, что переходите на DNSimple, и это похоже, что они поддерживают записи CNAME с подстановочными знаками, используя *.


¹К сожалению, некоторые поставщики DNS, такие как GoDaddy, не поддерживают записи CNAME с подстановочными знаками. В этом случае вам придется создавать каждую запись CNAME индивидуально.

Спасибо за вашу помощь Крис, я перешел от автономного приложения к готовому к работе многопользовательскому приложению всего за пару дней.

Oh Great One 30.04.2018 21:05

Я рад, что смог помочь. Удачи!

Chris 30.04.2018 21:07

Другие вопросы по теме