У меня есть мультитенантное приложение Django, работающее с Postgres на Heroku. Есть ли способ создать экземпляр нового dyno / db / поддомена в зависимости от того, когда в моем приложении создается новый пользователь?
Что ж, я либо планирую сделать то, что описал выше, где я в основном реплицирую приложение (отдельная база данных для каждого клиента) на разные поддомены, либо я буду искусственно изолировать каждую аренду с помощью таблицы сопоставления в Postgres, используя только одну базу данных. .
Вы смотрели django-tenants? Он использует схемы PostgreSQL для изоляции данных и поддоменов для различения клиентов. Есть другие библиотеки тоже для изучения.
Вау, это здорово, Крис. Я понятия не имел, что такое сложное решение уже существует для django!
@Chris, у вас есть идеи, как я могу сгенерировать субдомен на стороне моего хоста домена? Я понимаю, как использовать подстановочные домены на heroku, но разве мне не нужно создавать поддомен?
Вы можете настроить запись DNS с подстановочными знаками для соответствия всем поддоменам. В своем приложении вы, вероятно, захотите отобразить разумную страницу, если запрашивается поддомен, который не соответствует клиенту.
@Chris Итак, обновление ... Я действительно все реализовал с помощью django-tenants, и это живо. Единственное, чего я не понимаю, это когда я хочу создать новый субдомен, я могу сделать это на стороне Heroku без проблем, однако как мне создать новую запись CName для этого субдомена, не переходя вручную на мой DNS ?
Кто ваш DNS-провайдер?
@Chris в настоящее время это GoDaddy, но я собираюсь передать домен в DNSimple
Хорошо. Я добавлю ответ сейчас и включу информацию об этом.
Отлично, поставлю в качестве ответа.





Это сильно зависит от того, как достигается многопользовательская среда.
Если вы еще не встроили в свое приложение мультитенантность, я рекомендую вам взглянуть на что-то вроде 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 индивидуально.
Спасибо за вашу помощь Крис, я перешел от автономного приложения к готовому к работе многопользовательскому приложению всего за пару дней.
Я рад, что смог помочь. Удачи!
Как у вас дела с мультиарендностью?