Quay lại danh sách
Tin tức công nghệ

Triển khai FerretDB trên VPS: Giải pháp MongoDB bằng PostgreSQL mã nguồn mở hoàn toàn

27 tháng 5, 2026

Giới thiệu về FerretDB và bài toán bản quyền của MongoDB

Trong nhiều năm qua, MongoDB đã trở thành một trong những cơ sở dữ liệu NoSQL phổ biến nhất thế giới nhờ vào cú pháp truy vấn linh hoạt, dễ sử dụng và khả năng mở rộng tốt. Tuy nhiên, bước ngoặt xảy ra vào năm 2018 khi MongoDB chuyển từ giấy phép mã nguồn mở GNU AGPL sang Server Side Public License (SSPL). Sự thay đổi này khiến MongoDB không còn được coi là mã nguồn mở thực sự theo định nghĩa của Open Source Initiative (OSI), gây ra nhiều rủi ro về pháp lý và chi phí cho các doanh nghiệp, đặc biệt là các đơn vị cung cấp dịch vụ đám mây (Cloud Providers).

Đối với các kiến trúc sư phần mềm và nhà quản lý công nghệ, câu hỏi đặt ra là: Làm thế nào để vừa giữ được trải nghiệm lập trình mượt mà của MongoDB, vừa đảm bảo hệ thống sử dụng 100% mã nguồn mở để tối ưu hóa chi phí và tính tuân thủ? Câu trả lời chính là FerretDB.

FerretDB là một giải pháp thay thế mã nguồn mở hoàn toàn cho MongoDB, hoạt động như một lớp dịch chuyển (proxy) chuyển đổi các lệnh truy vấn MongoDB thành câu lệnh SQL để lưu trữ trực tiếp trên PostgreSQL.

Tại sao nên kết hợp FerretDB và PostgreSQL trên VPS?

Việc triển khai FerretDB trên một máy chủ ảo riêng (VPS) mang lại nhiều lợi ích chiến lược cho hạ tầng dữ liệu của doanh nghiệp:

  • Mã nguồn mở hoàn toàn (Apache 2.0): Triển khai FerretDB giúp doanh nghiệp loại bỏ hoàn toàn rủi ro vi phạm bản quyền SSPL của MongoDB.
  • Tận dụng sức mạnh của PostgreSQL: PostgreSQL là hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) mạnh mẽ, tin cậy và có tính toàn vẹn dữ liệu cực cao. FerretDB biến các tài liệu JSON thành định dạng jsonb của PostgreSQL, giúp tối ưu hóa hiệu năng tìm kiếm.
  • Không cần chỉnh sửa mã nguồn ứng dụng: Do FerretDB tương thích ngược với các driver của MongoDB, ứng dụng hiện tại của bạn (Node.js, Python, Go...) có thể kết nối thẳng vào FerretDB mà không cần thay đổi một dòng code truy vấn nào.
  • Tiết kiệm chi phí VPS: Thay vì phải vận hành cả hai hệ thống SQL và NoSQL riêng biệt, bạn có thể hợp nhất chúng trên cùng một hạ tầng PostgreSQL thông qua VPS.

Hướng dẫn chi tiết triển khai FerretDB trên VPS Linux

Để tối ưu hóa quá trình cài đặt và quản lý, chúng ta sẽ sử dụng Docker và Docker Compose trên môi trường VPS Ubuntu 22.04 trở lên. Phương pháp này giúp cô lập môi trường và dễ dàng nâng cấp sau này.

Bước 1: Chuẩn bị môi trường VPS

Trước tiên, bạn cần kết nối SSH vào VPS và cập nhật hệ thống, sau đó tiến hành cài đặt Docker:

sudo apt update && sudo apt upgrade -y
sudo apt install docker.io docker-compose -y
sudo systemctl enable --now docker

Bước 2: Cấu hình File Docker Compose

