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

Hướng dẫn cấu hình FerretDB trên VPS: Giải pháp thay thế MongoDB hoàn hảo bằng PostgreSQL

30 tháng 5, 2026

Giới thiệu về xu hướng thay thế MongoDB bằng FerretDB

Trong thế giới phát triển phần mềm hiện đại, MongoDB từ lâu đã khẳng định vị thế là một trong những hệ quản trị cơ sở dữ liệu NoSQL phổ biến nhất nhờ vào mô hình document linh hoạt và cú pháp truy vấn trực quan. Tuy nhiên, kể từ khi MongoDB thay đổi giấy phép 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ý cũng như chi phí vận hành tăng cao.

Chính trong bối cảnh đó, FerretDB 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ở (Apache 2.0) cho phép chuyển đổi các truy vấn giao thức dây (wire protocol) 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 tiếp cận này, doanh nghiệp có thể tận dụng toàn bộ sức mạnh, độ tin cậy và tính toàn vẹn dữ liệu của PostgreSQL backend, trong khi các lập trình viên vẫn phát triển ứng dụng bằng cú pháp, driver và các công cụ quen thuộc của MongoDB.

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

Việc triển khai FerretDB kết hợp với PostgreSQL trên một máy chủ ảo cá nhân (VPS) mang lại nhiều lợi ích chiến lược cho hạ tầng công nghệ của doanh nghiệp:

  • Tiết kiệm tài nguyên và chi phí: Thay vì phải vận hành đồng thời hai cụm cơ sở dữ liệu riêng biệt (SQL và NoSQL), bạn chỉ cần duy trì một hạ tầng PostgreSQL duy nhất nhưng vẫn phục vụ được cả hai nhu cầu lưu trữ dữ liệu dạng bảng và dạng document.
  • Tính an toàn dữ liệu vượt trội: PostgreSQL nổi tiếng với khả năng tuân thủ nghiêm ngặt chuẩn ACID, cơ chế sao lưu (backup) mạnh mẽ và cộng đồng hỗ trợ lâu đời. Dữ liệu NoSQL của bạn giờ đây sẽ thừa hưởng toàn bộ các đặc tính cao cấp này.
  • Giữ nguyên Codebase: Ứng dụng của bạn không cần phải thay đổi bất kỳ dòng code nào. Bạn chỉ cần thay đổi chuỗi kết nối (connection string) từ MongoDB URI sang FerretDB URI.
FerretDB hoạt động như một tầng dịch thuật (translation layer) thời gian thực, giúp xóa bỏ rào cản giữa thế giới SQL và NoSQL mà không làm giảm hiệu năng đáng kể của hệ thống.

Chuẩn bị môi trường hệ thống trên VPS

Để bắt đầu quá trình cấu hình, bạn cần chuẩn bị một VPS chạy hệ điều hành Ubuntu Server (khuyến nghị phiên bản 22.04 LTS hoặc 24.04 LTS) với quyền truy cập root hoặc tài khoản có quyền sudo. Ngoài ra, máy chủ của bạn cần cài đặt sẵn Docker và Docker Compose để quá trình triển khai diễn ra nhanh chóng và đồng bộ nhất.

Hãy chắc chắn rằng các cổng mạng (port) cần thiết như 5432 (PostgreSQL) và 27017 (FerretDB/MongoDB) chưa bị chiếm dụng bởi các dịch vụ khác trên VPS.

Hướng dẫn từng bước cấu hình FerretDB với Backend PostgreSQL

Bước 1: Khởi tạo cấu trúc thư mục dự án

Đầu tiên, hãy kết nối SSH vào VPS của bạn và tạo một thư mục chuyên biệt để lưu trữ các tệp cấu hình:

mkdir -p ~/ferretdb-stack
cd ~/ferretdb-stack

Bước 2: Tạo tệp cấu hình Docker Compose

Chúng ta sẽ sử dụng Docker Compose để khởi chạy đồng thời hai dịch vụ: PostgreSQL (làm kho lưu trữ) và FerretDB (làm proxy điều hướng). Hãy tạo tệp docker-compose.yml bằng trình soạn thảo văn bản nano:

nano docker-compose.yml

Sau đó, sao chép và dán nội dung cấu hình tiêu chuẩn dưới đây:

version: '3.8'

