Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Tôi có thể triển khai MongoDB trên Heroku không?

Khi chúng tôi bắt đầu xây dựng các ứng dụng bản địa nhiều hơn, việc chọn các dịch vụ và công cụ phù hợp có thể khá áp đảo. May mắn thay, khi nói đến việc chọn một dịch vụ cơ sở dữ liệu đám mây, MongoDB Atlas có thể là lựa chọn dễ nhất!MongoDB Atlas may be the easiest choice yet!

Khi kết hợp với Heroku, một trong những giải pháp PAAS phổ biến nhất cho các nhà phát triển, bạn sẽ có thể xây dựng và triển khai các ứng dụng đám mây được quản lý đầy đủ ngay lập tức. Phần tốt nhất? MongoDB Atlas tích hợp dễ dàng với các ứng dụng Heroku. Tất cả những gì bạn cần làm là đặt chuỗi kết nối của Atlas Cluster thành biến cấu hình Heroku. Đó thực sự là tất cả những gì có với nó!Heroku, one of the most popular PaaS solutions for developers, you'll be able to build and deploy fully managed cloud applications in no time. The best part? MongoDB Atlas integrates easily with Heroku applications. All you need to do is set your Atlas cluster's connection string to a Heroku config variable. That's really all there is to it!

Nếu bạn đã quen thuộc với MongoDB, sử dụng Atlas MongoDB với các ứng dụng đám mây của bạn là một lựa chọn tự nhiên. MongoDB Atlas là một dịch vụ cơ sở dữ liệu đám mây được quản lý đầy đủ cho MongoDB tự động hóa việc quản lý các cụm MongoDB trên đám mây. Cung cấp các tính năng như sao lưu tự động, tự động chia tỷ lệ, dung sai lỗi đa AUS và bộ công cụ quản lý và phân tích đầy đủ, Atlas là DBAAs tinh vi nhất ở bất cứ đâu, và chỉ cách đó vài lần.

Để xem cách thức nhanh chóng để đứng dậy và chạy với MongoDB Atlas, chỉ cần làm theo vài bước tiếp theo để thiết lập cụm miễn phí đầu tiên của bạn. Sau đó, xem bạn có thể kết nối cụm Atlas mới của mình với ứng dụng Heroku mới như thế nào bằng cách làm theo các hướng dẫn từng bước sau này trong hướng dẫn này.

Điều kiện tiên quyết

Hướng dẫn này giả định như sau:

  • Bạn đã quen thuộc với MongoDB và có các ứng dụng bằng văn bản sử dụng MongoDB.

  • Bạn đã quen thuộc với Heroku và biết cách triển khai các ứng dụng Heroku. - Bạn đã cài đặt Heroku CLI.Heroku CLI installed.

  • Bạn đã quen thuộc và đã cài đặt Git.Git installed.

Với những giả định này trong tâm trí, hãy bắt đầu!

Thiết lập cụm Atlas của bạn trong 5 bước (hoặc ít hơn!)

Bước 1: Tạo tài khoản Atlas

Nếu bạn đã tạo một tài khoản MongoDB bằng địa chỉ email của mình, bạn có thể bỏ qua bước này! Đăng nhập vào tài khoản của bạn thay thế.Sign into your account instead.

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Bước 2: Tạo tổ chức và dự án của bạn

Sau khi đăng ký, Atlas sẽ nhắc bạn tạo một tổ chức và dự án nơi bạn có thể triển khai cụm của mình.

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Bước 3: Triển khai cụm đầu tiên của bạn

Bây giờ bạn sẽ có thể chọn từ một loạt các tùy chọn cụm. Đối với hướng dẫn này, chúng tôi sẽ chọn tùy chọn cụm được chia sẻ, đó là cụm cấp miễn phí của Atlas. Nhấp vào "Tạo cụm" trong tùy chọn cụm được chia sẻ:

Trên trang tiếp theo, bạn sẽ được nhắc chọn một vài tùy chọn cho cụm của mình:

