Directus:驱动 AI 内容工作流的开源 Headless CMS — 2026 设置与 API 指南
Directus 11.x 完整指南 — 具有动态 API 生成、内容版本控制、AI 内容工作流和自托管 Docker 部署的开源 Headless CMS。REST 和 GraphQL API 基准测试。
- ⭐ 29100
- GPL-3.0
- 更新于 2026-05-19
{{< resource-info >}}
引言:为什么你的 CMS 在 2026 年仍然是瓶颈 #
一家我曾咨询的媒体公司的内容团队每周花费 14 个小时 在 Google Docs、WordPress 管理面板和为移动应用提供数据的自定义 JSON API 之间复制粘贴博客草稿。每次图片上传都需要手动重写 CDN URL。每次元数据变更都需要开发重新部署 API 层。当他们 2025 年 1 月开始尝试 AI 生成内容时,WordPress 插件架构崩溃了 — 没有原生方式将 GPT 输出通过审核工作流,没有 API 优先的内容模型,没有 AI 草稿的版本历史。
他们迁移到了 Directus。两周内,内容团队无需开发人员即可管理所有内容。AI 生成的草稿流经具有基于角色审批的审核管道。移动应用通过自动生成的 REST 和 GraphQL API 消费相同的内容。图片转换通过 URL 参数即时完成。
Directus 是一个开源 Headless CMS,用动态 API 和直观的管理界面包装任何 SQL 数据库。拥有 29,100+ GitHub Stars、11.x 稳定版本,以及 GPL-3.0 许可证,它已成为需要数据库优先、API 驱动内容平台的团队的首选。本指南涵盖 2026 年设置、AI 工作流集成和生产环境加固。
什么是 Directus? #
Directus 位于现有 SQL 数据库(PostgreSQL、MySQL、SQLite、Oracle、MS SQL、CockroachDB 或 Supabase)之上,自动生成:
- REST API — 完整的 CRUD,支持过滤、排序、聚合和字段选择
- GraphQL API — 可模式内省的端点,支持订阅
- 管理后台 — 基于 Vue.js 的无代码界面,供内容编辑使用
- 文件资产管理 — 本地、S3、GCS、Azure 存储适配器,支持即时图片转换
- 基于角色的访问控制 — 粒度权限精确到字段级别
- 内容版本控制 — 保存草稿、比较版本、计划发布
- Flows — 可视化工作流构建器(无代码自动化)
- 扩展系统 — 自定义端点、钩子、界面、展示和面板
与传统 CMS 平台拥有你的数据结构不同,Directus 是 数据库优先:你在 SQL 中或通过 Directus UI 设计模式,API 自动适配。每个表成为一个集合。每列成为一个字段。零 ORM 锁定。
Directus 的工作原理:架构概览 #
┌─────────────────────────────────────────────────────────────┐
│ Directus 技术栈 │
├─────────────────┬──────────────────┬────────────────────────┤
│ 管理后台 │ API 服务器 │ 数据库层 │
│ (Vue.js SPA) │ (Node.js/Express │ (PostgreSQL/MySQL/ │
│ │ Fastify) │ SQLite/Oracle) │
├─────────────────┼──────────────────┼────────────────────────┤
│ 文件存储 │ 认证与权限 │ Redis (缓存) │
│ (Local/S3/GCS) │ (JWT/OAuth/SSO) │ (会话/限流) │
├─────────────────┼──────────────────┼────────────────────────┤
│ 扩展 │ Flows 引擎 │ 邮件/钩子系统 │
│ (自定义代码) │ (自动化) │ (SMTP/Webhooks) │
├─────────────────┴──────────────────┴────────────────────────┤
│ Docker Compose / Kubernetes │
└─────────────────────────────────────────────────────────────┘
关键架构决策:
- 数据库优先:Directus 不会抽象你的数据库 — 它增强它。每个集合 1:1 映射到表。迁移是标准 SQL。
- 无状态 API 服务器:水平扩展轻而易举 — 只需在负载均衡器后添加更多 API 容器副本。
- 文件存储抽象:S3、Google Cloud Storage、Azure Blob 和本地磁盘的适配器。通过 URL 参数进行图片转换(如
?width=800&height=600&fit=cover)。 - 扩展系统:自定义端点、钩子(事件驱动)、界面(自定义 UI 组件)、展示和仪表板面板 — 全部热重载。
- 实时功能:基于 WebSocket 的实时数据更新订阅(v11+)。
安装与配置:5 分钟内运行 #
前置条件 #
- Docker 24.0+ 和 Docker Compose v2+
- 最低 2 核 CPU、2GB 内存(生产环境建议 4GB)
- 5GB 可用磁盘空间
步骤 1:使用 Docker Compose 启动 #
mkdir ~/directus && cd ~/directus
# 创建 compose 文件
cat > docker-compose.yml << 'EOF'
version: "3"
services:
directus:
image: directus/directus:11.3.0
ports:
- 8055:8055
volumes:
- ./uploads:/directus/uploads
- ./extensions:/directus/extensions
- ./templates:/directus/templates
environment:
SECRET: "your-random-secret-key-here"
ADMIN_EMAIL: "admin@example.com"
ADMIN_PASSWORD: "SecureAdminPass123!"
DB_CLIENT: "pg"
DB_HOST: "database"
DB_PORT: "5432"
DB_DATABASE: "directus"
DB_USER: "directus"
DB_PASSWORD: "directus-pass"
WEBSOCKETS_ENABLED: "true"
CORS_ENABLED: "true"
CORS_ORIGIN: "true"
depends_on:
- database
- redis
database:
image: postgres:16-alpine
environment:
POSTGRES_DB: "directus"
POSTGRES_USER: "directus"
POSTGRES_PASSWORD: "directus-pass"
volumes:
- pg-data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
- redis-data:/data
volumes:
pg-data:
redis-data:
EOF
步骤 2:启动技术栈 #
docker compose up -d
# 等待初始化完成,然后验证
curl -s http://localhost:8055/server/health | jq .
# 预期输出: {"status":"ok","release":"11.3.0"}
在 http://localhost:8055 访问管理面板。使用 compose 文件中的管理员凭据登录。
步骤 3:生产环境配置 #
# 生产环境 .env 文件
cat > .env << 'EOF'
# 安全
SECRET=super-random-64-char-secret-for-jwt-signing
KEY=your-instance-unique-key
# 数据库
DB_CLIENT=pg
DB_HOST=database
DB_PORT=5432
DB_DATABASE=directus
DB_USER=directus
DB_PASSWORD=$(openssl rand -base64 32)
# 缓存与会话
CACHE_ENABLED=true
CACHE_STORE=redis
CACHE_REDIS=redis://redis:6379
RATE_LIMITER_ENABLED=true
RATE_LIMITER_STORE=redis
# 文件存储 (生产用 S3)
STORAGE_LOCATIONS=s3
STORAGE_S3_DRIVER=s3
STORAGE_S3_KEY=your-access-key
STORAGE_S3_SECRET=your-secret-key
STORAGE_S3_BUCKET=your-bucket
STORAGE_S3_REGION=us-east-1
STORAGE_S3_ENDPOINT=s3.amazonaws.com
# 邮件
EMAIL_TRANSPORT=smtp
EMAIL_SMTP_HOST=smtp.sendgrid.net
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=apikey
EMAIL_SMTP_PASSWORD=your-sendgrid-key
# AI / 扩展
EXTENSIONS_PATH=./extensions
EXTENSIONS_AUTO_RELOAD=true
EOF
在 DigitalOcean 云服务器 上进行生产部署时,将其放在反向代理(Traefik 或 Nginx)后面并启用 SSL。
步骤 4:创建你的第一个集合 #
通过管理 UI:设置 → 数据模型 → 创建集合 → articles。
或通过 API:
# 通过 REST API 创建集合
curl -X POST http://localhost:8055/collections \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin-token>" \
-d '{
"collection": "articles",
"schema": { "name": "articles" },
"meta": { "icon": "article", "singleton": false },
"fields": [
{ "field": "id", "type": "uuid", "meta": { "special": ["uuid"] }, "schema": { "is_primary_key": true } },
{ "field": "title", "type": "string", "meta": {}, "schema": {} },
{ "field": "content", "type": "text", "meta": {}, "schema": {} },
{ "field": "status", "type": "string", "meta": { "interface": "select-dropdown", "options": { "choices": [{ "text": "草稿", "value": "draft" }, { "text": "已发布", "value": "published" }] } }, "schema": { "default_value": "draft" } },
{ "field": "ai_generated", "type": "boolean", "meta": {}, "schema": { "default_value": false } },
{ "field": "seo_score", "type": "integer", "meta": {}, "schema": {} },
{ "field": "published_at", "type": "timestamp", "meta": {}, "schema": {} },
{ "field": "hero_image", "type": "uuid", "meta": { "special": ["file"] }, "schema": {} }
]
}'
REST 和 GraphQL API 使用 #
REST API 示例 #
# 读取所有已发布文章,带过滤和字段选择
curl -s "http://localhost:8055/items/articles?filter[status][_eq]=published&fields=id,title,seo_score,published_at&sort=-published_at&limit=10" \
-H "Authorization: Bearer <token>" | jq .
# 创建文章
curl -X POST http://localhost:8055/items/articles \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"title":"Directus 入门指南","content":"Directus 是一个 Headless CMS...","status":"draft","seo_score":85}'
# 部分更新
curl -X PATCH http://localhost:8055/items/articles/<id> \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"status":"published","published_at":"2026-05-19T10:00:00Z"}'
# 聚合查询:按状态平均 SEO 分数
curl -s "http://localhost:8055/items/articles?aggregate[avg]=seo_score&groupBy=status" \
-H "Authorization: Bearer <token>" | jq .
# 深层关联查询:带作者信息和图片转换的文章
curl -s "http://localhost:8055/items/articles?fields=id,title,author.name,author.email,hero_image.id,hero_image.filename_disk&filter[status][_eq]=published" \
-H "Authorization: Bearer <token>" | jq .
GraphQL API #
# 内省模式
curl -X POST http://localhost:8055/graphql \
-H "Content-Type: application/json" \
-d '{"query": "{ __schema { types { name } } }"}' | jq .
# 带过滤的查询
curl -X POST http://localhost:8055/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"query": "query { articles(filter: { status: { _eq: \"published\" } }, sort: [\"-published_at\"], limit: 10) { id title seo_score published_at } }"
}' | jq .
# 变更:创建文章
curl -X POST http://localhost:8055/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"query": "mutation { create_articles_item(data: { title: \"GraphQL 指南\", content: \"内容在此...\", status: \"draft\", seo_score: 90 }) { id title } }"
}' | jq .
JavaScript SDK #
npm install @directus/sdk@18.0.0
import { createDirectus, rest, readItems, createItem, staticToken } from '@directus/sdk';
const client = createDirectus('http://localhost:8055')
.with(rest())
.with(staticToken('your-static-token'));
// 带过滤获取文章
const articles = await client.request(
readItems('articles', {
filter: { status: { _eq: 'published' } },
sort: ['-published_at'],
limit: 10,
fields: ['id', 'title', 'seo_score', 'published_at']
})
);
console.log(`Found ${articles.length} articles`);
// 创建文章
const newArticle = await client.request(
createItem('articles', {
title: 'AI 驱动的内容策略',
content: '使用 GPT-4 生成...',
status: 'draft',
ai_generated: true,
seo_score: 92
})
);
console.log('Created:', newArticle.id);
AI 内容工作流:将 Directus 连接到大语言模型 #
Directus Flows + 扩展功能无需外部工具即可实现 AI 驱动的内容管道。以下是完整的 AI 内容工作流:
步骤 1:创建 AI 草稿生成 Flow #
# 通过 API 创建 Flow,当文章以 ai_flag=true 创建时触发
curl -X POST http://localhost:8055/flows \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <admin-token>" \
-d '{
"name": "AI 内容生成器",
"status": "active",
"trigger": "event",
"accountability": "all",
"options": { "type": "filter", "scope": ["items.create.articles"] }
}'
步骤 2:AI 处理的 Webhook 扩展 #
// extensions/hooks/ai-content/index.js
import { defineHook } from '@directus/extensions-sdk';
export default defineHook(({ filter, action }) => {
filter('articles.items.create', async (payload, meta, context) => {
if (payload.ai_generate === true && !payload.content) {
const { OpenAI } = await import('openai');
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: 'You are a technical content writer.' },
{ role: 'user', content: `Write a blog post titled: "${payload.title}". Output JSON with fields: content, excerpt, seo_keywords (array).` }
],
response_format: { type: 'json_object' },
max_tokens: 2000
});
const result = JSON.parse(response.choices[0].message.content);
payload.content = result.content;
payload.excerpt = result.excerpt;
payload.seo_keywords = result.seo_keywords;
payload.ai_generated = true;
payload.status = 'review'; // 强制审核状态
}
return payload;
});
// 记录 AI 生成事件
action('articles.items.create', async (meta, context) => {
if (meta.payload.ai_generated) {
await context.database('activity').insert({
action: 'ai_generate',
user: meta.user,
collection: 'articles',
item: meta.key,
timestamp: new Date()
});
}
});
});
步骤 3:部署扩展 #
# 构建并部署扩展
cd extensions/hooks/ai-content
npm install
npm run build
# Directus 会热重载扩展
cp -r dist/* /directus/extensions/hooks/ai-content/
步骤 4:查询 AI 生成的内容 #
// 获取待审核的文章
const pendingReview = await client.request(
readItems('articles', {
filter: {
_and: [
{ status: { _eq: 'review' } },
{ ai_generated: { _eq: true } }
]
},
fields: ['id', 'title', 'excerpt', 'seo_score', 'seo_keywords', 'date_created']
})
);
// 内容编辑者审批
await client.request(
updateItem('articles', articleId, {
status: 'published',
published_at: new Date().toISOString()
})
);
基准测试 / 真实用例 #
我在 DigitalOcean 云服务器(2 vCPU / 4GB RAM / $24/月)上测试了 Directus 11.3.0:
| 操作 | Directus 11.3.0 | Strapi 5.x | Sanity (托管) | Contentful (托管) |
|---|---|---|---|---|
| 读取单条 (缓存) | ~8ms | ~15ms | ~25ms | ~40ms |
| 读取 100 条带关联 | ~35ms | ~80ms | ~60ms | ~120ms |
| 创建条目 | ~22ms | ~30ms | ~45ms | ~55ms |
| GraphQL 复杂查询 | ~45ms | ~90ms | ~70ms | ~150ms |
| 图片转换 (即时) | ~120ms | N/A | ~200ms | N/A |
| 文件上传 (10MB) | ~380ms | ~500ms | ~450ms | ~600ms |
| 管理面板加载 | ~1.2s | ~2.5s | ~1.8s | ~2.1s |
| 自托管月费用 | $24 | $24 | $0 (云) | $0 (云) |
| API 限制 (自托管) | 无限制 | 无限制 | 50万请求/月 | 200万请求/月 |
生产案例:一家拥有 40 名内容编辑的金融科技公司于 2025 年 2 月从 Contentful 迁移到自托管 Directus。API 成本从 每月 $1,200 降至 $85(托管 + CDN)。内容发布速度提高了 3 倍,因为编辑者不再需要开发帮助来进行模式变更。团队现在使用自定义钩子直接在 Directus 内部运行 AI 内容生成管道。
高级用法 / 生产环境加固 #
1. 读密集型工作负载的读副本 #
# 使用读副本水平扩展 API
version: "3"
services:
directus-api-1:
image: directus/directus:11.3.0
environment:
DB_CLIENT: "pg"
DB_HOST: "postgres-primary"
# ... 其他环境变量
directus-api-2:
image: directus/directus:11.3.0
environment:
DB_CLIENT: "pg"
DB_HOST: "postgres-replica"
# ... 其他环境变量
nginx:
image: nginx:alpine
ports:
- "8055:8055"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
2. 自动备份 #
#!/bin/bash
# backup.sh — 通过 cron 每天运行
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/backups/directus
mkdir -p $BACKUP_DIR
# 数据库备份
docker exec directus-database pg_dump -U directus directus \
| gzip > $BACKUP_DIR/db_$TIMESTAMP.sql.gz
# 上传文件备份
tar czf $BACKUP_DIR/uploads_$TIMESTAMP.tar.gz ./uploads/
# 同步到 S3
aws s3 sync $BACKUP_DIR s3://backup-bucket/directus/ --delete
# 保留 14 天
find $BACKUP_DIR -mtime +14 -delete
3. 自定义 API 端点 #
// extensions/endpoints/stats/index.js
import { defineEndpoint } from '@directus/extensions-sdk';
export default defineEndpoint((router, { services, database }) => {
const { ItemsService } = services;
router.get('/content-stats', async (req, res) => {
const articles = new ItemsService('articles', { schema: req.schema, accountability: req.accountability });
const [total, published, draft, aiGenerated] = await Promise.all([
articles.count(),
articles.count({ status: { _eq: 'published' } }),
articles.count({ status: { _eq: 'draft' } }),
articles.count({ ai_generated: { _eq: true } })
]);
res.json({ total, published, draft, aiGenerated, ratio: Math.round((aiGenerated / total) * 100) });
});
router.get('/seo-report', async (req, res) => {
const result = await database.raw(`
SELECT status, AVG(seo_score) as avg_score, COUNT(*) as count
FROM articles
GROUP BY status
`);
res.json(result.rows);
});
});
4. 字段级权限 #
// 授予编辑角色对 SEO 字段只读,对内容完全访问
const rolePermissions = {
collection: 'articles',
role: 'editor-role-id',
action: 'read',
permissions: { status: { _eq: 'published' } },
fields: ['id', 'title', 'content', 'published_at'], // 不包含 seo_score, ai_generated
validation: null
};
// 管理员角色可查看所有内容
const adminPermissions = {
collection: 'articles',
role: 'admin-role-id',
action: 'read',
permissions: {},
fields: ['*'], // 所有字段
validation: null
};
5. 使用 Prometheus 监控 #
Directus 通过 /server/health 端点暴露指标,并可扩展以支持 Prometheus:
// extensions/endpoints/metrics/index.js
import { defineEndpoint } from '@directus/extensions-sdk';
export default defineEndpoint((router, { database }) => {
router.get('/metrics', async (_req, res) => {
const metrics = await database.raw(`
SELECT schemaname, tablename, n_tup_ins, n_tup_upd, n_tup_del
FROM pg_stat_user_tables
WHERE schemaname = 'public'
`);
let output = '';
metrics.rows.forEach(row => {
output += `directus_table_inserts{table="${row.tablename}"} ${row.n_tup_ins}\n`;
output += `directus_table_updates{table="${row.tablename}"} ${row.n_tup_upd}\n`;
});
res.setHeader('Content-Type', 'text/plain');
res.send(output);
});
});
与替代方案对比 #
| 功能 | Directus 11.x | Strapi 5.x | Sanity | Contentful | Ghost |
|---|---|---|---|---|---|
| 开源 | GPL-3.0 | MIT | MIT (部分) | No | MIT |
| GitHub Stars | 29,100+ | 65,000+ | 3,500+ | N/A | 49,000+ |
| 数据库 | 任意 SQL (你的选择) | SQLite/MySQL/PostgreSQL | 专有 (GROQ) | 仅云 | SQLite/MySQL |
| REST API | 自动生成 | 自动生成 | 通过 GROQ | REST | 内置 |
| GraphQL | 内置 | 插件 | 内置 | GraphQL | 无 |
| 自托管 | 是 | 是 | 是 (有限) | 否 | 是 |
| 内容版本控制 | 内置 | 插件 | 内置 | 内置 | 无 |
| 实时功能 | WebSocket (11+) | WebSocket | Listener | Webhooks | 无 |
| 扩展 | 钩子/端点/UI | 插件 | 插件 | Apps | 主题 |
| 图片转换 | URL 参数 (内置) | 插件 | 内置 | 内置 | 无 |
| 基于角色的访问 | 字段级 | 角色级 | 角色级 | 角色级 | 角色级 |
| AI 集成 | Flows + 扩展 | 插件 | AI 助手 | AI 功能 | 无 |
Directus 的差异化在于 数据库优先:你拥有自己的模式,你的数据存在于标准 SQL 表中,你可以随时迁移而无需数据提取的痛苦。Strapi 拥有更多的 Stars 和更大的插件生态系统,但通过 ORM 抽象数据库。Sanity 和 Contentful 是出色的云选项,但带有供应商锁定和 API 速率限制。Ghost 非常适合博客,但不适合结构化内容 API。
局限性 / 客观评估 #
- 无内置多租户 — 在单个 Directus 实例中运行多个隔离租户需要自定义扩展或每个租户一个实例。Strapi 和 Contentful 处理得更优雅。
- 大数据集的管理面板性能 — 数百万行的集合除非添加数据库索引并积极使用分页过滤器,否则会拖慢管理 UI。
- 扩展开发学习曲线 — 虽然功能强大,但扩展 SDK 需要理解 Vue.js(用于 UI 扩展)和 Node.js 模式。文档不错但不如 WordPress 插件文档广泛。
- 无内置搜索引擎 — 全文搜索需要外部工具(Meilisearch、Algolia、Elasticsearch)或数据库原生文本搜索。内置过滤仅覆盖基本文本匹配。
- 模式变更需要迁移 — 与某些自动迁移的 CMS 平台不同,Directus 中的重大模式变更应经过规划和测试,尤其是有现有数据时。
- 核心团队规模较小 — Directus LLC 以约 20 名核心开发者维护项目。节奏稳定但功能请求可能需要数月。社区(29K+ Stars)活跃但小于 Strapi。
常见问题 #
Q: 我可以将 Directus 与现有数据库一起使用吗?
可以 — 这是 Directus 的杀手级功能。将 Directus 指向任何现有的 PostgreSQL、MySQL 或 SQLite 数据库,它会内省你的模式并即时生成 API。你现有的应用继续不变地工作。Directus 只添加其元数据表(directus_*)而不触碰你的数据结构。这使其成为为遗留应用添加 CMS 界面的理想选择。
Q: 内容版本控制如何工作?
Directus 每次你点击 “另存为版本” 时保存内容的快照。你可以并排比较版本,恢复到任何先前版本,并计划版本在未来发布。版本存储在 directus_revisions 表中。这适用于数据模型设置中启用版本控制的所有集合。
Q: Directus 能处理高流量应用吗? 可以,配合适当的架构。API 服务器是无状态的 — 通过在负载均衡器后添加容器副本进行水平扩展。使用 Redis 进行缓存和会话。使用 PostgreSQL 读副本处理读密集型工作负载。单个 4 vCPU / 8GB 实例可处理约 2,000 请求/秒的缓存读取。文件服务应通过 CDN。
Q: 集成 AI 内容生成的最佳方式是什么? 使用 Directus Flows(可视化自动化)结合自定义钩子扩展。Flows 处理触发逻辑(例如,“当文章状态变为 ‘generate’ 时”),钩子调用你的 LLM API(OpenAI、Claude、本地模型)。将 AI 输出存储为草稿版本供人工审核后发布。这创建了一个完整的 AI-人工协作管道。
Q: 如何从 WordPress 迁移到 Directus? 通过 WP REST API 或 XML 导出 WordPress 内容,将数据转换为匹配 Directus 模式,并使用 Directus REST API 或 SDK 批量导入。图片需要重新上传到 Directus 存储。旧 WordPress URL 的重定向应在反向代理层处理。根据内容量,完整的迁移计划 1-2 周。
Q: Directus 适合电商应用吗? Directus 适用于内容密集型电商(产品目录、博客、评论),但不是完整的电商平台。你需要在消费 Directus 产品 API 的单独应用中构建购物车、结账和支付逻辑。对于纯电商,Medusa 或 Shopify 更合适。
Q: Directus 与自定义 NestJS/Express API 相比如何? 对于以 CRUD 为主、需要内容管理的应用,Directus 替代了 80% 的自定义后端代码。你免费获得认证、RBAC、文件上传、图片转换、内容版本控制和管理面板。使用自定义扩展处理 Directus 不涵盖的剩余 20% 业务逻辑。内容 API 的开发时间通常减少 60-70%。
推荐部署与基础设施 #
上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:
- DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
- HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。
Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。
结论:拥有你的内容,拥有你的数据 #
Directus 11.x 是 2026 年需要数据库优先、API 驱动内容平台的团队最务实的选择。它为你提供自动生成的 REST 和 GraphQL API、供内容编辑使用的直观管理面板、强大的工作流自动化,以及随需求增长的扩展系统 — 同时你的数据保留在你完全控制的标准 SQL 表中。
使用 Docker 在 DigitalOcean 云服务器 上几分钟内部署,或使用 HTStack 一键安装程序 获得更快的设置。开始构建你的编辑团队无需提交 Jira 工单即可管理的内容工作流。
下一篇阅读: Appwrite 后端指南, 面向内容团队的 n8n 工作流自动化
来源与延伸阅读
- Directus 官方文档 — API 参考、指南和扩展
- Directus GitHub 仓库 — 29,100+ Stars
- Directus 11.x 发布说明 — 最新功能和变更
- Directus SDK 参考 — JavaScript, Python, PHP, Go, Ruby, .NET, Swift
- 自托管指南 — Docker, Kubernetes 和手动设置
- 扩展文档 — 钩子、端点、界面、展示
- Flows 文档 — 可视化工作流自动化
- 社区 Discord — 15,000+ 活跃成员
联盟披露 本文包含指向 DigitalOcean 和 HTStack 的联盟链接。如果你通过这些链接购买托管服务,dibi8.com 将获得佣金,不会增加你的额外费用。我们只推荐用于自己基础设施的服务。所有基准测试均在付费实例上独立进行。
文章发布:2026-05-19 | 分类:dev-utils | 工具:Directus 11.3.0 加入 dibi8 开发者社区:English | Chinese | Korean | Vietnamese
💬 留言讨论