Rails, Heroku и поддоменов.Возможен ли мой особый сценарий? - PullRequest
20 голосов
/ 02 февраля 2011

Вот мой сценарий:

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

Учитывая:

www.mycoolsite.com будет указывать на приложение для брошюр на Heroku.client1.mycoolsite.com, client2.mycoolsite.com и client3.mycoolsite.com будут указывать на одно и то же приложение SaaS, которое может показать разницу между каждым запросом, и я должен быть в состоянии обработать, чтобы они видели только свою дату (то есть установили глобальный client_id или что-то в этом роде).вот так)

Как мне это сделать?Я не очень много сделал с DNS, так что я не знаю, с чего начать.

Спасибо.

Ответы [ 4 ]

16 голосов
/ 02 февраля 2011

Нет пота. Мы делаем это сейчас, в Heroku. Мы используем Godaddy для регистратора доменов, но любая панель управления DNS позволит вам сделать то же самое.

Другие объяснения, которые я здесь читаю, носят общий характер, здесь есть особенности ...

Объяснение у Героку очень хорошее, по адресу: http://docs.heroku.com/custom-domains (там даже очень хороший скринкаст показывает шаг за шагом)

главное, если ваш домен ROOT (mycoolsite.com) находится в Heroku, и вы хотите создать ТРИ записи типа «А», потому что они выполняют отказоустойчивую перекрестную магию. Таким образом, у вас будет запись A для

75.101.163.44
75.101.145.87
174.129.212.2

Теперь для каждого субдомена вы создаете запись CNAME

www  -> proxy.heroku.com
client1 -> proxy.heroku.com
client2 -> proxy.heroku.com
client3 -> proxy.heroku.com

СЕЙЧАС на стороне HEROKu, у вас есть два приложения, верно? Приложение для брошюр и приложение saas.

Войдите, и для каждого приложения перейдите в Ресурсы -> Аддон -> Получить дополнительные аддоны -> Пользовательские домены (бесплатно)

для приложения для брошюр, добавьте ОДИН домен: www.mycoolsite.com

для приложения saas, добавьте каждого из клиентов, например:

client1.mycoolsite.com 
client2.mycoolsite.com 
client3.mycoolsite.com

Вот и все. работает как чемпион. Веселитесь.

2 голосов
/ 02 февраля 2011

То, что вы пытаетесь сделать, очень выполнимо и довольно просто.

Вам понадобится комбинация A и CNAME записей. Проще говоря, A записей отображают имена хостов на IP-адреса, а CNAME записи действуют как псевдонимы для A записей.

Предположим, что ваше SaaS-приложение размещено на 10.0.0.1, а ваше приложение Heroku на 192.168.0.1 и что вы хотите, чтобы www.mycoolsite.com и mycoolsite.com указывали на один и тот же IP-адрес.

(Примечание: я никогда не размещал в Heroku ничего, поэтому настройка DNS может немного отличаться)

Первое, что вам нужно, это запись A для самого домена. (Я использовал Синтаксис файла зоны BIND здесь - надеюсь, у вашего DNS-провайдера гораздо более простая система администрирования.)

mycoolsite.com.      A      192.168.0.1    ; heroku
www                  CNAME  mycoolsite.com ; also heroku

Эти две записи говорят нам, что mycoolsite.com должен указывать на IP-адрес Heroku, а www.mycoolsite.com - альтернативное имя для mycoolsite.com, которое также будет преобразовываться в IP-адрес Heroku.

Теперь давайте настроим DNS для вашего сайта SaaS. Вы могли бы установить запись A для каждого субдомена, но если вы переместите серверы, у вас будет много IP-адресов для обновления. Самый простой вариант - настроить одну A запись, а затем указать на нее субдомены вашего приложения:

sassapp              A      10.0.0.1        ; saas app server canonical name
client1              CNAME  sassapp         ; alias
client2              CNAME  sassapp         ; alias
client3              CNAME  sassapp         ; alias

Затем вы можете добавить столько CNAME, сколько вам нужно.

1 голос
/ 02 февраля 2011

Я не вижу в этом проблемы.В прошлом Rails поддерживал подобные субдомены с помощью таких гемов, как subdomain_fu.В Rails 3 поддержка поддоменов на самом деле встроена и покрыта Райаном Бейтсом http://railscasts.com/episodes/221-subdomains-in-rails-3. Взгляните на этот скринкаст, чтобы узнать, с чего начать.Я полагаю, что вам понадобится дополнительный модуль для Heroku http://docs.heroku.com/custom-domains.

0 голосов
/ 02 февраля 2011

Это не будет проблемой. Для DNS установите запись A для mycoolsite.com, указывающую на сервер, где вы хотите, чтобы ваше приложение. Установите запись A для www.mycoolsite.com, настроенную для героку. Теперь вы также захотите перенаправить трафик, который поступает на mycoolsite.com без www, и перенаправить на www.mycoolsite.com, и ваш домен верхнего уровня будет обслуживать ваше приложение для брошюр. Как только запросы поступают в ваше приложение, вы можете следовать руководству, связанному с raidfive, которое поможет вам в обработке поддоменов внутри вашего приложения.

...