Hướng dẫn cài đặt MongoDB trên Ubuntu 22.04 với 7 bước

Các nhà phát triển sử dụng MongoDB vì tính linh hoạt, khả năng mở rộng, hiệu suất và hệ sinh thái - những khả năng chính cần thiết để xây dựng và cung cấp sức mạnh cho các ứng dụng hiện đại. Trong một vài bước cấu hình, bạn có thể cài đặt MongoDB trên máy Ubuntu 22.04 LTS, bản phát hành hỗ trợ dài hạn mới nhất của bản phân phối Ubuntu Linux.
MongoDB
Hướng dẫn từng bước này sẽ bao gồm toàn bộ quá trình, từ cách cài đặt MongoDB trên Ubuntu 22.04 đến cách sử dụng nó, với các lệnh và ví dụ mã cần thiết. Chúng tôi sẽ tập trung vào việc cài đặt MongoDB Community Edition trên Ubuntu 22.04, có tên mã là Jammy JellyFish.

MongoDB là gì?


MongoDB là một cơ sở dữ liệu đa nền tảng, mã nguồn mở, được sử dụng rộng rãi để phát triển các ứng dụng có khả năng mở rộng, hiệu suất cao. Nó khác với cơ sở dữ liệu SQL truyền thống ở cách mô hình hóa và tổ chức dữ liệu.

Thay vì các mối quan hệ dạng bảng cứng nhắc, MongoDB được xây dựng trên mô hình dữ liệu hướng tài liệu, linh hoạt. Mỗi thực thể được lưu trữ dưới dạng tài liệu BSON – biểu diễn nhị phân của các cặp giá trị trường giống JSON. Tài liệu chứa cấu trúc phân cấp với mảng và tài liệu phụ, phản ánh dữ liệu phức tạp trong thế giới thực.

Mô hình tài liệu khai báo, lược đồ động và khả năng mở rộng quy mô gốc khiến MongoDB trở nên phổ biến để phát triển linh hoạt với ít hạn chế về dữ liệu hơn.

Mongodb dùng để làm gì?


MongoDB được sử dụng để xây dựng bất kỳ ứng dụng nào, chẳng hạn như ứng dụng web hoặc ứng dụng di động, có liên quan đến khối lượng lớn dữ liệu thay đổi nhanh chóng, bán cấu trúc hoặc không cấu trúc. Do cấu trúc dữ liệu linh hoạt, MongoDB là một lựa chọn hợp lý cho các nhà phát triển muốn nhanh chóng xây dựng các ứng dụng có thể mở rộng quy mô trong khi quản lý lượng lớn yêu cầu xử lý dữ liệu.

Bản phát hành ổn định hiện tại là MongoDB 7.0. Đây là bản phát hành chính được phát hành vào tháng 8 năm 2013 và được hỗ trợ bởi cả triển khai tại chỗ và MongoDB Atlas, một dịch vụ cơ sở dữ liệu nhiều đám mây.

MongoDB 7.0 có các cải tiến chính sau đây để nâng cao trải nghiệm của nhà phát triển.

Bảo mật nâng cao với Queryable Encryption giúp mã hóa dữ liệu từ phía máy khách và chạy các truy vấn biểu cảm trên dữ liệu ngẫu nhiên.

Các cải tiến về hiệu suất bao gồm lập chỉ mục ký tự đại diện phức hợp và chẩn đoán phân mảnh được cải thiện cho các cấp độ siêu dữ liệu, cụm, cơ sở dữ liệu và bộ sưu tập. Ngoài ra, việc làm việc với dữ liệu chuỗi thời gian và bộ dữ liệu lớn đã được sắp xếp hợp lý.

Di chuyển dữ liệu hiệu quả và mượt mà hơn nhờ đồng bộ hóa giữa các cụm mang lại sự linh hoạt hơn khi đồng bộ hóa dữ liệu trên các cụm cơ sở dữ liệu.

Trải nghiệm mượt mà hơn của nhà phát triển với việc triển khai các biến vai trò của người dùng, hỗ trợ cập nhật và xóa chi tiết trong các bộ sưu tập chuỗi thời gian, các trường thời gian làm mới bộ đệm được cải thiện, v.v.

