Hướng dẫn network access mongodb

Cho phép truy cập từ xa với MongoDB – Remote access.

Hướng dẫn network access mongodb

Mặc định MongoDB không cho phép các kết nối từ bên ngoài. Tức là máy bạn cài MongoDB thì bạn chỉ có thể kết nối MongoDB từ máy của bạn. Máy khác không thể truy cập được MongoDB trên máy của bạn.

Để cho phép các kết nối từ xa tới MongoDB ta cần chỉnh lại tham số bindIp trong file mongo.cfg

Ví dụ máy mình là windows, cài mongodb bản 4.0 thì file mongo.cfg sẽ là:

C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg

Với hệ điều hành ubuntu thì file mongo.cfg mặc định nằm ở /etc/mongod.cfg

Mặc định giá trị bindIp ban đầu sẽ là 127.0.0.1 tức là chỉ cho phép kết nối nội bộ / localhost

...
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

Để cho phép các máy trên cùng mạng LAN truy cập vào MongoDB trên máy của bạn thì bạn thêm địa chỉ LAN IP vào bindIP

Ví dụ LAN IP của mình là: 192.168.0.15, sau khi thêm LAN IP vào bindIp thì các máy tính trong cùng mạng LAN có thể truy cập MongoDB trên máy mình qua địa chỉ 192.168.0.15

...
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1, 192.168.0.15

Tương tự nếu bạn có static ip, public ip thì đều có thể thêm vào bindIp để truy cập mongodb qua các ip đó.

Đặc biệt, thay vì thêm địa chỉ ip vào bindIp các bạn có thể để nó thành DNS 0.0.0.0 nó sẽ tự động map tất cả các IP của máy bạn (public IP, LAN IP, public IP…) vào bindIp và bạn có thể truy cập vào MongoDB bằng bất kỳ địa chỉ IP nào trong số đó.

...
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

Với trường hợp dùng domain để kết nối tới MongoDB thì bạn cần map domain đó tới IP của bạn và thêm IP đó vào bindIp hoặc cũng có thể khai báo chung cho tất cả bằng 0.0.0.0

Start MongoDB với tham số –bindIp

Ngoài cách cấu hình bindIP trong file mongod.cfg bạn cũng có thể chỉ rõ bindIp khi start MongoDB bằng lệnh mongod

Ví dụ:

mongod --bind_ip 127.0.0.1,192.168.0.15

Okay, Done!

References:

https://docs.mongodb.com/…/#net-options

Với những tín đồ của NoSQL thì MongoDB là một sự lựa chọn tuyệt vời, và trong thời đại mà ai ai cũng đòi đi đua đưa thì chẳng lý do gì mà chúng ta không thử get high đưa dữ liệu lên mây

Hướng dẫn network access mongodb

MongoDB Atlascloud database của MongoDB được ra mắt vào năm 2016 chạy trên AWS, Microsoft Azure và Google Cloud Platform.

Dữ liệu trong mỗi Cluster ở Atlas được lưu trữ theo cơ chế Replication, với 3 nodes: 1 master (primary) và 2 slaves (secondary)

1. Get Started

Để bắt đầu sử dụng Atlas các bạn hay truy cập vào đây và nhấn ngay nút Start Free nhé

Hướng dẫn network access mongodb

Cứ mạnh dạn mà đăng ký và yên tâm rằng với bản free thì Atlas sẽ không yêu cầu thẻ tín dụng để nhăm nhe trừ tiền mỗi khi bạn sơ suất như AWS đâu

Hướng dẫn network access mongodb

Ngay sau khi đăng ký thành công bạn có thể chọn lựa chọn dịch vụ, và coder nghèo như mình thì hiển nhiên chọn option free

Hướng dẫn network access mongodb

Hướng dẫn network access mongodb

Tiếp đến là lựa chọn nơi đặt database của bạn cũng như các option kèm theo. Người ta bảo của rẻ là của ôi nên nếu không muốn mất đồng nào thì bạn chỉ được xài 512MB Storage, Shared RAM, 100 max connections và Low network performance

Hướng dẫn network access mongodb

Hướng dẫn network access mongodb

Lựa chọn Create Cluster bạn sẽ được chuyển đến giao diện quản lý, điều mình thích ở Atlas là giao diện của nó cực kỳ thân thiện chứ không rối mắt như thằng AWS

Hướng dẫn network access mongodb

2. Database Access

Bấm vào Database Access bạn sẽ đi đến màn hình quản lý user. Tại đây bạn có thể tạo ra user với các quyền là: Admin, Read and Write, Only Read và bạn có thể tạo ra Custom Role như quyền write hoặc read một Database cụ thể.

