Skip to main content
[ PIER ]

Directus with PostgreSQL

Directus 无头 CMS —— 开箱即用连接到 PostgreSQL。

Service #cms#headless#api#graphql#postgresql

在一个 Pier 栈中将 Directus(开源无头 CMS 和数据平台)与专用 PostgreSQL 后端配对。预连线 env vars、持久卷,准备好用于生产多用户内容团队或 SQLite 不再足够的任何用例。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 Directus with PostgreSQL。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 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

翻译接口、感知地区的字段、多语言站点的内容版本控制。

代码示例

定义 "posts" 集合 (UI) text
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 端点自动生成
REST API —— 获取帖子 bash
curl https://cms.example.com/items/posts?filter[status][_eq]=published&fields=*.* \
  -H "Authorization: Bearer $TOKEN"
GraphQL 查询 graphql
query {
  posts(filter: { status: { _eq: "published" } }) {
    id
    title
    body
    cover { id filename_download }
    author { first_name last_name }
  }
}
在项目更新时的 Webhook(流) text
流触发器:"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?
多用户并发编辑、更大数据量、HA 设置都需要 Postgres。SQLite 仅对单一编辑器或开发还行。
我可以从 SQLite Directus 迁移吗?
使用 Directus 的 CLI 导出模式 + 内容,部署本模板,通过 CLI 导入。工作流 / 用户 / 配置干净地导出。
它可以包装现有 Postgres 吗?
是 —— Directus 的主要功能。通过 `DB_CLIENT=pg` 和连接详情将其指向现有 DB;Directus 自省模式并立即将它们公开为集合。
Auth / SSO?
是 —— Directus 支持 OpenID Connect、OAuth2、SAML、LDAP,加上用于服务账户的静态 token。
文件上传 —— 它们去哪里?
默认本地磁盘卷。通过 env vars 切换到 S3/MinIO/R2/GCS/Azure 用于云存储。
带许多集合的性能?
Directus 易构建用于"每集合数千项、几十个集合"。超出此范围,查询模式很重要 —— 索引你的热门外键。
备份策略?
pg_dump Directus DB + 备份上传文件卷。两者都干净地恢复到新实例。

相关服务

在你的 VPS 上部署

在一个 Pier 栈中将 Directus(开源无头 CMS 和数据平台)与专用 PostgreSQL 后端配对。预连线 env vars、持久卷,准备好用于生产多用户内容团队或 SQLite 不再足够的任何用例。

部署此服务 →