2011-02-02 22 views
20

Đây là kịch bản của tôi:Rails, Heroku và Subdomains. Kịch bản đặc biệt của tôi có khả thi không?

Tôi có một ứng dụng sẽ phải hỗ trợ nhiều khách hàng. Mỗi khách hàng sẽ được cấp một tên miền phụ cho dịch vụ đó. Chúng tôi cũng sẽ có một trang web tài liệu không có ứng dụng, đó chỉ là một trang web về sản phẩm và cách khách hàng tiềm năng có thể thiết lập tài khoản với chúng tôi.

Given:

www.mycoolsite.com sẽ trỏ đến một ứng dụng tài liệu trên Heroku. client1.mycoolsite.com, client2.mycoolsite.comclient3.mycoolsite.com sẽ tất cả các điểm đến các ứng dụng SaaS tương tự mà có thể biết sự khác biệt giữa mỗi yêu cầu và tôi sẽ có thể xử lý vì vậy họ chỉ nhìn thấy ngày của họ (tức là thiết lập một toàn cầu client_id hoặc một cái gì đó như thế)

Làm thế nào để tôi làm việc này? Tôi đã không làm được rất nhiều với DNS vì vậy tôi khá clueless về nơi để bắt đầu với điều này.

Cảm ơn.

+1