Hướng dẫn network access mongodb

Có hai các để đăng nhập là sử dụng PasswordCertificate

3. Network Access

Click vào Network Access bạn sẽ đi đến màn hình quản lý Network.

Hướng dẫn network access mongodb

Tại đây bạn có thể quản lý những IP được phép connect đến Database của bạn. Bấm vào ADD IP ADDRESS để thực hiện thêm địa chỉ IP.

Nếu bạn muốn access tất cả các địa chỉ IP thì có thể click vào ALLOW ACCESS FROM ANYWHERE

Hướng dẫn network access mongodb

4. Connect

Click vào Clusters để quản lý các clusters của bạn. Tại đây sẽ có đầy đủ report về Cluster của bạn kể cả biểu đồ Read, Write, Connect,...

Hướng dẫn network access mongodb

Click vào Connect để lấy url connect cũng như đọc hướng dẫn.

Bạn có thể connect đến MongoAtlas bằng cách:

  • SSH qua MongoDB Shell
mongo "mongodb+srv:///"  --username 
  • Connect bằng code trên application của bạn hoặc MongoDB Compass
mongodb+srv://:@/?retryWrites=true&w=majority
  • Connect đến ứng dụng bên thứ 3 như Robo3T: với cách này bạn cần chọn connect đến ReplicaSet thay vì Direct

5. Triggers

Nếu bạn đã làm việc với SQL thì chắc hẳn đã nghe đến tính năng này. Nó là tính tăng chạy một số câu lệnh mỗi khi có sự thay đổi về mặt dữ liệu, có thể là before hoặc after (insert, update, delete).

Thực ra ban đầu MongoDB không có hỗ trợ cho Triggers, người ta phải lắng nghe một thứ gọi là Replica Set Oplog, khi bạn chạy MongoDB trong Replica Set, tất cả các hành động của MongoDB được ghi vào nhật ký hoạt động (được gọi là oplog).

Tuy nhiên từ phiên bản 3.6, MongoDB có một tính năng gọi là Change Streams hỗ trợ bạn stream các thay đổi. Tuy nhiên mình sẽ nói đến tính năng này trong một bài viết khác.

Ở bài viết này, mình sẽ nói về Triggers mà Atlas hỗ trợ. Nó được viết dựa trên Change Streams của MongoDB.

Click vào Triggers trên màn hình Altas của bạn để có thể quản lý các Triggers. Với MongoDB bạn có thể thực hiện Trigger với các Event: Insert, Update, Delete, Replace.

Có hai cách để thực hiện Trigger:

  • Function: là dạng một hàm được Trigger, tại đây bạn có thể thao tác với Database, gọi một function mà bạn define trong Mongo hoặc call API.
  • EventBridge: Bạn có thể connect đến AWS EventBridge để Trigger các serverless trên AWS Lambda.

Ở bài viết này mình sẽ nói chi tiết về function.

changeEvent:

Database Trigger sẽ được call với một changeEvent parameter.

exports = function(changeEvent) {
  // Access the _id of the changed document:
  const docId = changeEvent.documentKey._id;

  // Access the latest version of the changed document
  // (with Full Document enabled for Insert, Update, and Replace operations):
  const fullDocument = changeEvent.fullDocument;

  const updateDescription = changeEvent.updateDescription;

  // See which fields were changed (if any):
  if (updateDescription) {
    const updatedFields = updateDescription.updatedFields; // A document containing updated fields
  }

  // See which fields were removed (if any):
  if (updateDescription) {
    const removedFields = updateDescription.removedFields; // An array of removed fields
  }
}

Thao tác với MongoDB Data:

exports = function(changeEvent) {
  // Access a mongodb service:
  const collection = context.services.get().db("db_name").collection("coll_name");
  const doc = collection.findOne({ name: "mongodb" });
  // Note: In Atlas Triggers, the service name is defaulted to the cluster name.
}

Call function:

exports = function(changeEvent) {
  Call other named functions if they are defined in your application:
  const result = context.functions.execute("function_name", arg1, arg2);
}

Call http service:

exports = function(changeEvent) {
  // Access the default http client and execute a GET request:
  const response = context.http.get({ url:  })
}

Bạn có thể tìm hiểu thêm về context ở đây.

6. Kết luận

Bài viết trên mình đã hướng dẫn các bạn để có thể bắt đầu với MongoDB Atlas, chúng khá đơn giản nếu bạn đã làm quen với MongoDB. Hi vọng với bài viết này các bạn sẽ có thêm một lựa chọn trong tech stack của mình.

Hướng dẫn network access mongodb
Hướng dẫn network access mongodb