Chọn nơi bạn muốn triển khai cụm của mình. Điều quan trọng là chọn khu vực có sẵn gần nhất với ứng dụng của bạn và lý tưởng là cùng một khu vực, để giảm thiểu độ trễ. Trong trường hợp của chúng tôi, hãy chọn khu vực N. Virginia (US-East-1), với AWS là nhà cung cấp đám mây của chúng tôi (vì chúng tôi đang triển khai trên Heroku và đó là nơi Heroku lưu trữ cơ sở hạ tầng của nó):

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Tại đây, bạn sẽ thấy các tầng cụm có sẵn cho tùy chọn cụm được chia sẻ. Bạn có thể xem một so sánh về RAM, lưu trữ, VCPU và giá cơ sở giữa các tầng để giúp bạn chọn đúng tầng. Đối với hướng dẫn của chúng tôi, hãy để tầng Sandbox M0 mặc định được chọn:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Tùy thuộc vào tầng bạn chọn, một số tùy chọn bổ sung có thể có sẵn cho bạn. Điều này bao gồm phiên bản MongoDB mà bạn muốn triển khai và, cho các cụm M2 và các tùy chọn sao lưu. Đối với hướng dẫn này, chọn phiên bản mới nhất, MongoDB 4.4:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Cuối cùng, bạn có thể đặt tên cho cụm của bạn. Hãy nhớ rằng một khi cụm của bạn được tạo, bạn sẽ không thể thay đổi nó! Tại đây, chúng tôi sẽ đặt tên cho cụm leaflix-east của chúng tôi để giúp chúng tôi biết dự án và khu vực mà cụm này sẽ hỗ trợ:leaflix-east to help us know which project and region this cluster will be supporting:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Đó là nó! Hãy chắc chắn xem lại các tùy chọn của bạn lần cuối trước khi nhấp vào nút "Tạo cụm".

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Bước 4: Tạo người dùng cơ sở dữ liệu cho cụm của bạn

Atlas yêu cầu khách hàng xác thực là người dùng cơ sở dữ liệu MongoDB để truy cập các cụm, vì vậy hãy tạo một cách thực sự nhanh chóng cho cụm của bạn.

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Như bạn có thể thấy trong GIF ở trên, việc tạo người dùng cơ sở dữ liệu là đơn giản. Đầu tiên điều hướng đến phần "truy cập cơ sở dữ liệu" (nằm trong "Bảo mật" trong thanh điều hướng bên trái). Nhấp vào "Tạo người dùng cơ sở dữ liệu mới". Lời nhắc sẽ xuất hiện nơi bạn có thể chọn phương thức xác thực và đặc quyền người dùng cơ sở dữ liệu của người dùng này.

Chọn phương thức xác thực "Mật khẩu" và cung cấp cho người dùng này tên người dùng và mật khẩu. Để thuận tiện, bạn thậm chí có thể tự động phát triển mật khẩu an toàn ngay trong Atlas, mà chúng tôi rất khuyến khích.

Sau khi tự phát mật khẩu của bạn, hãy chắc chắn nhấp vào Sao chép và lưu trữ ở nơi an toàn ngay bây giờ. Chúng tôi sẽ cần nó sau khi kết nối với cụm của chúng tôi!

Chọn một vai trò tích hợp cho người dùng này. Đối với hướng dẫn này, tôi đang chọn "Atlas Admin", cung cấp nhiều đặc quyền nhất.

Cuối cùng, nhấp vào nút "Thêm người dùng". Bạn đã tạo người dùng cơ sở dữ liệu đầu tiên của cụm!

Bước cuối cùng trong việc thiết lập cụm của bạn là chọn địa chỉ IP nào được phép truy cập nó. Để nhanh chóng đứng dậy, hãy đặt cụm của bạn để cho phép truy cập từ bất cứ đâu:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Xin chúc mừng! Bạn chỉ cần thiết lập thành công cụm Atlas của mình!

Lưu ý: Bạn có thể không muốn cho phép loại truy cập này trong môi trường sản xuất. Thay vào đó, bạn sẽ muốn xác định các địa chỉ IP chính xác mà bạn biết ứng dụng của bạn sẽ được lưu trữ và đặt rõ ràng địa chỉ IP hoặc phạm vi IP, nên có quyền truy cập vào cụm của bạn. Sau khi thiết lập ứng dụng Heroku của bạn, hãy làm theo các bước trong phần "Định cấu hình địa chỉ IP Heroku trong Atlas" bên dưới để xem cách thêm địa chỉ IP phù hợp cho ứng dụng Heroku của bạn.

Định cấu hình Heroku để chỉ vào cụm Atlas MongoDB bằng cách sử dụng Cấu hình Vars

Nhanh chóng thiết lập cụm Atlas của chúng tôi khá thú vị, nhưng chúng tôi nghĩ rằng bạn sẽ thấy phần này thậm chí còn ly kỳ hơn!

Được hỗ trợ bởi Atlas, các ứng dụng Heroku rất đơn giản để thiết lập. Tất cả những gì bạn cần làm là tạo một cấu hình cấp ứng dụng VAR giữ chuỗi kết nối của cụm của bạn. Sau khi thiết lập, bạn có thể truy cập một cách an toàn cấu hình đó trong ứng dụng của mình!

Bước 1: Đăng nhập vào Heroku CLI

Lệnh này mở trình duyệt web của bạn đến trang đăng nhập Heroku. Nếu bạn đã đăng nhập, chỉ cần nhấp vào nút "Đăng nhập vào". Ngoài ra, bạn có thể sử dụng cờ -i để đăng nhập thông qua dòng lệnh.