Tôi cũng gặp sự cố này và không tìm thấy giải pháp (ngay cả khi liên hệ với bộ phận hỗ trợ của heroku). Gần nhất tôi đã tìm thấy giống như câu trả lời jpwynns, tuy nhiên nếu bạn cho phép mọi người đăng ký tên miền phụ của ứng dụng SaaS của bạn thông qua trang đăng ký, thì trang đó cũng sẽ cần phải thêm tên miền phụ vào ứng dụng heroku của bạn (bạn có thể ' t sử dụng một ký tự đại diện vì nó sẽ đụng độ với www và Heroku của bạn không cho phép nó). Sự tích hợp chặt chẽ này giữa ứng dụng của bạn và máy chủ có thể không được mong muốn. Nếu ai đó giải quyết điều này tôi sẽ rất hạnh phúc. –

Trả lời

1

Tôi không thấy đây là vấn đề. Rails đã có hỗ trợ cho các tên miền phụ như vậy trong quá khứ với sự giúp đỡ từ các đá quý như subdomain_fu. Trong Rails 3, hỗ trợ tên miền phụ thực sự được xây dựng và bao phủ bởi Ryan Bates http://railscasts.com/episodes/221-subdomains-in-rails-3. Hãy xem màn hình đó để biết hướng bắt đầu từ đâu. Tôi tin rằng bạn sẽ cần tiện ích bổ sung miền tùy chỉnh cho Heroku http://docs.heroku.com/custom-domains.

+0

+1 cho tập railscasts. Tôi đã xem nó ngay sau khi đăng bài này và thấy nó thực sự hữu ích! – DJTripleThreat

+0

Đối với ấn bản sửa đổi: http://railscasts.com/episodes/123-subdomains-revised –

0

Đây không phải là vấn đề. Đối với DNS, hãy thiết lập bản ghi A cho số mycoolsite.com trỏ đến máy chủ mà bạn muốn ứng dụng của mình. Thiết lập bản ghi A cho www.mycoolsite.com được định cấu hình cho heroku. Giờ đây, bạn cũng sẽ muốn chuyển hướng lưu lượng truy cập đến trên mycoolsite.com mà không cần www và chuyển hướng đến www.mycoolsite.com, điều này sẽ giữ cho miền cấp cao nhất của bạn phân phối ứng dụng tài liệu của bạn. Một khi các yêu cầu được đưa đến ứng dụng của bạn, bạn có thể làm theo hướng dẫn rằng việc tấn công liên kết với điều đó sẽ giúp bạn xử lý các tên miền phụ bên trong ứng dụng của bạn.

2

Điều bạn đang cố gắng làm là rất khả thi và khá dễ thực hiện.

Bạn sẽ cần kết hợp các bản ghi ACNAME. Đơn giản chỉ cần đặt, A ghi lại tên máy chủ bản đồ vào địa chỉ IP và các bản ghi CNAME hoạt động như bí danh cho các bản ghi A.

Giả sử ứng dụng SaaS của bạn được lưu trữ tại 10.0.0.1 và ứng dụng Heroku của bạn là 192.168.0.1 và bạn muốn www.mycoolsite.commycoolsite.com trỏ đến cùng một IP.

(Lưu ý: Tôi chưa bao giờ tổ chức bất cứ điều gì tại Heroku, vì vậy cấu hình DNS mà có thể hơi khác nhau)

Điều đầu tiên bạn cần là một kỷ lục A cho lĩnh vực riêng của mình. (Tôi đã sử dụng BIND Zone File Syntax đây - hy vọng cung cấp dịch vụ DNS của bạn có một hệ thống quản lý đơn giản hơn nhiều.)

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

Hai hồ sơ cho chúng tôi biết rằng mycoolsite.com nên trỏ vào địa chỉ IP Heroku, và rằng www.mycoolsite.com là một tên thay thế cho mycoolsite.com , cũng sẽ giải quyết địa chỉ IP của Heroku.

Bây giờ, hãy thiết lập DNS cho trang web SaaS của bạn. Bạn có thể thiết lập bản ghi A cho mỗi tên miền phụ, nhưng nếu bạn di chuyển máy chủ, bạn sẽ có rất nhiều địa chỉ IP để cập nhật. Các tùy chọn đơn giản nhất là để cấu hình một A hồ sơ, sau đó trỏ tên miền phụ của ứng dụng của bạn vào nó:

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

Sau đó, bạn có thể thêm bao nhiêu CNAME như bạn cần.

+0

+1 thảo luận về các bản ghi 'A' và' CNAME'. Tôi cần phải tìm hiểu thêm về họ, cảm ơn! – DJTripleThreat

16

Không đổ mồ hôi. Chúng tôi làm điều đó ngay bây giờ, tại Heroku. Chúng tôi tình cờ sử dụng Godaddy cho công ty đăng ký tên miền, nhưng bất kỳ bảng điều khiển DNS nào cũng sẽ cho phép bạn làm điều tương tự.

Các giải thích khác mà tôi đọc ở đây là một vị tướng ít, đây là những chi tiết cụ thể ...

Lời giải thích tại Heroku là rất tốt, tại địa chỉ: http://docs.heroku.com/custom-domains (thậm chí có một hình màn ảnh rất tốt cho thấy từng bước)

điều quan trọng là nếu tên miền ROOT của bạn (mycoolsite.com) là tại Heroku bạn muốn tạo BA "A" hồ sơ, bởi vì họ làm một số phép thuật chéo chịu lỗi. Vì vậy, bạn muốn có một bản ghi cho

75.101.163.44 
75.101.145.87 
174.129.212.2 

Bây giờ cho mỗi subdomain khi bạn tạo ra một kỷ lục C

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

VỚI DOANH NGHIỆP ở phía Heroku, bạn có hai ứng dụng phải không? Ứng dụng 'brochure' và ứng dụng saas.

đăng nhập, và cho mỗi ứng dụng đi đến Resources -> Addon -> Get More Addons -> Tên miền Custom (miễn phí)

cho ứng dụng tờ rơi, thêm ONE miền: www.mycoolsite.com

cho các ứng dụng SaaS , thêm từng khách hàng, ví dụ:

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

Vậy đó. hoạt động như một nhà vô địch. Chúc vui vẻ.

+0

Wow, cảm ơn câu trả lời rất chi tiết, +1. Tôi sẽ thử điều này và rất có thể chấp nhận câu trả lời này khi tôi đi xung quanh để làm điều này ngày hôm nay. :) – DJTripleThreat

+0

nếu địa chỉ công khai của trang web của bạn không có 'www', như' twitter.com' thay vì 'www.twitter.com' và bạn cũng muốn làm những gì bạn đang nói về (2 ứng dụng, 'chính 'một, và nói một dàn), bạn có thể có 'site.com' và' staging.site.com' như thế này? –

+0

Điều này thực sự nên được trên Trung tâm Dev Heroku như trên, trong văn bản, thay vì chỉ ở định dạng video. – chanderson0

Các vấn đề liên quan