2011-02-02 11 views
20

Ecco il mio piano d'azione:Rails, Heroku e Sottodomini. Il mio caso speciale è fattibile?

Ho un'applicazione che dovrà supportare più clienti. Ad ogni cliente verrà assegnato un sottodominio per il servizio. Avremo anche un sito web di brochure che non ha l'applicazione, è solo un sito Web sul prodotto e su come i potenziali clienti possono impostare un account con noi.

Data:

www.mycoolsite.com indicherebbe un'applicazione brochure Heroku. client1.mycoolsite.com, client2.mycoolsite.com e client3.mycoolsite.com sarebbe puntano tutti alla stessa applicazione SaaS che potrebbe dire la differenza tra ogni richiesta e dovrei essere in grado di gestire in modo che solo vedono la loro data (cioè l'impostazione di un globale client_id o qualcosa di simile)

Come procedo a fare questo? Non ho fatto molto con il DNS quindi sono abbastanza indifferente su dove iniziare con questo.

Grazie.

+1

Ho anche questo problema e non ho trovato una soluzione (nemmeno contattando il supporto di heroku). Il più vicino che ho trovato è lo stesso della risposta di jpwynns, tuttavia se stai permettendo alla gente di iscriversi per un sottodominio della tua applicazione SaaS attraverso una pagina di registrazione, allora quella pagina dovrà anche aggiungere il sottodominio alla tua app di heroku (puoi farlo t usare un carattere jolly in quanto si scontrerà con il tuo www e Heroku non lo consentirà). Questa integrazione strettamente accoppiata tra la tua app e l'host potrebbe non essere desiderabile. Se qualcuno risolve questo sarò molto felice. –

risposta

1

Non vedo che questo sia un problema. Rails ha avuto il supporto per sottodomini come quello in passato con l'aiuto di gemme come subdomain_fu. In Rails 3, il supporto per sottodominio è effettivamente integrato e coperto da Ryan Bates http://railscasts.com/episodes/221-subdomains-in-rails-3. Dai un'occhiata a questo screencast per una buona direzione da dove iniziare. Credo che avrete bisogno del componente aggiuntivo domini personalizzati per Heroku http://docs.heroku.com/custom-domains.

+0

+1 per l'episodio di railscast. L'ho guardato subito dopo aver postato questo e l'ho trovato davvero utile! – DJTripleThreat

+0

Per la versione riveduta: http://railscasts.com/episodes/123-subdomains-revised –

0

Questo non sarà un problema. Per DNS impostare un record A per mycoolsite.com che punta al server in cui si desidera l'applicazione. Impostare un record A per www.mycoolsite.com configurato per heroku. Ora dovrai anche reindirizzare il traffico che arriva su mycoolsite.com senza www e reindirizzare su www.mycoolsite.com, in modo da mantenere il dominio di primo livello al servizio dell'app di brochure. Una volta che le richieste arrivano alla tua applicazione, puoi seguire il tutorial che raidfive collegato ti aiuterà a gestire i sottodomini all'interno della tua applicazione.

2

Quello che stai cercando di fare è molto fattibile e abbastanza facile da fare.

Avrai bisogno di una combinazione di record A e CNAME. In pratica, A registra i nomi host delle mappe in indirizzi IP e i record CNAME fungono da alias per i record A.

Supponiamo che il SaaS applicazione è ospitata presso 10.0.0.1 e la vostra applicazione è Heroku a 192.168.0.1, e che si desidera www.mycoolsite.com e mycoolsite.com per puntare allo stesso IP.

(Nota: non ho mai ospitato nulla Heroku, in modo configurazione di DNS che potrebbe essere leggermente diverso)

La prima cosa che ti serve è un record A per il dominio stesso. (Ho usato BIND Zone File Syntax qui - si spera il tuo provider DNS ha un sistema di gestione molto più semplice.)

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

Questi due record ci dicono che mycoolsite.com dovrebbe puntare all'indirizzo IP di Heroku, e che www.mycoolsite.com è un nome alternativo per mycoolsite.com , che risolverà anche l'indirizzo IP di Heroku.

Ora, impostiamo il DNS per il tuo sito SaaS. È possibile impostare un record A per ogni sottodominio, ma se si spostano i server, si avranno molti indirizzi IP da aggiornare. L'opzione più semplice è quella di configurare un record di A, quindi puntare sottodomini del vostro app a questo:

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

è quindi possibile aggiungere il numero di CNAME di cui hai bisogno.

+0

+1 discutendo i record 'A' e' CNAME'. Ho bisogno di saperne di più su di loro, grazie! – DJTripleThreat

16

Nessun problema. Lo facciamo ora, a Heroku. Ci capita di utilizzare Godaddy per il registrar di domini, ma qualsiasi pannello di controllo DNS ti consente di fare la stessa cosa.

Le altre spiegazioni che ho letto qui sono un po 'in generale, qui ci sono le specifiche ...

La spiegazione a Heroku è molto buono, a: http://docs.heroku.com/custom-domains (c'è anche un ottimo screencast mostra passo per passo)

la cosa fondamentale è che se il dominio ROOT (mycoolsite.com) si trova su Heroku, si desidera creare TRE record "A", poiché eseguono una magia crossover tollerante ai guasti. Così si avrebbe un record A per

75.101.163.44 
75.101.145.87 
174.129.212.2 

Ora, per ogni sottodominio si crea un record C

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

ora sul lato Heroku, si dispone di due applicazioni a destra? La "brochure app" e l'app saas.

accesso, e per ogni app andare a Risorse -> Addon -> ottenere più Addons -> Domini personalizzati (gratuito)

per l'applicazione brochure, aggiungere un dominio: www.mycoolsite.com

per l'applicazione di Saas , aggiungi ognuno dei client, ad esempio:

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

Ecco fatto. funziona come un campione. Divertiti.

+0

Wow, grazie per la risposta molto dettagli, +1. Ci proverò e molto probabilmente accetterò questa risposta quando andrò in giro a fare questo oggi. :) – DJTripleThreat

+0

se l'indirizzo pubblico del tuo sito è privo di 'www', come' twitter.com' invece di 'www.twitter.com', e vuoi anche fare quello di cui stai parlando (2 app, la 'principale 'uno, e dici uno staging), puoi avere 'site.com' e' staging.site.com' in questo modo? –

+0

Questo dovrebbe essere veramente su Heroku Dev Center come sopra, in testo, invece che solo in formato video. – chanderson0

Problemi correlati