Hãy xem ghi chú phát hành MongoDB 7.0 để có cái nhìn sâu hơn về các tính năng và cải tiến mới nhất với bản phát hành hiện tại của MongoDB.

Bước 1: Cài đặt MongoDB trên Ubuntu 22.04

Bước đầu tiên là cài đặt các gói tiên quyết cần thiết trong quá trình cài đặt. Để làm như vậy, hãy chạy lệnh sau.
root@mongodb-srv:~# sudo apt install software-properties-common gnupg apt-transport-https ca-certificates -y

Để cài đặt gói MongoDB mới nhất, bạn cần thêm kho lưu trữ (repository) gói MongoDB vào tệp danh sách nguồn của mình trên Ubuntu. Trước đó, bạn cần nhập khóa chung cho MongoDB trên hệ thống của mình bằng lệnh wget như sau:
root@mongodb-srv:~# curl -fsSL https://pgp.mongodb.com/server-7.0.asc |  sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

Tiếp theo, thêm kho lưu trữ APT MongoDB 7.0 vào thư mục /etc/apt/sources.list.d. Lệnh dưới thêm file mongodb-org-7.0.list vào thư mục /etc/apt/sources.list.d/. Tệp này chứa một dòng duy nhất có nội dung:
root@mongodb-srv:~# echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

Kiểm tra file mongodb-org-7.0.list


cập nhật kho lưu trữ (reposity) của Ubuntu biết về reposity của MongoDB mới đc thêm vào
root@mongodb-srv:~# apt update -y

Cài đặt gói mongodb-org 
root@mongodb-srv:~# apt install mongodb-org -y

Sau khi quá trình cài đặt hoàn tất, hãy xác minh phiên bản MongoDB đã cài đặt:
root@mongodb-srv:~# mongod --version

Bước 2: Chạy dịch vụ MongoDB

Dịch vụ MongoDB bị tắt khi cài đặt theo mặc định và bạn có thể xác định điều này bằng cách chạy bên dưới:
root@mongodb-srv:~# systemctl start mongod

Kiểm tra trạng thái dịch vụ của MongoDB
root@mongodb-srv:~# systemctl status mongod

Kích hoạt cho phép dịch vụ MongoDB tự chạy khi máy chủ start
root@mongodb-srv:~# systemctl enable mongod

Từ kết quả đầu ra ở trên, bạn có thể thấy MongoDB đang hoạt động.

Ngoài ra, bạn có thể xác nhận rằng cơ sở dữ liệu đang hoạt động bằng cách kiểm tra xem máy chủ có đang lắng nghe trên cổng mặc định là cổng 27017 hay không.
root@mongodb-srv:~# sudo ss -pnltu | grep 27017

Bước 3: Tạo cơ sở dữ liệu và người dùng MongoDB

Hiện tại, phiên bản MongoDB của bạn đã chạy và được định cấu hình để truy cập từ xa. Hãy chuyển số và khám phá cách tạo cơ sở dữ liệu và người dùng trong MongoDB.

Để truy cập MongoDB, hãy chạy lệnh:
root@mongodb-srv:~# mongosh

Trước khi chuyển sang shell MongoDB, bạn sẽ thấy một số chi tiết về MongoDB, như phiên bản của MongoDB và shell MongoDB cũng như URL cho tài liệu Mongosh.

Phía trên lời nhắc shell Mongo, bạn cũng sẽ thấy cảnh báo cho thấy rằng kiểm soát truy cập chưa được bật cho cơ sở dữ liệu và quyền truy cập đọc và ghi vào dữ liệu cũng như cấu hình bị hạn chế. Cảnh báo này được hiển thị vì xác thực chưa được bật - nó sẽ biến mất sau khi xác thực cơ sở dữ liệu được bật.



Theo mặc định, ba cơ sở dữ liệu được tạo khi cài đặt. Đây là admin, configlocal. Để liệt kê các cơ sở dữ liệu hiện có, hãy chạy lệnh:
test> show dbs