Bước 2: Bản sao ứng dụng demo của tôi

Để tiếp tục hướng dẫn này, tôi đã tạo một ứng dụng nút demo sử dụng Atlas MongoDB và là một ứng dụng tôi muốn triển khai cho Heroku. Sao chép nó, sau đó điều hướng đến thư mục của nó:demo Node application that uses MongoDB Atlas and is an app I'd like to deploy to Heroku. Clone it, then navigate to its directory:

Bước 3: Tạo ứng dụng Heroku

Như bạn có thể thấy, tôi đã đặt tên cho tôi leaflix.leaflix.

Nhận chuỗi kết nối cụm Atlas của bạn

Quay trở lại bảng điều khiển của Atlas Cluster vì chúng tôi sẽ cần lấy chuỗi kết nối của chúng tôi.

Nhấp vào nút "Kết nối".

Chọn tùy chọn "Kết nối ứng dụng của bạn".

Tại đây, bạn sẽ thấy chuỗi kết nối chúng ta sẽ cần kết nối với cụm của chúng tôi. Sao chép chuỗi kết nối.

Dán chuỗi vào một trình soạn thảo; Chúng ta sẽ cần sửa đổi nó một chút trước khi chúng ta có thể đặt nó thành biến cấu hình Heroku.

Như bạn có thể thấy, Atlas đã thuận tiện thêm tên người dùng của người dùng cơ sở dữ liệu mà chúng tôi đã tạo trước đó. Để hoàn thành chuỗi kết nối và làm cho nó hợp lệ, thay thế bằng mật khẩu của người dùng cơ sở dữ liệu của riêng bạn và bằng sample_mflix, đây là bộ dữ liệu mẫu ứng dụng demo của chúng tôi sẽ sử dụng. with sample_mflix, which is the sample dataset our demo application will use.

💡 Nếu bạn không có mật khẩu của người dùng cơ sở dữ liệu tiện dụng, tự động hóa một cái mới và sử dụng nó trong chuỗi kết nối của bạn. Chỉ cần nhớ cập nhật nó nếu bạn tự động hóa nó một lần nữa! Bạn có thể tìm thấy mật khẩu bằng cách truy cập cơ sở dữ liệu> Nhấp vào "Chỉnh sửa" trên cơ sở dữ liệu mong muốn> Chỉnh sửa mật khẩu> Autogenate Secure Mật khẩu

Đặt một cấu hình mongodb_uri var

Bây giờ chúng tôi đã hình thành đúng chuỗi kết nối của mình, đã đến lúc lưu trữ nó trong biến cấu hình Heroku. Hãy đặt chuỗi kết nối của chúng tôi thành một cấu hình var có tên MongoDB_URI:

Một số điều quan trọng cần lưu ý ở đây:

  • Lệnh này là tất cả một dòng.

  • Vì định dạng của chuỗi kết nối của chúng tôi chứa các ký tự đặc biệt, nên cần phải bọc nó trong các trích dẫn.

Thats tất cả để có nó! Bây giờ bạn đã thêm đúng chuỗi kết nối của Atlas Cluster dưới dạng biến cấu hình Heroku, điều đó có nghĩa là bạn có thể truy cập một cách an toàn chuỗi đó sau khi ứng dụng của bạn được triển khai cho Heroku.

Ngoài ra, bạn cũng có thể thêm cấu hình này thông qua tab "Cài đặt" của ứng dụng trong bảng điều khiển Heroku. Truy cập vào ứng dụng của bạn> LEAFFLIX> Cài đặt. Trong phần Cấu hình Vars, nhấp vào nút "Hiển thị VARS Cấu hình" và thêm config var của bạn ở đó.apps > leaflix > Settings. Within the Config Vars section, click the "Reveal Config Vars" button, and add your config var there.

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Bước cuối cùng là sửa đổi mã của ứng dụng của bạn để truy cập các biến này.

Kết nối ứng dụng của bạn với cụm Atlas MongoDB bằng cách sử dụng các giá trị heroku config var

Trong ứng dụng demo của chúng tôi, bạn sẽ thấy rằng chúng tôi đã mã hóa chuỗi kết nối cụm Atlas của chúng tôi. Chúng ta nên tái cấu trúc mã của mình để sử dụng biến cấu hình Heroku mà chúng ta đã tạo trước đó.

Biết được điều này và biết ứng dụng của chúng tôi được viết bằng nút, chúng tôi có thể truy cập cụm Atlas của mình thông qua thuộc tính process.env, được cung cấp cho chúng tôi trong Node.js. Trong tệp server.js, thay đổi hằng số URI thành này:process.env property, made available to us in Node.js. In the server.js file, change the uri constant to this:

