Directus with PostgreSQL
Directus 无头 CMS —— 开箱即用连接到 PostgreSQL。
在一个 Pier 栈中将 Directus(开源无头 CMS 和数据平台)与专用 PostgreSQL 后端配对。预连线 env vars、持久卷,准备好用于生产多用户内容团队或 SQLite 不再足够的任何用例。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Directus with PostgreSQL。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 Directus with PostgreSQL?
Directus 是一个开源无头 CMS 和数据平台,将任何 SQL 数据库包装在漂亮的 管理 UI 加自动生成的 REST 和 GraphQL API 中。本模板将 Directus 与专用 PostgreSQL 后端(生产推荐的数据库)一起发布,在一个 Pier 栈中预连线。
你登录 Directus 并定义集合(它们成为 Postgres 表)、添加字段(列)、连接 关系、设置角色和权限。一切都反映在普通 SQL 中,从任何 PostgreSQL 客户端 可查询。随着你的模式演变,REST/GraphQL 端点自动更新。
用例 —— 网站/应用的无头后端、多用户编辑 CMS、现有 Postgres 应用程序数据库 之上的管理 UI 或 SaaS MVP 的后端层。
Pier 如何部署它
Pier 使用官方 directus/directus 镜像加 postgres:17-alpine。默认端口 ——
Directus 在 8055 内部(在 Traefik 后),Postgres 在内部 Docker 网络上。
持久卷 —— Directus 上传在 /directus/uploads,扩展在 /directus/extensions,
加上 /var/lib/postgresql/data 用于 Postgres。
首次启动管理员用户通过 env vars 创建(Pier 生成强密码)。在公共 URL 登录 并开始定义集合。
对于 HTTPS,在 Pier 中附加自定义域名 —— Traefik 处理 TLS。
何时不要使用本模板
对于一个编辑器博客或开发,独立的 Directus (SQLite) 模板更简单。对于带 工作流和插件的非 CMS 内部工具平台,NocoBase(本目录)更适合。对于 “PostgreSQL + auth + 存储 + 边缘函数”完整堆栈后端,看看 Supabase。 Directus 是”SQL 上的无头 CMS / 数据平台带优秀管理 UI”的正确答案。
核心功能
生产就绪 Directus
完整 Directus —— 可视化数据建模、REST + GraphQL API、RBAC、流(自动化)、webhooks、文件上传 —— 由 PostgreSQL 支持以处理并发多用户工作负载。
预连线 DB 配置
Pier 设置 DB_CLIENT=pg、DB_HOST/DATABASE/USER/PASSWORD env vars。Directus 在首次启动时直接启动到 Postgres。
SQL 优先数据建模
Directus 将你现有的 SQL 模式(或它配置的模式)包装在漂亮的 UI 中。DB 仍然是正常的 PostgreSQL DB —— 从任何地方查询它。
开箱即用的 REST + GraphQL
每个集合自动公开 REST 和 GraphQL 端点。通过 JWT、OAuth2/OIDC 或静态 token 的身份验证。
流(自动化)
Webhook 处理、计划任务、数据转换的可视化工作流构建器。在你的 CMS 内像 n8n。
漂亮的管理 UI
仪表板、表视图、编辑表单、文件库、版本历史。可用的最佳 CMS 管理 UI 之一。
应用场景
多用户内容团队
编辑器、审查者、翻译者在仪表板上并发 —— Postgres 处理 SQLite 无法处理的并发写入。
Web + 移动的无头后端
通过 REST 或 GraphQL 喂养你的 Next.js/Astro/Vue 站点加 iOS/Android 应用的单个 Directus 实例。
现有 Postgres 上的内部管理
将 Directus 指向现有应用程序 Postgres DB —— 对你已有的表的即时管理 UI。
SaaS MVP 的后端
REST/GraphQL/auth/RBAC/文件上传/自动化 —— Directus 为早期 SaaS 替换 80% 的手动构建后端。
i18n CMS
翻译接口、感知地区的字段、多语言站点的内容版本控制。
代码示例
Data Model → Create Collection → "posts"
添加字段:
- title (text)
- body (rich text)
- status (dropdown: draft/published)
- cover (file)
- author (m2o → directus_users)
- tags (m2m → tags)
保存 —— REST/GraphQL 端点自动生成 curl https://cms.example.com/items/posts?filter[status][_eq]=published&fields=*.* \
-H "Authorization: Bearer $TOKEN" query {
posts(filter: { status: { _eq: "published" } }) {
id
title
body
cover { id filename_download }
author { first_name last_name }
}
} 流触发器:"Action — items.update on posts"
→ 操作:"Send Webhook"
URL: https://my-site.example.com/revalidate
方法:POST
正文:{ "slug": "{{ $trigger.payload.slug }}" } 对比
| vs 带 SQLite 的 Directus(默认独立) | SQLite Directus 对一个编辑器或开发还行。Postgres 对多用户内容团队和任何生产负载是必需的。 |
| vs Strapi | Strapi 是 JavaScript 优先、富插件,但更重型且 SQLite 默认。Directus 是数据库无关的,包装你现有的模式,管理 UI 更精致。 |
| vs Supabase(本目录) | Supabase 是"用于应用后端的 PostgreSQL + auth + 存储 + 边缘函数"。Directus 是"用于 CMS 用例的 PostgreSQL + 管理 UI + 内容工作流"。不同的最佳点;两者都建立在 Postgres 上。 |
| vs Sanity / Contentful | 仅 SaaS、按使用付费。Directus 是自托管的、免费的,你拥有数据和数据库。 |
| vs NocoBase | NocoBase 是无代码优先带插件可扩展性。Directus 是 SQL 上的管理 UI 优先。按主要用例选择 —— 内容管理 (Directus) 与内部工具 (NocoBase)。 |
常见问题
为什么 PostgreSQL 而不是 SQLite?
我可以从 SQLite Directus 迁移吗?
它可以包装现有 Postgres 吗?
Auth / SSO?
文件上传 —— 它们去哪里?
带许多集合的性能?
备份策略?
相关服务
在你的 VPS 上部署
在一个 Pier 栈中将 Directus(开源无头 CMS 和数据平台)与专用 PostgreSQL 后端配对。预连线 env vars、持久卷,准备好用于生产多用户内容团队或 SQLite 不再足够的任何用例。
部署此服务 →