TẠO DATABASES
Để tạo cơ sở dữ liệu, hãy gọi lệnh use theo sau là tên cơ sở dữ liệu. Chẳng hạn, để tạo cơ sở dữ liệu có tên là employees, hãy chạy lệnh:

test> use employees

Để xác nhận cơ sở dữ liệu bạn hiện đang sử dụng, hãy chạy lệnh db. Trong trường hợp này, bạn sẽ thấy employees là đầu ra.
employees> db

QUẢN LÝ DATABASE

MongoDB cung cấp một số phương thức shell để quản lý cơ sở dữ liệu của bạn.

Tạo user 

Phương thức db.createUser cho phép bạn tạo người dùng mới trong cơ sở dữ liệu. Phương pháp này yêu cầu bạn xác định tên người dùng và mật khẩu của người dùng cũng như bất kỳ vai trò nào bạn muốn cấp cho người dùng. Thông tin này được trình bày ở định dạng JSON.

Đây là cú pháp tạo người dùng tên là Cherry với vai trò đọc và ghi trên cơ sở dữ liệu nhân viên.
employees> db.createUser(
...   {
...     user: "cherry",
...     pwd: "mat_khau_user",
...     roles: [ { role: "readWrite", db: "employees" } ]
...   }
... )


Liệt kê người dùng đã tạo

Bạn có thể liệt kê những người dùng được tạo bằng phương thức db.getUsers().
employees> db.getUsers();

Ngoài ra, hãy dùng lệnh
employees> show users

Xóa user

Để xóa người dùng, hãy sử dụng phương thức db.dropUser như được hiển thị.
employees> db.dropUser("cherry", {w: "majority", wtimeout: 4000})

Kiểm tra lại tài khoản, không còn tài khoản hiển thị

Bước 4: Bảo mật MongoDB trên Ubuntu

Xác thực không được bật theo mặc định trong MongoDB, nghĩa là bất kỳ người dùng nào có quyền truy cập vào máy chủ cơ sở dữ liệu đều có thể xem, thêm và xóa dữ liệu. Lỗ hổng này có thể gây ra sự vi phạm nghiêm trọng dữ liệu của bạn, đó là lý do tại sao việc bảo mật MongoDB lại quan trọng. Trong phần này, chúng tôi sẽ trình bày cách bạn có thể bảo mật MongoDB trên Ubuntu 22.04.

Truy cập Mongo Shell

Bước đầu tiên, bạn cần tạo người dùng quản trị và để làm như vậy, trước tiên hãy truy cập Mongo Shell.
root@mongodb-srv:~# mongosh

kết nối hoặc chuyển sang cơ sở dữ liệu quản trị.

test> use admin

tạo người dùng quản trị có tên là AdminCherry

Sau đó, tạo người dùng cơ sở dữ liệu bằng cách dán các dòng màu đỏ này và nhấn ENTER trên bàn phím.
admin> db.createUser(
  {
    user: "AdminCherry",
    pwd: passwordPrompt(),
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
 }
)
Enter password
*********{ ok: 1 }


Trong đó:
  • user: "AdminCherry" : tạo một người dùng quản trị có tên là AdminCherry.
  • pwd: passwordPrompt() : sẽ nhắc bạn nhập mật khẩu của người dùng quản trị. Đây là một giải pháp thay thế an toàn hơn cho trường pwd: yêu cầu bạn nhập mật khẩu ở dạng văn bản rõ ràng. hoặc có thể thay thế bằng pwd: "mat_khau_user"
  • roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] : dòng xác định các vai trò được cấp cho người dùng quản trị. Tại đây, người dùng Quản trị được cấp quyền đọc và ghi vào database admin. Vì vai trò này được xác định trong cơ sở dữ liệu quản trị viên nên người dùng quản trị có thể đọc và sửa đổi tất cả các cơ sở dữ liệu trong cụm.
Chạy lệnh exit hoặc nhấn CTRL + C để thoát khỏi Mongo Shell.

Kích hoạt xác thực: 

