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

Triển khai FerretDB trên VPS: Giải pháp thay thế MongoDB hoàn hảo bằng PostgreSQL Backend

29 tháng 5, 2026

Giới thiệu về FerretDB và Xu hướng Thay Thế MongoDB

Trong nhiều năm qua, MongoDB đã trở thành lựa chọn hàng đầu cho các nhà phát triển khi cần một cơ sở dữ liệu NoSQL linh hoạt, dễ mở rộng và có hiệu năng cao. Tuy nhiên, kể từ khi MongoDB thay đổi giấy phép mã nguồn mở sang Server Side Public License (SSPL), nhiều doanh nghiệp và nhà phát triển đã gặp phải những thách thức lớn về mặt pháp lý và chi phí bản quyền, đặc biệt là khi triển khai trên các nền tảng đám mây lớn.

Chính trong bối cảnh đó, FerretDB (tiền thân là MangoDB) đã xuất hiện như một giải pháp cứu cánh hoàn hảo. FerretDB là một proxy mã nguồn mở, cho phép chuyển đổi các câu lệnh và giao thức của MongoDB thành SQL để thực thi trực tiếp trên các hệ quản trị cơ sở dữ liệu quan hệ, tiêu biểu nhất là PostgreSQL. Với hướng đi này, doanh nghiệp có thể giữ nguyên toàn bộ mã nguồn ứng dụng đang chạy MongoDB nhưng lại tận dụng được sự ổn định, an toàn và tính năng ACID tuyệt vời của PostgreSQL backend.

Tại Sao Nên Chọn FerretDB Kết Hợp PostgreSQL Trên VPS?

Việc triển khai FerretDB trên máy chủ ảo cá nhân (VPS) mang lại nhiều lợi ích chiến lược cho các dự án phần mềm của doanh nghiệp:

  • Tiết kiệm chi phí tối đa: Thay vì phải trả chi phí bản quyền đắt đỏ cho MongoDB Atlas hoặc đối mặt với rủi ro pháp lý của SSPL, bạn có thể vận hành một hệ thống hoàn toàn open-source (Apache 2.0).
  • Tận dụng hạ tầng PostgreSQL có sẵn: Nếu doanh nghiệp của bạn đã có kinh nghiệm vận hành, sao lưu (backup) và tối ưu hóa PostgreSQL, bạn không cần phải học lại quy trình mới cho MongoDB.
  • Giữ nguyên trải nghiệm lập trình: Đội ngũ developer của bạn vẫn viết code bằng các thư viện, SDK và công cụ quen thuộc của MongoDB (như Mongoose, MongoDB Compass) mà không cần thay đổi một dòng lệnh nào.
  • Khả năng quản lý dữ liệu hợp nhất: Bạn có thể chạy cả dữ liệu quan hệ (Relational) và phi quan hệ (NoSQL) trên cùng một instance PostgreSQL, giúp đơn giản hóa kiến trúc hệ thống một cách đáng kể.

Kiến Trúc Hoạt Động Của Hệ Thống

Trước khi đi vào các bước cài đặt chi tiết, chúng ta cần hiểu rõ cách thức vận hành của mô hình này. FerretDB không tự lưu trữ dữ liệu. Thay vào đó, nó đóng vai trò là một lớp trung gian (Proxy Layer):

Ứng dụng của bạn (Node.js, Python, Go...) → Kết nối bằng Giao thức MongoDB wire → FerretDB → Chuyển dịch truy vấn thành SQL → PostgreSQL Backend.

Nhờ vào cơ chế này, ứng dụng hoàn toàn lầm tưởng rằng nó đang giao tiếp với một database MongoDB thực thụ, trong khi thực tế dữ liệu được tổ chức dưới dạng các bảng dữ liệu dạng JSONB bên trong PostgreSQL.

Hướng Dẫn Triển Khai Chi Tiết Trên VPS

Để đảm bảo tính tiện lợi và dễ quản lý, hướng dẫn này sẽ sử dụng Docker và Docker Compose để triển khai FerretDB và PostgreSQL trên một VPS chạy hệ điều hành Ubuntu.

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

Đầu tiên, hãy cập nhật hệ thống và cài đặt Docker cùng Docker Compose bằng các lệnh sau:

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à tạo file docker-compose.yml để định nghĩa các dịch vụ:

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