services:
  postgres:
    image: postgres:16-alpine
    container_name: postgres_backend
    environment:
      POSTGRES_USER: ferret_admin
      POSTGRES_PASSWORD: SecurePassword2026
      POSTGRES_DB: ferretdb
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - backend_network

  ferretdb:
    image: ghcr.io/ferretdb/ferretdb:latest
    container_name: ferretdb_proxy
    environment:
      FERRETDB_POSTGRESQL_URL: "postgres://ferret_admin:SecurePassword2026@postgres:5432/ferretdb?sslmode=disable"
      FERRETDB_LISTEN_ADDR: "0.0.0.0:27017"
    ports:
      - "27017:27017"
    depends_on:
      - postgres
    networks:
      - backend_network

volumes:
  pgdata:

networks:
  backend_network:
    driver: bridge

Lưu ý quan trọng: Hãy thay đổi giá trị SecurePassword2026 bằng một mật khẩu mạnh thực tế của bạn để đảm bảo an toàn bảo mật cho cơ sở dữ liệu.

Bước 3: Khởi động hệ thống FerretDB và PostgreSQL

Sau khi lưu tệp cấu hình, hãy tiến hành tải và khởi chạy các container bằng lệnh sau:

docker compose up -d

Bạn có thể kiểm tra trạng thái hoạt động của các dịch vụ bằng lệnh docker compose ps để đảm bảo cả hai container đều ở trạng thái Up.

Kiểm tra kết nối và giao tiếp bằng cú pháp MongoDB

Bây giờ, hệ thống FerretDB đã sẵn sàng tiếp nhận các kết nối. Để chứng minh khả năng tương thích hoàn hảo, chúng ta sẽ thực hiện kiểm tra kết nối bằng các công cụ chuẩn của MongoDB.

Sử dụng MongoDB Shell (mongosh)

Nếu bạn đã cài đặt mongosh trên máy cục bộ hoặc ngay trên VPS, bạn có thể kết nối tới FerretDB thông qua chuỗi kết nối tiêu chuẩn sau:

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

Sau khi đăng nhập thành công, hãy thử thực hiện các thao tác thêm mới và truy vấn dữ liệu chuẩn NoSQL:

// Tạo và chèn tài liệu vào collection
db.customers.insertOne({ name: "Công ty Công nghệ ABC", employees: 150, sector: "IT" });

// Truy vấn dữ liệu vừa chèn
db.customers.find({ sector: "IT" });

Mặc dù bạn đang gõ lệnh của MongoDB, nhưng ở hậu trường, FerretDB đã dịch lệnh này thành câu lệnh INSERT INTO và SELECT của SQL để lưu trữ cấu trúc JSON vào các bảng dữ liệu của PostgreSQL.

Những lưu ý quan trọng khi vận hành thực tế (Production)

Mặc dù FerretDB mang lại sự linh hoạt tuyệt vời, khi triển khai trên môi trường production cho doanh nghiệp, bạn cần lưu ý các yếu tố kỹ thuật sau:

  1. Bảo mật tường lửa (Firewall): Không nên mở công khai port 27017 ra môi trường internet trừ khi có cấu hình TLS/SSL bảo mật. Hãy sử dụng UFW trên Ubuntu để chỉ cho phép các IP của máy chủ ứng dụng kết nối tới.
  2. Giới hạn tính năng: Hiện tại, FerretDB hỗ trợ hầu hết các truy vấn cơ bản (CRUD) và các toán tử thông dụng. Tuy nhiên, một số tính năng nâng cao của MongoDB như Aggregation Pipeline complex hoặc Change Streams vẫn đang trong lộ trình hoàn thiện liên tục. Hãy kiểm tra kỹ tài liệu trang chủ của FerretDB đối với các hàm đặc thù.
  3. Tối ưu hóa PostgreSQL: Vì dữ liệu document được lưu trữ dưới dạng kiểu dữ liệu jsonb trong Postgres, bạn nên chủ động tạo các index trên PostgreSQL đối với các trường dữ liệu được truy vấn thường xuyên để duy trì hiệu năng cao khi dữ liệu phình to.

Kết luận

Cấu hình FerretDB trên VPS với PostgreSQL backend là một giải pháp kiến trúc đột phá, dung hòa hoàn hảo giữa sự linh hoạt độc đáo của NoSQL và tính bền vững vững chắc của hạ tầng SQL truyền thống. Đây là bước đi chiến lược giúp doanh nghiệp tối ưu hóa chi phí bản quyền, làm gọn nhẹ hạ tầng máy chủ mà vẫn giữ nguyên năng suất làm việc của đội ngũ lập trình viên MongoDB. Hãy áp dụng ngay giải pháp này cho dự án tiếp theo của bạn để trải nghiệm sự tự do trong việc quản trị dữ liệu.

Hướng dẫn cấu hình FerretDB trên VPS: Giải pháp thay thế MongoDB hoàn hảo bằng PostgreSQL | DPTCloud