Grafana with PostgreSQL
带真实数据库的 Grafana —— 用于多用户生产。
在一个 Pier 栈中将 Grafana 与专用 PostgreSQL 后端配对。PostgreSQL 支持的部署是 Grafana 为生产推荐的 —— 多用户、HA 友好,并避免在多个并发编辑器负载下困扰 Grafana 的 SQLite 写锁问题。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Grafana with PostgreSQL。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。
什么是 Grafana with PostgreSQL?
本模板发布 Grafana —— 事实上的可观测性仪表板平台 —— 连线到专用 PostgreSQL 后端用于其内部状态(用户、仪表板、组织、警报、注释)。Grafana 文档将 PostgreSQL(或 MySQL)作为任何多用户或生产部署的推荐后端;SQLite 仅对单一 管理员 homelab 使用还行。
两个服务一起在一个 Compose 栈中启动,env vars 已设置,以便 Grafana 在内部 Docker 网络上找到 Postgres。无需手动 GF_DATABASE_* 配置。你登录并像独立模板 一样使用 Grafana —— 数据库后端不可见。
Pier 如何部署它
Pier 使用官方 grafana/grafana 镜像和 postgres:17-alpine 用于后端。
Grafana 在端口 3000 内部,在 Traefik 后。PostgreSQL 保留在内部 Docker 网络
上(不公开)。每个服务都有自己的数据卷 —— /var/lib/grafana 用于 Grafana
插件和配置,/var/lib/postgresql/data 用于 Postgres 数据。
默认管理员用户是 admin,带 Pier 生成的密码(显示在服务页面上)。首次
登录时更改它。
对于 HTTPS,将自定义域名附加到 Pier 中的 Grafana 服务 —— Traefik 处理 TLS 终止并代理到端口 3000。
何时不要使用本模板
如果你是单一用户带 homelab 且不期望并发编辑,独立 grafana 模板更简单。
如果你已经有托管 PostgreSQL(Pier 或 RDS 或任何地方),使用独立 Grafana
模板并通过 env vars 将其指向现有 Postgres。对于无运维开销的 Grafana 即
服务,Grafana Cloud 的免费层值得考虑。本模板是”我想在我自己的 VPS 上的
生产 Grafana 且我不想手动连接两个服务”的正确答案。
核心功能
生产就绪持久化
Grafana 的用户数据库 —— 仪表板、组织、用户、会话、注释 —— 存在 PostgreSQL 而非 SQLite 中。干净地处理并发写入。
预连线 env
Pier 设置 GF_DATABASE_TYPE=postgres、主机/用户/密码 env vars 和连接设置 —— Grafana 直接启动到 Postgres 而无需手动配置。
相同的 Grafana UI
仪表板、面板、警报、插件 —— 与 SQLite Grafana 相同。只有支持存储不同。
所有 Grafana 插件
数据源(Prometheus、InfluxDB、ES、ClickHouse、MySQL、Postgres、Loki、Tempo、Mimir)、面板插件、应用插件 —— 都兼容。
通过 Postgres 备份/恢复
pg_dump 备份整个 Grafana 状态。恢复是新栈上的 pg_restore。比处理 Grafana SQLite + 配置文件容易得多。
多组织 / 团队规模
许多用户对许多仪表板的并发编辑无写锁争用工作。
应用场景
多用户分析团队
少数或几十名分析师并发编辑仪表板。PostgreSQL 避免在团队负载下出现的 SQLite 写锁错误。
HA / 灾难恢复场景
PG 备份 + 备用副本提供 SQLite 无法提供的时间点恢复和热备用选项。
大型仪表板 / 注释量
数千个仪表板和高写注释流(如 CI 警报、部署标记)—— Postgres 远远超过 SQLite 退化的范围。
集中式可观测性中心
一个 Grafana 实例为许多团队的 100 多名用户服务 —— 这正是 Grafana 推荐 Postgres 的部署。
代码示例
Configuration → Data sources → PostgreSQL
Host: postgres:5432
Database: grafana
User: grafana
Password: (来自 Pier env)
TLS: 禁用(内部 Docker 网络) Configuration → Data sources → Prometheus
URL: https://prometheus.example.com
Auth: Bearer Token 或 Basic curl -H "Authorization: Bearer $API_KEY" \
https://grafana.example.com/api/dashboards/uid/abc123 > dashboard.json # /etc/grafana/provisioning/dashboards/default.yaml
apiVersion: 1
providers:
- name: default
folder: ""
type: file
options:
path: /var/lib/grafana/dashboards 对比
| vs 带 SQLite 的 Grafana(默认独立) | SQLite Grafana 更简单,对单一管理员或小 homelab 使用还行。多用户并发编辑或任何 HA 设置需要 Postgres 支持的 Grafana。 |
| vs Grafana Cloud | Grafana Cloud 是托管的,包括免费层,自动扩展。Pier 上的自托管对数据平面免费并给你控制。按团队预算和运维食欲选择。 |
| vs Metabase / Superset | Metabase 和 Superset 比 ops 仪表板更针对 BI 分析师。Grafana 是 ops/可观测性的默认;其他用于嵌入式分析。 |
常见问题
SQLite Grafana 有什么错?
我可以从 SQLite Grafana 迁移到 Postgres Grafana 吗?
此 PostgreSQL 也作为我可以查询的数据源吗?
它能扩展多大?
插件兼容性?
备份策略?
我可以与其他服务共享 Postgres 吗?
相关服务
在你的 VPS 上部署
在一个 Pier 栈中将 Grafana 与专用 PostgreSQL 后端配对。PostgreSQL 支持的部署是 Grafana 为生产推荐的 —— 多用户、HA 友好,并避免在多个并发编辑器负载下困扰 Grafana 的 SQLite 写锁问题。
部署此服务 →