Tạo một thư mục dự án mới và khởi tạo file docker-compose.yml để thiết lập mối quan hệ giữa FerretDB và PostgreSQL:

mkdir ferretdb-vps && cd ferretdb-vps
nano docker-compose.yml

Sao chép cấu hình chuẩn dưới đây vào file:

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    container_name: ferretdb-postgres
    environment:
      POSTGRES_USER: username_vps
      POSTGRES_PASSWORD: password_bao_mat
      POSTGRES_DB: ferretdb_data
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  ferretdb:
    image: ghcr.io/ferretdb/ferretdb:latest
    container_name: ferretdb-server
    restart: always
    environment:
      FERRETDB_POSTGRESQL_URL: "postgres://username_vps:password_bao_mat@postgres:5432/ferretdb_data"
    ports:
      - "27017:27017"
    depends_on:
      - postgres

volumes:
  pgdata:

Bước 3: Khởi chạy dịch vụ

Kích hoạt các container chạy ngầm bằng lệnh sau:

sudo docker-compose up -d

Kiểm tra trạng thái hoạt động của hệ thống để đảm bảo FerretDB đã lắng nghe ở cổng tiêu chuẩn 27017:

sudo docker ps

Kiểm tra kết nối và độ tương thích

Bây giờ, FerretDB của bạn đã sẵn sàng tiếp nhận các kết nối theo giao thức của MongoDB. Bạn có thể sử dụng công cụ Mongosh (MongoDB Shell) ngay trên máy cục bộ hoặc trên VPS để kiểm tra:

mongosh "mongodb://127.0.0.1:27017/"

Thử thực hiện các thao tác CRUD cơ bản để chứng minh tính tương thích:

// Chèn dữ liệu
db.customers.insertOne({ name: "Doanh Nghiệp A", ngành: "Công nghệ", active: true });

// Truy vấn dữ liệu
db.customers.find({ active: true });

Mặc dù câu lệnh bạn gõ là cú pháp NoSQL của MongoDB, nhưng thực tế dữ liệu đang được lưu trữ dưới dạng bảng quan hệ với cột jsonb bên trong cơ sở dữ liệu PostgreSQL của bạn.

Những lưu ý quan trọng khi vận hành FerretDB trong sản xuất (Production)

Mặc dù FerretDB là một giải pháp đột phá, khi triển khai cho các dự án lớn của doanh nghiệp trên VPS, bạn cần lưu ý các yếu tố sau:

  1. Bảo mật cổng kết nối: Không nên mở công khai cổng 27017 và 5432 ra ngoài Internet trừ khi có cấu hình Firewall (UFW) hoặc sử dụng VPN/VPC nội bộ để giới hạn IP truy cập.
  2. Độ phủ tính năng (Feature Parity): FerretDB hiện tại hỗ trợ hầu hết các lệnh CRUD và Aggregation Pipelines phổ biến. Tuy nhiên, một số tính năng nâng cao cấu hình sâu của MongoDB chưa được hỗ trợ 100%. Hãy kiểm tra kỹ tài liệu của FerretDB trước khi chuyển đổi hệ thống lớn.
  3. Chiến lược Backup: Vì dữ liệu gốc nằm ở PostgreSQL, bạn chỉ cần thực hiện backup định kỳ container Postgres bằng công cụ pg_dump truyền thống, điều này giúp đơn giản hóa quy trình vận hành (DevOps) rất nhiều.

Kết luận

Triển khai FerretDB trên VPS kết hợp với hạ tầng PostgreSQL mang lại một giải pháp trung hòa hoàn hảo: Giữ nguyên hiệu suất làm việc cao của lập trình viên với cú pháp MongoDB, đồng thời đảm bảo tính an toàn, bền vững và tuân thủ mã nguồn mở của PostgreSQL. Đây chắc chắn là xu hướng kiến trúc hạ tầng đáng cân nhắc cho các startup và doanh nghiệp vừa và nhỏ trong kỷ nguyên tối ưu hóa chi phí hiện nay.