Đó là nó! Vì chúng tôi đã thêm chuỗi kết nối cụm Atlas của chúng tôi dưới dạng cấu hình heroku, ứng dụng của chúng tôi sẽ có thể truy cập nó một cách an toàn sau khi nó được triển khai.

Lưu tệp đó, cam kết thay đổi đó, sau đó triển khai mã của bạn cho Heroku.

Ứng dụng của bạn hiện đã được triển khai! Bạn có thể kiểm tra lại xem ít nhất một phiên bản Leflix đang chạy bằng cách sử dụng lệnh này:

Nếu bạn thấy một tin nhắn cho biết Scaling dynos... done, now running web at 1:Free, bạn sẽ biết rằng ít nhất một trường hợp đang hoạt động.Scaling dynos... done, now running web at 1:Free, you'll know that at least one instance is up and running.

Cuối cùng, hãy truy cập ứng dụng của bạn. Bạn có thể làm như vậy với lệnh hữu ích này:

Nếu tất cả đều tốt, bạn sẽ thấy một cái gì đó như thế này:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Khi bạn nhấp vào "Cần một tiếng cười?" Nút, ứng dụng của chúng tôi sẽ chọn ngẫu nhiên một bộ phim có thể loại "Hài kịch" trong lĩnh vực thể loại của nó. Điều này xuất hiện trực tiếp từ cụm Atlas của chúng tôi và sử dụng bộ dữ liệu sample_mflix.sample_mflix dataset.

Định cấu hình địa chỉ IP Heroku trong Atlas MongoDB

Chúng tôi có cụm của chúng tôi lên và chạy và ứng dụng của chúng tôi được triển khai cho Heroku!

Để giúp chúng tôi thông qua hướng dẫn, ban đầu chúng tôi đã cấu hình cụm của mình để chấp nhận kết nối từ bất kỳ địa chỉ IP nào. Lý tưởng nhất là bạn muốn hạn chế quyền truy cập vào ứng dụng của bạn và có một vài cách để làm điều này trên Heroku.

Cách đầu tiên là sử dụng một tiện ích bổ sung để cung cấp địa chỉ IP bên ngoài tĩnh cho ứng dụng của bạn mà bạn có thể sử dụng để hạn chế quyền truy cập trong Atlas. Bạn có thể tìm thấy một số được liệt kê ở đây:

Một cách khác là sử dụng các không gian riêng của Heroku và sử dụng các IP bên ngoài tĩnh cho không gian của bạn. Đây là một tùy chọn đắt tiền hơn, nhưng không yêu cầu một tiện ích bổ sung riêng biệt.

Có một số tài liệu và bài viết cho thấy bạn có thể sử dụng phạm vi IP được xuất bản bởi AWS hoặc Heroku để cho phép truy cập vào IP có nguồn gốc từ khu vực AWS của bạn hoặc Heroku Dynos nằm ở các khu vực đó. Mặc dù điều này là có thể, nhưng nó không được khuyến khích vì những phạm vi đó có thể thay đổi theo thời gian. Thay vào đó, chúng tôi đề xuất một trong hai phương pháp ở trên.

Khi bạn có địa chỉ IP cho ứng dụng của mình, bạn có thể sử dụng chúng để định cấu hình tường lửa của bạn trong Atlas.

Đi đến cụm Atlas của bạn, xóa bất kỳ phạm vi IP hiện có nào, sau đó thêm chúng vào danh sách cho phép của bạn:

Hướng dẫn can heroku host mongodb? - heroku có thể lưu trữ mongodb không?

Tất nhiên, tại mọi thời điểm bạn sẽ giao tiếp giữa ứng dụng của bạn và cơ sở dữ liệu ATLAS của bạn một cách an toàn thông qua mã hóa TLS.

Sự kết luận

Chúng tôi đã hoàn thành khá nhiều trong một thời gian tương đối ngắn! Như một bản tóm tắt:

  • Chúng tôi thiết lập và triển khai một cụm Atlas trong năm bước hoặc ít hơn.

  • Chúng tôi đã tạo một biến cấu hình Heroku để lưu trữ an toàn chuỗi kết nối Atlas của chúng tôi, cho phép chúng tôi kết nối cụm Atlas của chúng tôi với ứng dụng Heroku của chúng tôi.

  • Chúng tôi đã học được rằng các biến cấu hình Heroku được tiếp xúc với mã ứng dụng của chúng tôi dưới dạng các biến môi trường.

  • Chúng tôi đã tái cấu trúc chuỗi URI được mã hóa cứng trong mã của chúng tôi để trỏ đến biến process.env.MONGODB_URI thay thế.process.env.MONGODB_URI variable instead.