
Hướng dẫn Directus CMS: Headless CMS ưu tiên cơ sở dữ liệu dành cho lập trình viên
Hầu hết các headless CMS đều muốn bạn xây dựng mô hình dữ liệu bên trong hệ thống của họ. Directus thì ngược lại, nó bao bọc (wrap) cơ sở dữ liệu SQL hiện có của bạn và cung cấp ngay lập tức các API REST và GraphQL mà không cần chạm vào schema của bạn. Với ~34,5k sao trên GitHub và được các công ty như Tripadvisor, Adobe và Mercedes-Benz tin dùng, đây là một trong những lựa chọn mã nguồn mở mạnh mẽ nhất trong số các headless CMS tốt nhất năm 2026.
| Thuộc tính | Chi tiết |
|---|---|
| Loại | Headless CMS mã nguồn mở |
| Kiến trúc | Ưu tiên cơ sở dữ liệu (bao bọc các cơ sở dữ liệu SQL hiện có) |
| Cơ sở dữ liệu | PostgreSQL, MySQL, MariaDB, SQLite, OracleDB, CockroachDB, MS-SQL |
| API | REST + GraphQL (đồng thời) |
| Tự lưu trữ (Self-Hosted) | Miễn phí dưới 5 triệu USD doanh thu (giấy phép MIT) |
| Cloud | Từ 25 USD/tháng |
| Tính năng AI | Máy chủ MCP, Trợ lý AI (đa nhà cung cấp) |
| Chỉnh sửa cộng tác | Tích hợp sẵn từ v11.15 |
| Phù hợp nhất cho | Các đội ngũ đã có sẵn cơ sở dữ liệu, các dự án ưu tiên API |
| Không lý tưởng cho | Xây dựng trang trực quan, NoSQL, blog đơn giản |
| GitHub | ~34,5k sao |
| Phiên bản mới nhất | v11.16 (tháng 4 năm 2026) |
Directus CMS là gì?
Directus là một headless CMS mã nguồn mở, bao bọc bất kỳ cơ sở dữ liệu SQL hiện có nào bằng các API REST và GraphQL tức thì. Khác với Strapi hay Payload, Directus không tự tạo schema cơ sở dữ liệu riêng mà phản chiếu chính schema của bạn. Nó hỗ trợ 7 loại cơ sở dữ liệu bao gồm PostgreSQL, MySQL, MariaDB, SQLite, OracleDB, CockroachDB và MS-SQL, đồng thời miễn phí cho các tổ chức có doanh thu dưới 5 triệu đô la theo tài liệu chính thức của Directus.
Hãy coi nó như một lớp thông minh nằm trên cơ sở dữ liệu của bạn. Bạn mang đến một cơ sở dữ liệu PostgreSQL hiện có với 50 bảng, trỏ Directus vào đó, và chỉ trong vài phút bạn đã có một giao diện quản trị đầy đủ, hệ thống kiểm soát truy cập dựa trên vai trò, cùng cả endpoint REST lẫn GraphQL. Không cần script migration. Không cần tái cấu trúc dữ liệu.
Đây chính là ý nghĩa thực sự của "database-first" trong thực tế, và nó khác biệt căn bản so với cách tiếp cận code-first mà Strapi sử dụng (nơi bạn định nghĩa các kiểu nội dung để sinh ra các bảng cơ sở dữ liệu) hay cách tiếp cận nhúng trong framework của Payload CMS (nơi CMS nằm ngay bên trong ứng dụng Next.js của bạn).
Giải thích kiến trúc Database-First
Khi lần đầu kết nối Directus với cơ sở dữ liệu PostgreSQL có sẵn cho một dự án của khách hàng, điều khiến chúng tôi ngạc nhiên là cần rất ít bước thiết lập. Directus tự động phân tích lược đồ cơ sở dữ liệu của bạn — các bảng trở thành "collection", các cột trở thành "field" — và xây dựng giao diện quản trị từ những gì đã có sẵn.
Điều này có nghĩa là dữ liệu của bạn không bao giờ bị khóa vào một định dạng độc quyền. Nếu ngày mai bạn quyết định ngừng dùng Directus, cơ sở dữ liệu của bạn vẫn là một cơ sở dữ liệu SQL tiêu chuẩn. Hãy thử làm điều đó với Contentful hay Sanity, nơi nội dung của bạn được lưu trên máy chủ của họ và theo định dạng của họ.
Directus cũng không chỉ là một CMS. Đội ngũ phát triển định vị nó như một nền tảng dữ liệu có thể lắp ghép — mọi người sử dụng nó cho BaaS (Backend as a Service), các bảng quản trị nội bộ và các dashboard tùy chỉnh. Trường hợp sử dụng CMS là phổ biến nhất, nhưng kiến trúc này còn hỗ trợ nhiều hơn thế.
Các tính năng chính của Directus
Directus cung cấp API REST và GraphQL kép, quyền hạn chi tiết dựa trên vai trò, tự động hóa Flows tích hợp sẵn, Data Studio kéo và thả, quản lý tài sản số và hỗ trợ i18n bản địa cho hơn 50 ngôn ngữ. Kể từ phiên bản v11.15, Directus bao gồm tính năng chỉnh sửa cộng tác và Trợ lý AI như những tính năng bản địa, chứ không phải plugin của bên thứ ba.
Dưới đây là những điều quan trọng nhất nếu bạn đang đánh giá Directus cho một dự án:
API REST và GraphQL song song
Cả hai API đều khả dụng đồng thời từ cùng một nguồn dữ liệu, không cần bất kỳ cấu hình nào. Bạn không phải chọn cái này hay cái kia, bạn có được cả hai. Nhóm phát triển di động của bạn có thể dùng REST trong khi frontend web của bạn dùng GraphQL. API REST tuân theo một mẫu dễ dự đoán (/items/{collection}) và endpoint GraphQL nằm tại /graphql.
Flows và Tự động hóa
Flows là hệ thống tự động hóa theo sự kiện của Directus, được tích hợp trực tiếp vào giao diện Data Studio. Bạn có thể kích hoạt quy trình làm việc dựa trên các sự kiện CRUD (mục được tạo, cập nhật, xóa), lịch trình (kiểu cron) hoặc webhook. Các thao tác bao gồm gửi email, thực hiện yêu cầu HTTP, chạy JavaScript tùy chỉnh và chuyển đổi dữ liệu.
Đối với các nhóm đang xây dựng với AI, Directus thậm chí còn có một máy chủ hướng dẫn Model Context Protocol (MCP) tích hợp sẵn, nhưng chúng ta sẽ bàn thêm về điều đó trong phần v11.
Tiện ích mở rộng và Tùy biến
Hệ thống tiện ích mở rộng hỗ trợ các hook (trình xử lý sự kiện phía máy chủ), endpoint tùy chỉnh, bảng điều khiển UI, mô-đun hoàn chỉnh và các nút thao tác cho Flows. Tiện ích mở rộng được xây dựng bằng Vue.js cho frontend và Node.js thuần cho backend. Phiên bản v11.0 đã tái cấu trúc các tiện ích mở rộng từ các thư mục dựa trên kiểu sang định dạng đóng gói gọn gàng hơn.
Dưới đây là cách Directus so sánh với các đối thủ về tính năng:
| Tính năng | Directus | Strapi | Payload | Sanity |
|---|---|---|---|---|
| Hỗ trợ cơ sở dữ liệu | 7 cơ sở dữ liệu SQL | PostgreSQL, SQLite | MongoDB, PostgreSQL | Được lưu trữ (độc quyền) |
| Loại API | REST + GraphQL | REST (plugin GraphQL) | API cục bộ + REST + GraphQL | GROQ + GraphQL |
| Tự lưu trữ | Có (miễn phí dưới 5 triệu USD) | Có (miễn phí) | Có (miễn phí) | Không |
| Trình dựng trực quan | Data Studio (tập trung vào dữ liệu) | Content-Type Builder | Live Preview | Sanity Studio |
| i18n | Gốc (hơn 50 ngôn ngữ) | Dựa trên plugin | Cấp trường | Cấp tài liệu |
| Tự động hóa | Flows (tích hợp sẵn) | Hook vòng đời | Hook + Job | Webhook hỗ trợ GROQ |
| Mô hình định giá | Dựa trên doanh thu (ngưỡng 5 triệu USD) | Dựa trên số người dùng | Miễn phí + Cloud | Dựa trên mức sử dụng |
Có gì mới trong Directus v11 (2025-2026)
Directus v11 đã giới thiệu hỗ trợ máy chủ MCP nguyên bản (v11.13), Trợ lý AI hỗ trợ OpenAI, Anthropic và Gemini (v11.14), chỉnh sửa cộng tác với chỉ báo hiện diện trực tiếp (v11.15), và phiên bản dự thảo toàn cục với quyền triển khai dựa trên vai trò (v11.16). Đây đều là các tính năng tích hợp sẵn, không phải tiện ích mở rộng từ cộng đồng.
Đây là lĩnh vực mà Directus đang phát triển nhanh nhất, và cũng là phần mà hầu hết các đối thủ cạnh tranh hoàn toàn bỏ qua. Chỉ có một trong sáu bài hướng dẫn xếp hạng cao nhất đề cập đến bất kỳ nội dung nào trong số này.
Máy chủ MCP và Trợ lý AI
Bản phát hành v11.13 đã đưa Directus trở thành một trong những CMS đầu tiên có máy chủ MCP tích hợp sẵn. Nếu bạn đang sử dụng Claude, ChatGPT hoặc bất kỳ công cụ AI tương thích MCP nào, nó có thể quản lý nội dung Directus của bạn trực tiếp — đọc các bộ sưu tập, tạo mục mới, cập nhật trường — tất cả đều tuân thủ quyền RBAC của bạn. Nếu bạn mới làm quen với MCP, hướng dẫn Giao thức Ngữ cảnh Mô hình (MCP) của chúng tôi sẽ giải thích chi tiết về giao thức này.
Trợ lý AI (v11.14) tách biệt với MCP — đây là giao diện trò chuyện được tích hợp bên trong Data Studio, hỗ trợ OpenAI, Anthropic, Gemini và cả các mô hình cục bộ thông qua Ollama. Đến v11.16, nó đã trở nên đa phương thức: bạn có thể tải hình ảnh và PDF trực tiếp vào cuộc trò chuyện AI để xử lý.
Chỉnh sửa cộng tác và phiên bản nháp
Tính năng chỉnh sửa cộng tác được phát hành trong v11.15 với các chỉ báo hiện diện trực tiếp (bạn có thể thấy ai khác đang chỉnh sửa cùng một mục) và khóa ở cấp độ trường để ngăn xung đột. Cùng bản phát hành đó đã bổ sung mô-đun triển khai Vercel với quyền triển khai dựa trên vai trò.
v11.16 đã đưa việc dàn dựng nội dung đi xa hơn với các phiên bản nháp toàn cục. Mọi mục được quản lý phiên bản đều tự động có một bản sao nháp. Người biên tập có thể xem trước các thay đổi so với phiên bản đang hoạt động và đẩy bản nháp lên khi sẵn sàng. Quyền triển khai dựa trên vai trò giúp nhóm nội dung của bạn có thể dàn dựng các thay đổi mà không vô tình đẩy lên môi trường production.
| Phiên bản | Ngày | Tính năng chính |
|---|---|---|
| v11.0 | 2024 | Hệ thống tiện ích mở rộng mới, định dạng đóng gói |
| v11.13 | Tháng 11/2025 | Hỗ trợ máy chủ MCP native |
| v11.14 | Tháng 12/2025 | Trợ lý AI (đa nhà cung cấp), giao diện header |
| v11.15 | Tháng 2/2026 | Chỉnh sửa cộng tác GA, Trợ lý AI GA, triển khai Vercel |
| v11.16 | Tháng 4/2026 | Phiên bản nháp toàn cục, AI đa phương thức, triển khai dựa trên vai trò |
Bắt đầu với Directus (Thiết lập Docker)
Bạn có thể chạy Directus trên máy cục bộ với Docker trong chưa đầy 2 phút. Hãy tạo một tệp docker-compose.yml với image directus/directus, đặt kết nối cơ sở dữ liệu và thông tin đăng nhập quản trị dưới dạng các biến môi trường, sau đó chạy docker compose up. Directus sẽ khởi động tại localhost:8055.
Thiết lập Docker chỉ mất chưa đầy 2 phút từ trạng thái khởi động nguội. Dưới đây là tệp docker-compose.yml hoàn chỉnh có kèm theo PostgreSQL, không chỉ riêng container Directus mà là toàn bộ stack:
# docker-compose.yml
version: "3"
services:
database:
image: postgis/postgis:16-3.4-alpine
environment:
POSTGRES_USER: directus
POSTGRES_PASSWORD: directus
POSTGRES_DB: directus
volumes:
- directus_data:/var/lib/postgresql/data
directus:
image: directus/directus:11.16
ports:
- "8055:8055"
depends_on:
- database
environment:
KEY: "your-random-key-here"
SECRET: "your-random-secret-here"
ADMIN_EMAIL: "[email protected]"
ADMIN_PASSWORD: "change-me-please"
DB_CLIENT: "pg"
DB_HOST: "database"
DB_PORT: "5432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD: "directus"
volumes:
- directus_uploads:/directus/uploads
volumes:
directus_data:
directus_uploads:Run it:
docker compose up -dMở http://localhost:8055, đăng nhập bằng thông tin quản trị mà bạn đã đặt, vậy là bạn đã vào được Data Studio. Từ đây bạn có thể tạo các collection (bảng), định nghĩa các field (cột) và bắt đầu quản lý nội dung ngay lập tức. Các biến môi trường KEY và SECRET được dùng để tạo token JWT, hãy sử dụng các chuỗi ngẫu nhiên trong môi trường production, đừng dùng các giá trị giữ chỗ như trên.
Truy vấn dữ liệu với Directus SDK
Directus JavaScript SDK cung cấp khả năng truy cập dữ liệu an toàn về mặt kiểu (type-safe) thông qua cả REST và GraphQL. Cài đặt @directus/sdk, tạo một client bằng createDirectus(), và sử dụng readItems() để truy xuất các collection với khả năng lọc, sắp xếp và chọn trường được tích hợp sẵn.
Mẫu thiết kế có thể kết hợp (composable pattern) của SDK mang lại cảm giác trực quan sau khi làm việc với các thư viện như client của Supabase. Bạn bắt đầu với một client cơ sở và thêm các khả năng bằng cách kết hợp các hàm:
// lib/directus.ts
import { createDirectus, rest, readItems, createItem } from '@directus/sdk';
const client = createDirectus('http://localhost:8055').with(rest());
// Fetch published articles with specific fields
const articles = await client.request(
readItems('articles', {
fields: ['id', 'title', 'slug', 'content', 'author.name'],
filter: {
status: { _eq: 'published' }
},
sort: ['-date_published'],
limit: 10
})
);Việc tạo các item cũng tuân theo cùng một mẫu:
// Create a new article
const newArticle = await client.request(
createItem('articles', {
title: 'My New Post',
slug: 'my-new-post',
content: '<p>Hello from Directus.</p>',
status: 'draft'
})
);Đối với xác thực, bạn chọn giữa staticToken() (dành cho giao tiếp giữa các máy chủ) và authentication() (dành cho các ứng dụng hướng đến người dùng có luồng đăng nhập):
import { createDirectus, rest, staticToken } from '@directus/sdk';
// Server-side with static token
const client = createDirectus('http://localhost:8055')
.with(staticToken('your-api-token'))
.with(rest());Ví dụ về REST API
Mọi phương thức SDK đều có một REST endpoint tương đương. Nếu bạn thích làm việc trực tiếp với curl hoặc fetch:
# Tìm nạp các bài viết đã xuất bản
curl "http://localhost:8055/items/articles?filter[status][_eq]=published&sort=-date_published&limit=10&fields=id,title,slug"
# Tạo một mục mới
curl -X POST "http://localhost:8055/items/articles" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "My Post", "status": "draft"}'Truy vấn GraphQL
Cùng dữ liệu đó cũng có sẵn qua GraphQL tại /graphql:
query {
articles(
filter: { status: { _eq: "published" } }
sort: ["-date_published"]
limit: 10
) {
id
title
slug
content
author {
name
}
}
}Bạn không cần cấu hình hay bật GraphQL riêng, nó luôn khả dụng song song với REST.
Directus với Next.js (Tích hợp Framework)
Kết nối Directus với Next.js chỉ cần ba bước: cài đặt @directus/sdk, tạo client tại lib/directus.ts, và lấy dữ liệu trong Server Components bằng readItems(). Directus trả về JSON thô, nên bạn hoàn toàn kiểm soát việc kết xuất mà không phụ thuộc vào component riêng của nhà cung cấp.
Đây là phần gọn gàng nhất khi làm việc với Directus. Không có adapter framework đặc biệt nào, không có component React dành riêng cho Directus, không có plugin build. Chỉ đơn thuần là lấy dữ liệu. Nếu bạn từng làm việc với bất kỳ REST API nào trong Next.js, bạn đã biết cách hoạt động rồi. Để có thêm bối cảnh về việc chọn framework, hãy xem bài so sánh Next.js và Remix của chúng tôi.
Trước tiên, hãy tạo client dùng chung (đây chính là file từ phần SDK, nhưng được cấu hình cho instance đã triển khai của bạn):
// lib/directus.ts
import { createDirectus, rest, staticToken, readItems } from '@directus/sdk';
const directus = createDirectus(process.env.DIRECTUS_URL!)
.with(staticToken(process.env.DIRECTUS_TOKEN!))
.with(rest());
export default directus;
export { readItems };Sau đó sử dụng nó trong Server Component, không cần useEffect, không cần trạng thái loading, chỉ cần async/await:
// app/blog/page.tsx
import directus, { readItems } from '@/lib/directus';
export default async function BlogPage() {
const posts = await directus.request(
readItems('posts', {
fields: ['id', 'title', 'slug', 'excerpt', 'date_published'],
filter: { status: { _eq: 'published' } },
sort: ['-date_published'],
})
);
return (
<main>
<h1>Blog</h1>
{posts.map((post) => (
<article key={post.id}>
<h2><a href={`/blog/${post.slug}`}>{post.title}</a></h2>
<p>{post.excerpt}</p>
<time>{post.date_published}</time>
</article>
))}
</main>
);
}Chỉ vậy thôi. Không bị khóa vào nhà cung cấp. Cách tiếp cận tương tự hoạt động với Astro, Nuxt, SvelteKit, hoặc bất kỳ framework nào có thể thực hiện HTTP request. Tài liệu chính thức của Directus có các hướng dẫn riêng cho Astro và Nuxt nếu bạn cần, nhưng pattern hoàn toàn giống nhau: tạo client, gọi readItems(), kết xuất.
Giá cả và Cấp phép Directus CMS (2026)
Directus miễn phí khi tự lưu trữ theo giấy phép MIT đối với các tổ chức có doanh thu hoặc nguồn vốn hàng năm dưới 5 triệu đô la. Trên 5 triệu đô la, cần có giấy phép thương mại để sử dụng trong môi trường production. Directus Cloud có giá khởi điểm từ 25 đô la/tháng (gói Starter), với các gói Professional từ 49 đến 499 đô la/tháng, theo trang giá của họ.
Ngưỡng doanh thu 5 triệu USD
Đây là sự thật kinh doanh quan trọng nhất về Directus, và hầu hết các bài hướng dẫn đều giấu nhẹm hoặc bỏ qua hoàn toàn. Nó hoạt động như sau:
- Doanh thu hàng năm hoặc tổng vốn huy động dưới 5 triệu USD: Miễn phí vĩnh viễn. Giấy phép MIT. Tự lưu trữ ở bất kỳ đâu. Không giới hạn tính năng.
- Trên 5 triệu USD trong môi trường production: Bạn cần giấy phép thương mại. Liên hệ bộ phận kinh doanh của Directus để biết giá.
- Phát triển và kiểm thử: Luôn miễn phí, bất kể quy mô công ty. Ngưỡng này chỉ áp dụng cho các bản triển khai production.
Con số 5 triệu USD bao gồm cả vốn đầu tư mạo hiểm, không chỉ riêng doanh thu. Vì vậy, một startup ở giai đoạn seed với 6 triệu USD vốn huy động về mặt kỹ thuật sẽ vượt ngưỡng. Trên thực tế, Directus không quá gắt gao trong việc thực thi đối với các công ty giai đoạn đầu, nhưng bạn nên tính đến điều này trong kế hoạch của mình.
Các gói Cloud
Nếu bạn không muốn tự quản lý hạ tầng, Directus Cloud sẽ lo việc hosting, sao lưu và cập nhật:
- Starter: 25$/tháng, phù hợp cho các dự án nhỏ, trang web cá nhân
- Professional: 49$–499$/tháng, mở rộng theo dung lượng lưu trữ, băng thông và số lượng chuyển đổi tài nguyên
- Enterprise: Giá tùy chỉnh, SLA, hạ tầng riêng, hỗ trợ ưu tiên
Không tính phí theo từng người dùng. Toàn bộ đội ngũ của bạn dùng chung một gói. Hãy so sánh với Contentful, nơi tính phí theo từng người dùng (xem bảng giá chi tiết Contentful của chúng tôi), hoặc Sanity, nơi tính phí dựa trên mức sử dụng API và băng thông dataset.
| CMS | Gói miễn phí | Gói trả phí bắt đầu từ | Mô hình định giá | Tự host |
|---|---|---|---|---|
| Directus | Có (doanh thu dưới 5 triệu $) | 25$/tháng (Cloud) | Dựa trên doanh thu | Có |
| Strapi | Có (hoàn toàn mã nguồn mở) | 29$/tháng (Cloud) | Dựa trên số người dùng | Có |
| Payload | Có (hoàn toàn mã nguồn mở) | Cloud (beta) | Chưa xác định | Có |
| Contentful | Có (giới hạn) | 300$/tháng | Theo người dùng + mức sử dụng | Không |
| Sanity | Có (giới hạn) | 15$/tháng | Dựa trên mức sử dụng | Không |
Directus vs Strapi vs Payload: So sánh chi tiết
Directus bao bọc cơ sở dữ liệu hiện có mà không cần di chuyển dữ liệu, Strapi tự tạo schema từ các content type, còn Payload được nhúng trực tiếp vào ứng dụng Next.js của bạn. Directus hỗ trợ 7 cơ sở dữ liệu, Strapi hỗ trợ 2, và Payload hỗ trợ 2. Cả ba đều là mã nguồn mở, nhưng triết lý của chúng khá khác nhau.
Sau khi xây dựng dự án với cả Strapi và Directus, điểm khác biệt lớn nhất nằm ở cách chúng nhìn nhận cơ sở dữ liệu của bạn. Với Strapi, bạn định nghĩa content type trong giao diện admin hoặc trong code, và Strapi sẽ tạo cũng như quản lý các bảng trong cơ sở dữ liệu cho bạn. Với Directus, cơ sở dữ liệu mới là nguồn sự thật duy nhất — Directus đọc và thích ứng theo nó.
| Tính năng | Directus | Strapi | Payload |
|---|---|---|---|
| Kiến trúc | Ưu tiên cơ sở dữ liệu (bao bọc DB hiện có) | Ưu tiên code (tạo DB từ model) | Nhúng vào framework (nằm trong Next.js) |
| Cơ sở dữ liệu | PostgreSQL, MySQL, MariaDB, SQLite, OracleDB, CockroachDB, MS-SQL | PostgreSQL, SQLite | MongoDB, PostgreSQL |
| API | REST + GraphQL (hỗ trợ native cả hai) | REST (GraphQL qua plugin) | Local API + REST + GraphQL |
| Giao diện Admin | Data Studio (Vue.js) | Content Manager (React) | Admin Panel (React, nhúng sẵn) |
| Sao trên GitHub | ~34,5k | ~68k | ~33k |
| Hosting đám mây | Directus Cloud (từ $25/tháng) | Strapi Cloud (từ $29/tháng) | Payload Cloud (beta) |
Nên chọn Directus khi: Bạn đã có sẵn cơ sở dữ liệu, bạn muốn có cả REST lẫn GraphQL ngay từ đầu mà không cần cài thêm, hoặc bạn cần hỗ trợ các cơ sở dữ liệu ít phổ biến hơn như OracleDB hay CockroachDB.
Nên chọn Strapi khi: Bạn muốn hệ sinh thái và cộng đồng lớn nhất, bạn thích định nghĩa content type qua giao diện trực quan, hoặc bạn bắt đầu từ con số không mà chưa có cơ sở dữ liệu. Đọc thêm hướng dẫn đầy đủ về Strapi của chúng tôi để biết chi tiết.
Nên chọn Payload khi: Bạn muốn CMS được nhúng trực tiếp vào ứng dụng Next.js, bạn ưu tiên cấu hình theo hướng TypeScript, hoặc bạn cần Local API bỏ qua hoàn toàn HTTP. Xem bài phân tích chuyên sâu về Payload CMS để có bức tranh toàn cảnh.
Khi nào KHÔNG nên sử dụng Directus
Directus không phải là lựa chọn phù hợp nếu bạn cần một trình dựng trang trực quan, một framework tích hợp chặt chẽ với Next.js, hoặc một backend NoSQL. Nó cũng tạo thêm gánh nặng cho các dự án đơn giản, nơi mà một CMS dạng flat-file hoặc WordPress là đã đủ.
Chúng tôi đã chứng kiến nhiều đội ngũ chọn Directus trong khi lẽ ra không nên, và kịch bản thường rơi vào một trong những trường hợp sau:
- Bạn cần một trình dựng trang trực quan. Data Studio của Directus rất xuất sắc trong việc quản lý dữ liệu có cấu trúc, nhưng nó không phải là một trình dựng trang kéo-thả. Nếu chỉnh sửa trực quan là ưu tiên của bạn, hãy xem xét Storyblok, tham khảo hướng dẫn về Storyblok của chúng tôi để biết sự so sánh.
- Bạn đã quyết tâm với NoSQL. Directus được thiết kế chỉ hỗ trợ SQL. Nếu dữ liệu của bạn nằm trong MongoDB, Payload CMS mới là lựa chọn phù hợp tự nhiên.
- Dự án của bạn chỉ là một blog đơn giản. Việc dựng Docker, PostgreSQL và Directus cho một blog cá nhân là hoàn toàn thừa thãi. WordPress, Astro với các tệp markdown, hay thậm chí là Ghost sẽ giúp bạn xuất bản nội dung trong thời gian ngắn hơn rất nhiều.
- Bạn muốn CMS nằm trong framework. Nếu bạn muốn CMS của mình tồn tại bên trong codebase Next.js như một thành phần hạng nhất, Payload làm được điều này một cách native. Còn Directus luôn là một dịch vụ tách biệt.
- Bạn là một tổ chức lớn. Nếu công ty của bạn vượt ngưỡng doanh thu 5 triệu đô la, bạn sẽ cần giấy phép thương mại cho môi trường production. Hãy cân nhắc chi phí đó so với các giải pháp thay thế hoàn toàn mã nguồn mở như Strapi hoặc Payload, nơi việc tự lưu trữ là miễn phí bất kể doanh thu.
Không có điều nào trong số này là khiếm khuyết, chúng đều là những quyết định thiết kế. Directus là một nền tảng dữ liệu, không phải một trình dựng website. Hiểu được sự khác biệt đó sẽ giúp bạn tiết kiệm nhiều tháng trời bực bội.
Câu hỏi thường gặp
Directus CMS là gì?
Directus là một headless CMS mã nguồn mở, cung cấp API REST và GraphQL tức thì cho bất kỳ cơ sở dữ liệu SQL hiện có nào. Nó hỗ trợ PostgreSQL, MySQL, MariaDB, SQLite, OracleDB, CockroachDB và MS-SQL. Khác với các CMS truyền thống, Directus không tự tạo schema riêng mà tự động đọc và phản ánh cấu trúc cơ sở dữ liệu hiện có của bạn.
Directus có thực sự miễn phí không?
Directus được tự host miễn phí theo giấy phép MIT đối với các tổ chức có doanh thu hàng năm hoặc tổng vốn huy động dưới 5 triệu đô la. Vượt quá ngưỡng đó, bạn cần có giấy phép thương mại để sử dụng trong môi trường production. Các môi trường development và testing luôn được miễn phí. Directus Cloud, dịch vụ hosting được quản lý của họ, có giá khởi điểm từ 25 đô la mỗi tháng.
Directus khác Strapi như thế nào?
Directus ưu tiên cơ sở dữ liệu (database-first), nó bao bọc cơ sở dữ liệu SQL hiện có của bạn mà không sửa đổi schema. Strapi ưu tiên mã nguồn (code-first), bạn định nghĩa các kiểu nội dung và Strapi sẽ tạo ra các bảng cơ sở dữ liệu. Directus hỗ trợ 7 cơ sở dữ liệu trong khi Strapi chỉ hỗ trợ 2. Cả hai đều cung cấp REST API, nhưng Directus tích hợp sẵn GraphQL còn Strapi cần phải cài thêm plugin.
Directus hỗ trợ những cơ sở dữ liệu nào?
Directus hỗ trợ bảy cơ sở dữ liệu SQL: PostgreSQL, MySQL, MariaDB, SQLite, OracleDB, CockroachDB và MS-SQL. Nó kết nối với cơ sở dữ liệu hiện có của bạn và tự động introspect schema. Hỗ trợ đa cơ sở dữ liệu này là điểm độc đáo của Directus so với các headless CMS khác, hầu hết các đối thủ cạnh tranh chỉ hỗ trợ một hoặc hai engine cơ sở dữ liệu.
Directus có thể thay thế WordPress không?
Directus có thể thay thế WordPress trong việc quản lý nội dung, đặc biệt đối với các dự án headless hoặc dựa trên API. Tuy nhiên, Directus không có sẵn frontend, theme hay trình dựng trang nào. Bạn sẽ cần tự xây dựng frontend bằng một framework như Next.js hoặc Astro. Với các blog đơn giản hoặc trang web cần chỉnh sửa trực quan, WordPress vẫn là lựa chọn thực tế hơn.
Directus có trình chỉnh sửa trực quan không?
Directus bao gồm Data Studio, một giao diện quản trị mạnh mẽ để quản lý dữ liệu có cấu trúc, xây dựng bảng điều khiển và cấu hình quyền hạn. Tuy nhiên, nó không có trình dựng trang trực quan hay trình chỉnh sửa trang WYSIWYG như Storyblok hoặc WordPress. Directus được thiết kế để quản lý dữ liệu, chứ không phải để soạn trang bằng kéo-thả.
Directus có phù hợp cho thương mại điện tử không?
Directus hoạt động tốt như một hệ thống Quản lý Thông tin Sản phẩm, bạn có thể mô hình hóa danh mục sản phẩm, quản lý các thuộc tính và cung cấp dữ liệu qua API. Tuy nhiên, đây không phải là một nền tảng thương mại điện tử. Bạn sẽ không có giỏ hàng, quy trình thanh toán hay xử lý thanh toán. Hãy kết hợp nó với Shopify, Saleor hoặc Medusa cho lớp giao dịch.
Tôi có thể dùng Directus với Next.js không?
Có. Hãy cài đặt gói @directus/sdk, tạo một client trỏ đến instance Directus của bạn, và truy xuất dữ liệu trong các Server Component bằng readItems(). Directus trả về JSON thuần, nên không cần đến các React component dành riêng cho nhà cung cấp. Cách tiếp cận tương tự cũng hoạt động với bất kỳ framework JavaScript nào, bao gồm Astro, Nuxt và SvelteKit.
Directus có hỗ trợ chỉnh sửa cộng tác không?
Có, kể từ phiên bản 11.15 (tháng 2 năm 2026). Directus có tính năng chỉnh sửa cộng tác nguyên bản với các chỉ báo hiện diện trực tiếp cho biết ai đang chỉnh sửa nội dung gì, cùng cơ chế khóa ở cấp độ trường để ngăn ngừa xung đột. Đây là tính năng tích hợp sẵn, không phải plugin. Kết hợp với các phiên bản dự thảo toàn cục trong v11.16, các nhóm có thể dàn dựng và xem trước các thay đổi trước khi xuất bản.
Máy chủ Directus MCP là gì?
Directus đã giới thiệu máy chủ Model Context Protocol (Giao thức Ngữ cảnh Mô hình) gốc vào phiên bản v11.13 (tháng 11 năm 2025). MCP cho phép các công cụ AI như Claude và ChatGPT tương tác trực tiếp với nội dung Directus của bạn, đọc, tạo và cập nhật các mục thông qua ngôn ngữ tự nhiên. Máy chủ MCP tuân thủ các quyền RBAC hiện có của bạn, vì vậy quyền truy cập của AI cũng tuân theo các quy tắc giống như người dùng thông thường.