Với người dùng Quản trị viên AdminCherry đã có, bước tiếp theo là kích hoạt xác thực. Để thực hiện việc này, hãy thoát shell MongoDB và mở tệp mongod.conf.
root@mongodb-srv:~# vi /etc/mongod.conf

Tìm đến mục security, bỏ dấu comment (#) thêm authorization và đặt cho nó là enabled
security:
    authorization: enabled



Lưu ý rằng tham số authorization được thụt vào trong khi security không có khoảng trống ở đầu.

khởi động lại MongoDB

lưu các thay đổi và thoát khỏi tệp cấu hình. Để áp dụng các thay đổi, hãy khởi động lại MongoDB như được hiển thị.
root@mongodb-srv:~# systemctl restart mongod

Kiểm tra trạng thái
root@mongodb-srv:~# systemctl status mongod

Đăng nhập vào MongoDB Shell, lúc này không còn thấy cảnh báo như trên
root@mongodb-srv:~# mongosh

Tuy nhiên, nếu bạn cố gắng thực hiện bất kỳ tác vụ nào liên quan đến cơ sở dữ liệu, chẳng hạn như xem cơ sở dữ liệu, bạn sẽ nhận được một số kết quả gợi ý rằng cần phải xác thực.
test> show dbs

Để xác thực, trước tiên, hãy đăng xuất khỏi Mongo Shell bằng cách chạy lệnh exit.

Đăng nhập bằng người dùng quản trị như sau.
root@mongodb-srv:~# mongosh -u AdminCherry -p --authenticationDatabase admin

Từ đây trở đi, chỉ người dùng quản trị mới có thể xem, tạo và sửa đổi dữ liệu trong cơ sở dữ liệu.
Để thoát khỏi shell, hãy chạy lệnh exit.

Bước 5: Cấu hình MongoDB để truy cập từ xa

MongoDB được thiết lập mặc định để có thể truy cập cục bộ trên cùng một máy chủ được cài đặt và để cho phép truy cập từ xa, bạn phải chỉnh sửa tệp /etc/mongod.conf

Tệp này chứa các cài đặt cho vị trí lưu trữ cơ sở dữ liệu, ghi nhật ký, kết nối mạng và quản lý quy trình
root@mongodb-srv:~# vi /etc/mongod.conf

Xác định phần network interfaces và tìm dòng bindIP

Theo mặc định, MongoDB sử dụng địa chỉ 127.0.0.1 (giao diện địa chỉ loopback), ngụ ý rằng MongoDB chỉ có thể chấp nhận các kết nối từ cùng một máy chủ nơi nó được cài đặt.

Thêm dấu phẩy theo sau là địa chỉ IP (10.3.2.11) của máy chủ Mongo để cho phép truy cập từ xa.
bindIp: 127.0.0.1, 10.3.2.11



Lưu và thoát file cấu hình sau đó restart lại dịch vụ MongoDB
root@mongodb-srv:~# systemctl restart mongod

Nếu UFW (tường lửa của máy chủ) được bật, hãy chạy lệnh sau để cho phép các kết nối đến từ máy từ xa.
root@mongodb-srv:~# ufw allow 27017/tcp
hoặc
root@mongodb-srv:~# ufw allow from 10.3.2.11 to any port 27017

### reload lại UFW ###
root@mongodb-srv:~# ufw reload

Bước 6: Truy cập MongoDB từ xa

Có một số cách để truy cập shell MongoDB từ xa. Bạn có thể sử dụng tiện ích Netcat để bắt đầu kết nối TCP tới cổng 27017, cổng mặc định mà MongoDB lắng nghe.

Nếu nó vẫn cần được cài đặt trên máy khách, hãy cài đặt Netcat như sau.
root@ubuntu:~# apt install netcat -y

Tiếp theo, để thiết lập kết nối với máy chủ MongoDB qua cổng 27017, hãy chạy lệnh sau:
root@ubuntu:~# nc -zv 10.3.2.11 27017

Ngoài ra, bạn có thể đăng nhập bằng Mongo Shell như sau.
root@mongodb-srv:~# mongosh "mongodb://AdminCherry@10.3.2.11:27017"

LƯU Ý: để tính năng này hoạt động, hãy đảm bảo rằng phiên bản Mongo shell giống nhau trên cả máy khách và máy chủ MongoDB từ xa.

Bước 7: Cách sử dụng MongoDB - làm việc với cơ sở dữ liệu MongoDB

Có một số thao tác cơ sở dữ liệu mà bạn có thể thực hiện trong MongoDB. Ví dụ: bạn có thể tạo, truy xuất, cập nhật và xóa bản ghi khỏi cơ sở dữ liệu.

1. Inserting data

 Để tạo tài liệu trong bộ sưu tập, hãy sử dụng phương thức .insertOne() Phương thức này hỗ trợ một số loại dữ liệu, như chuỗi (string), số nguyên (integers), giá trị boolean và mảng (arrays).

Ở bước trước, chúng ta đã tạo một cơ sở dữ liệu thử nghiệm có tên là employees. Bây giờ, chúng ta sẽ tạo một bộ sưu tập và thêm một vài tài liệu - một bộ sưu tập chứa một hoặc nhiều tài liệu.

Vì vậy, một lần nữa, hãy đăng nhập vào máy chủ MongoDB bằng xác thực:
root@mongodb-srv:~# mongosh -u AdminCherry -p --authenticationDatabase admin

Chuyển sang cơ sở dữ liệu employees.
test> use employees

Chạy lệnh sau để tạo bộ sưu tập có tên là staff và thêm dữ liệu người dùng của nhân viên.
employees> db.staff.insertOne({ name: "Alice", age: 25, city: "London", married: true, hobbies: ["Travelling", "Swimming", "Cooking"] })

2. Truy xuất dữ liệu

Với một tài liệu đã được tạo trong bộ sưu tập staff, bạn có thể truy xuất nó và lọc kết quả bằng phương thức .find().
Ví dụ: để truy xuất tất cả tài liệu trong bộ sưu tập nhân viên, hãy chạy lệnh sau:
employees> db.staff.find()

Bây giờ, hãy thử thêm một vài tài liệu nữa và chạy một vài truy vấn trên bộ sưu tập.
employees> db.staff.insertOne({ name: "Bob", age: 29, city: "Liverpool", married: false, hobbies: ["Hiking", "Watching movies", "Driving"] })
 
employees> db.staff.insertOne({ name: "Winnie", age: 25, city: "Bristol", married: true, hobbies: ["Playing chess", "Surfing", "Painting"] })



Để truy vấn hồ sơ của nhân viên đã kết hôn, hãy chạy lệnh.
employees> db.staff.find({ married: true })

3. Cập nhật dữ liệu

Để cập nhật hoặc sửa đổi bản ghi, hãy sử dụng phương thức .update(). Trong ví dụ này, chúng tôi trình bày cách bạn có thể thay đổi giá trị tên của bản ghi thứ hai từ Bob thành Robert.
employees> db.staff.update({ name: "Bob" }, {$set: { name: "Robert" }})

Bây giờ bạn có thể truy vấn để xem liệu bạn có thể tìm thấy bản ghi khớp với tên Robert như sau không.
employees> db.staff.find({ name: "Robert" })

4. Xóa dữ liệu

Shell MongoDB cung cấp hai phương thức để xóa bản ghi: .deleteOne().deleteMany()
  • Phương thức .deleteOne() được sử dụng để xóa một bản ghi hoặc tài liệu khỏi bộ sưu tập. Ví dụ: để xóa bản ghi của Robert, hãy chạy truy vấn sau
  • Phương thức .deleteMany() xóa nhiều tài liệu khỏi một bộ sưu tập.
 
LƯU Ý Cách được khuyến nghị để xóa một bản ghi là sử dụng giá trị _id của bản ghi. Đây là giá trị duy nhất được cấp cho mỗi bản ghi và được ưu tiên hơn việc xác định các mục riêng lẻ như name:'Robert' , điều này sẽ dẫn đến việc xóa tất cả các bản ghi mang tên Robert.

 