Sau đó, sao chép nội dung cấu hình dưới đây vào file:

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    container_name: postgres_backend
    environment:
      POSTGRES_USER: ferret_user
      POSTGRES_PASSWORD: SecurePassword123
      POSTGRES_DB: ferret_db
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - ferret-network

  ferretdb:
    image: ghcr.io/ferretdb/ferretdb:latest
    container_name: ferretdb_proxy
    environment:
      FERRETDB_POSTGRESQL_URL: "postgres://ferret_user:SecurePassword123@postgres:5432/ferret_db"
    ports:
      - "27017:27017"
    depends_on:
      - postgres
    networks:
      - ferret-network

volumes:
  pgdata:

networks:
  ferret-network:
    driver: bridge

Bước 3: Khởi động dịch vụ

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

sudo docker-compose up -d

Kiểm tra trạng thái hoạt động của các dịch vụ để đảm bảo cả PostgreSQL và FerretDB đều đã sẵn sàng:

sudo docker-compose ps

Lúc này, FerretDB đang lắng nghe tại cổng 27017 — cổng tiêu chuẩn của MongoDB.

Kiểm Tra Kết Nối Bằng Cú Pháp MongoDB

Để chứng minh hệ thống hoạt động hoàn hảo, bạn có thể dùng công cụ mongosh (MongoDB Shell) từ máy cá nhân hoặc ngay trên VPS để kết nối vào FerretDB:

mongosh "mongodb://127.0.0.1:27017/test_db"

Sau khi kết nối thành công, bạn hãy thử thực hiện các thao tác CRUD cơ bản của MongoDB:

// 1. Thêm mới dữ liệu
db.customers.insertOne({ name: "Doanh nghiep A", industry: "Tech", active: true });

// 2. Truy vấn dữ liệu
db.customers.find({ industry: "Tech" });

// 3. Cập nhật dữ liệu
db.customers.updateOne({ name: "Doanh nghiep A" }, { $set: { active: false } });

Mọi câu lệnh trên đều được thực thi mượt mà. Tuy nhiên, nếu bạn truy cập vào PostgreSQL container, bạn sẽ thấy một database tên là test_db với table customers chứa dữ liệu định dạng nhị phân JSONB.

Những Lưu Ý Quan Trọng Khi Sử Dụng Trong Môi Trường Production

Mặc dù FerretDB là một giải pháp đột phá, khi đưa vào môi trường vận hành thực tế cho doanh nghiệp (Production), bạn cần lưu ý các yếu tố sau:

  1. Mức độ tương thích tính năng: FerretDB hiện tại hỗ trợ hầu hết các câu lệnh CRUD, Indexing, và Aggregation Pipeline phổ biến. Tuy nhiên, một số tính năng nâng cao hoặc các toán tử quá chuyên biệt của MongoDB phiên bản mới có thể chưa được hỗ trợ đầy đủ. Bạn nên chạy thử nghiệm (Staging) kỹ lưỡng toàn bộ hệ thống test suite của ứng dụng trước khi chuyển đổi.
  2. Tối ưu hóa Hiệu năng (Performance): Vì phải đi qua một lớp dịch mã lệnh (SQL translation layer), hiệu năng truy vấn có thể có độ trễ nhỏ so với MongoDB thuần túy trong một số trường hợp phức tạp. Việc cấu hình đúng chỉ mục (Index) trên cú pháp MongoDB là cực kỳ quan trọng để PostgreSQL có thể tối ưu hóa phía dưới.
  3. Bảo mật hệ thống VPS: Luôn đảm bảo rằng cổng 27017 và 5432 không được mở công khai ra Internet (0.0.0.0) trừ khi có cấu hình tường lửa (UFW) kiểm soát IP nghiêm ngặt hoặc sử dụng mạng nội bộ VPN/VPC.

Kết luận

Triển khai FerretDB trên VPS kết hợp PostgreSQL backend là một chiến lược thông minh cho các doanh nghiệp muốn thoát khỏi sự ràng buộc về mặt giấy phép của MongoDB nhưng lại không muốn tốn chi phí và thời gian để tái cấu trúc lại toàn bộ mã nguồn ứng dụng. Đây là sự kết hợp hoàn hảo giữa tính linh hoạt của NoSQL và sự bền bỉ, an toàn mang tính di sản của PostgreSQL.

Triển khai FerretDB trên VPS: Giải pháp thay thế MongoDB hoàn hảo bằng PostgreSQL Backend | DPTCloud