Pigsty v4.0.0
Victoria 可观测性,安全加固,JUICE/VIBE 模块,容器支持,Apache-2.0
Victoria 可观测性,安全加固,JUICE/VIBE 模块,容器支持,Apache-2.0
v4.0.0 ·
318 个提交,604 文件变更,+118,655 / -327,552 行,发布页面: https://github.com/pgsty/pigsty/releases/tag/v4.0.0
亮点特性
- 可观测性革命:Prometheus → VictoriaMetrics(10x 性能提升),Loki + Promtail → VictoriaLogs + Vector
- 安全加固:自动生成强密码、etcd RBAC、防火墙/SELinux 模式、权限收紧、Nginx Basic Auth
- 容器支持:支持在 Docker 容器中运行 Pigsty 本身
- 新增模块:JUICE,提供将 PG 挂载为文件系统并进行 PITR 的能力
- 新增模块:VIBE,提供 Claude Code、JupyterLab、VS Code Server、Node.js 的配置与可观测性
- 数据库管理:
pg_databasesstate(create/absent/recreate)、strategy瞬间克隆数据库 - PITR 与分叉:
/pg/bin/pg-forkCoW 瞬间克隆、pg-pitr增强支持 PITR 前备份 - 高可用增强:
pg_rto_plan提供四档 RTO 预置参数(fast/norm/safe/wide),pg_crontab定时任务 - 多云 Terraform:AWS、Azure、GCP、Hetzner、DigitalOcean、Linode、Vultr、腾讯云模板
- 许可证变更:AGPL-3.0 → Apache-2.0
基础设施软件包更新
MinIO 开始使用 pgsty/minio fork RPM/DEB
| 软件包 | 版本 | 软件包 | 版本 |
|---|---|---|---|
| victoria-metrics | 1.134.0 | victoria-logs | 1.43.1 |
| vector | 0.52.0 | grafana | 12.3.1 |
| alertmanager | 0.30.1 | etcd | 3.6.7 |
| duckdb | 1.4.4 | pg_exporter | 1.1.2 |
| pgbackrest_exporter | 0.22.0 | blackbox_exporter | 0.28.0 |
| node_exporter | 1.10.2 | minio | 20251203 |
| pig | 1.0.0 | claude | 2.1.19 |
| opencode | 1.1.34 | uv | 0.9.26 |
| asciinema | 3.1.0 | prometheus | 3.9.1 |
| pushgateway | 1.11.2 | juicefs | 1.4.0 |
| code-server | 4.100.2 | caddy | 2.10.2 |
| hugo | 0.154.5 | cloudflared | 2026.1.1 |
| headscale | 0.27.1 |
新增模块
- JUICE 模块:JuiceFS 分布式文件系统,使用 PostgreSQL 作为元数据引擎,支持利用 PITR 恢复文件系统
- VIBE 模块:AI 辅助编程沙箱环境(整合了 Code-Server、JupyterLab、Node.js 与 Claude Code)
- Code-Server:浏览器中的 VS Code
- JupyterLab:交互式计算环境
- Node.js:JavaScript 运行时环境
- Claude Code:AI 编程助手 CLI 配置,内置 OpenTelemetry 可观测性
PostgreSQL 扩展
新扩展: pg_textsearch 0.4.0, pg_clickhouse 0.1.3, pg_ai_query 0.1.1, etcd_fdw, pg_ttl_index 0.1.0, pljs 1.0.4, pg_retry 1.0.0, pg_weighted_statistics 1.0.0, pg_enigma 0.5.0, pglinter 1.0.1, documentdb_extended_rum 0.109, mobilitydb_datagen 1.3.0
重要更新:timescaledb 2.24.0, pg_search 0.21.4, citus 14.0.0, documentdb 0.109, age 1.7.0, pg_duckdb 1.1.1, vchord 1.0.0, vchord_bm25 0.3.0, pg_biscuit 2.2.2, pg_anon 2.5.1, wrappers 0.5.7, pg_vectorize 0.26.0, pg_session_jwt 0.4.0, pg_partman 5.4.0, pgmq 1.9.0, pg_bulkload 3.1.23, pg_timeseries 0.2.0, pg_convert 0.1.0, pgBackRest 2.58
破坏性变更
可观测性栈
| 旧组件 | 新组件 |
|---|---|
| Prometheus | VictoriaMetrics |
| Loki | VictoriaLogs |
| Promtail | Vector |
参数变更
| 移除 | 替代 |
|---|---|
node_disable_firewall |
node_firewall_mode (off/none/zone) |
node_disable_selinux |
node_selinux_mode (disabled/permissive/enforcing) |
pg_pwd_enc |
已移除,统一使用 scram-sha-256 |
infra_pip_packages |
node_pip_packages |
code_home/jupyter_home |
vibe_data |
默认值变更
| 参数 | 变化 |
|---|---|
grafana_clean |
true → false |
effective_io_concurrency |
1000 → 200 |
install.yml |
重命名为 deploy.yml |
可观测性
- 使用全新的 VictoriaMetrics 替代 Prometheus,用几分之一的资源实现数倍的性能
- 使用全新的日志收集方案:VictoriaLogs + Vector,取代 Promtail + Loki
- 统一调整了所有组件的日志格式,PG 日志使用 UTC 时间戳(log_timezone)
- 调整了 PostgreSQL 日志的轮换方式,使用按周循环截断日志轮转模式
- 在 PG 日志中记录超过 1MB 的临时文件分配,在特定模版中启用 PG 17/18 日志新参数
- 新增了 Nginx / Syslog / PG CSV / Pgbackrest / Grafana / Redis / etcd / MinIO 等日志的 Vector 解析配置
- 注册数据源现在会在所有 Infra 节点上进行,Victoria 数据源将自动注册入 Grafana
- 新增
grafana_pgurl参数,允许指定 Grafana 使用 PG 作为后端存储元数据库 - 新增
grafana_view_password参数,指定 Grafana Meta 数据源使用的密码 pgbackrest_exporter的默认选项现在设置 120 秒的内部缓存间隔(原本为 600s)grafana_clean参数的默认值现在由true改为false,即默认不清除- 新增指标收集器
pg_timeline,收集更实时的时间线指标pg_timeline_id pg_exporter更新至 1.1.2,新增pg_timeline采集器,修复大量历史遗留问题- 新增
node-vector仪表盘,监控 Vector 日志收集器状态 - 新增
node-juice仪表盘,监控 JuiceFS 分布式文件系统状态 - 新增
claude-code仪表盘,监控 Claude Code AI 编程助手使用情况 - PGSQL Cluster/Instance 仪表盘新增版本横幅显示
- 所有仪表盘使用 compact JSON 格式,大幅减少文件体积
接口改进
install.yml剧本现在重命名为deploy.yml以更符合语义- 新增
vibe.yml剧本,用于部署 VIBE AI 编程沙箱环境 pg_databases数据库制备功能改进- 添加删库能力:可以使用
state字段指定create,absent,recreate三种状态 - 添加克隆能力:数据库定义中使用
strategy参数指定克隆方法 - 支持较新版本引入的 locale 配置参数:
locale_provider,icu_locale,icu_rules,builtin_locale - 支持
is_template参数,将数据库标记为模板数据库 - 添加了更多类型检查,避免了字符类参数的注入
- 允许在 extension 中指定
state: absent以删除扩展
- 添加删库能力:可以使用
pg_users用户制备功能改进,新增参数admin,类似roles,但是带有ADMIN OPTION权限可以转授pg_hba支持order字段,允许指定 HBA 规则的排序优先级,支持 IPv6 的 localhost 访问- 新增
infra_extra_services参数用于首页额外服务入口导航
参数优化
pg_io_method参数:auto, sync, worker, io_uring 四种方式可选,默认 workermaintenance_io_concurrency设置为 100(如果使用 SSD)effective_io_concurrency从 1000 减小为 200file_copy_method参数为 PG18 默认设置为clone,提供瞬间克隆数据库的能力idle_replication_slot_timeout默认 7d,crit 模板 3dlog_lock_failures:oltp, crit 模版开启track_cost_delay_timing:olap, crit 模版开启log_connections:oltp/olap 开启认证日志,crit 开启全部日志- 新增
pg_rto_plan参数,整合 Patroni 与 HAProxy 的 RTO 相关配置(fast/norm/safe/wide) pg_crontab参数:为 postgres dbsu 配置定时任务- 对于 PG17+,如果
pg_checksums开关关闭,在 Patroni 初始化集群时显式禁用校验和 - Crit 模板启用 Patroni 严格同步模式
- PITR 默认
archive_mode改为preserve,确保恢复后保留归档能力 pg-pitr支持恢复前自动备份数据- 修复了
duckdb.allow_community_extensions总是生效的问题 - 允许通过
node_firewall_intranet指定 HBA 信任的 “内网网段” - 现在 pg_hba 与 pgbouncer_hba 支持 IPv6 的 localhost 访问
架构改进
- 在 Infra 节点上,设置固定的
/infra软连接指向 Infra 数据目录/data/infra - 现在 Infra 的数据默认放置于
/data/infra目录下,这使得在容器中使用更为便利 - 本地软件仓库现在放置于
/data/nginx/pigsty,/www现在作为软链接指向/data/nginx确保兼容 - DNS 解析记录现放置于 dnsmasq 专属的
/etc/dnsmasq.d/pigsty目录,并保留原子发布,兼容 SELinux 与 AppArmor - 默认首页域名从
h.pigsty更名为i.pigsty,新增中文首页支持 - 新增了
/pg/bin/pg-fork脚本,用于快速创建 CoW 副本数据库实例 - 调整
/pg/bin/pg-pitr脚本,现在可以用于实例级别的 PITR 恢复,支持恢复前自动备份 - 新增
/pg/bin/pg-drop-role脚本,用于安全删除用户角色 - 新增
bin/pgsql-ext脚本,用于安装 PostgreSQL 扩展 - 恢复
pg-vacuum和pg-repack脚本 - 新增剧本
juice.yml:部署 JuiceFS 分布式文件系统实例 - 新增剧本
vibe.yml:部署 VIBE AI 编程沙箱环境(含 Code-Server、JupyterLab、Claude Code) - 显式安装 cron/cronie 包,确保定时任务功能在最小化安装的系统上可用
- UV Python 包管理器从
infra模块迁移至node模块,新增node_uv_env参数指定虚拟环境路径 pg_remove/pg_pitr移除 etcd 元数据的任务,现在不再依赖 admin_ip 管理节点,而在 etcd 集群上执行- 36 节点仿真模板 simu 简化为 20 节点的版本
- 适配上游变化,移除 PGDG sysupdate 仓库,移除 EL 系统上所有 llvmjit 的相关包
- 为 EPEL 10 / PGDG 9/10 仓库使用操作系统完整版本号(
major.minor) - 允许在仓库定义中指定
meta参数,覆盖 yum 仓库的定义元数据 - 确保 Vagrant libvirt 模板默认带有 128GB 磁盘,以 xfs 挂载于
/data - 确保 pgbouncer 不再将
0.0.0.0监听地址修改为* - 新增 10 节点、Citus 等 Vagrant 配置模板
- 恢复 EL7 系统兼容性支持
- 多云 Terraform 模板:AWS、Azure、GCP、Hetzner、DigitalOcean、Linode、Vultr、腾讯云
安全改进
configure现在支持-g参数自动生成随机强密码,避免使用默认密码带来的安全隐患- 更改了 MinIO 模块的默认密码,避免与众所周知的默认密码冲突
- 移除
node_disable_firewall,新增node_firewall_mode,支持 off, none, zone 三种模式 - 移除
node_disable_selinux,新增node_selinux_mode,支持 disabled, permissive, enforcing 三种模式 - 为 HAProxy、Nginx、DNSMasq、Redis 等组件配置了正确的 SELinux 上下文
- 启用了针对 etcd 的 RBAC,每个集群现在只能管理自己的 PostgreSQL 数据库集群
- etcd root 密码现在放置于
/etc/etcd/etcd.pass文件中,仅对管理员可读 - 将
admin_ip添加到 Patroni API 允许访问的 IP 列表白名单中 - 总是创建 admin 系统用户组,patronictl 配置收紧为仅限 admin 组用户访问
- 新增
node_admin_sudo参数,允许指定/调整数据库管理员的 sudo 权限模式(all/nopass) - 收回了所有非 root 用户对可执行脚本的拥有权限
- 新增 Nginx Basic Auth 支持,可以为 Nginx Server 设置可选的 HTTP Basic Auth
- 修复 ownca 证书有效期问题,确保了 Chrome 可以识别自签名证书
- 新增
vip_auth_pass参数用于 VRRP 认证 - 修复了若干
ansible copy content字段为空时报错的问题 - 修复了
pg_pitr中遗留的一些问题,确保 Patroni 集群恢复时没有竞态条件 - 使用
mode 0700保护files/pki/ca目录
问题修复
- 修复 ownca 证书有效期 Chrome 兼容性问题
- 修复 Vector 0.52 syslog_raw 解析问题
- 修复 pg_pitr 多副本 clonefrom 时序问题
- 修复 Ansible SELinux dnsmasq 竞态条件
- 修复 EL9 aarch64 patroni & llvmjit 问题
- 修复 Debian groupadd 路径问题
- 修复空 sudoers 文件生成问题
- 修复 pgbouncer pid 路径(
/run/postgresql) - 修复
duckdb.allow_community_extensions始终生效问题 - 因上游问题隐藏 EL8 上的 pg_partman 扩展
- 修复 HAProxy 服务模板变量路径
- 修复 Redis remove 任务变量名
- 移除 MinIO reload handler 无效处理器
- 修正 vmetrics_port 默认值为 8428
- 修复 pg-failover-callback 脚本处理所有 Patroni 回调事件
- 修复 pg-vacuum 事务块处理逻辑
- 添加 PG16+ 并行逻辑复制支持
- 修复 FerretDB 证书配置和服务重启策略
- 修正 Polar Exporter 监控指标类型定义
- 修复代理环境变量未传递问题
- 修复移除模式下 postgres 服务配置
- 更新 Docker 默认数据目录路径
- 修复 EL10 系统上的缓存问题
- 修复 etcd/MinIO 移除时 systemd 服务和 DNS 条目清理
新增参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
node_firewall_mode |
enum | none (v4.0) | 防火墙模式:off/none/zone(v4.1 起默认 zone) |
node_selinux_mode |
enum | permissive | SELinux 模式 |
node_firewall_intranet |
string | - | HBA 信任的内网网段 |
node_admin_sudo |
enum | nopass | 管理员 sudo 权限级别 |
pg_io_method |
enum | worker | I/O 方法:auto/sync/worker/io_uring |
pg_rto_plan |
dict | - | RTO 预设:fast/norm/safe/wide |
pg_crontab |
list | [] | postgres dbsu 定时任务 |
vip_auth_pass |
string | - | VRRP 认证密码 |
grafana_pgurl |
string | - | Grafana PG 后端连接字符串 |
grafana_view_password |
string | DBUser.Viewer | Grafana Meta 数据源密码 |
infra_extra_services |
list | [] | 首页额外服务入口 |
juice_cache |
path | /data/juice | JuiceFS 共享缓存目录 |
juice_instances |
dict | {} | JuiceFS 实例定义 |
vibe_data |
path | /fs | VIBE 工作空间目录 |
code_enabled |
bool | true | 是否启用 Code-Server |
code_port |
port | 8443 | Code-Server 监听端口 |
code_data |
path | /data/code | Code-Server 数据目录 |
code_password |
string | Vibe.Coding | Code-Server 登录密码 |
code_gallery |
enum | openvsx | 扩展市场:openvsx/microsoft |
jupyter_enabled |
bool | true | 是否启用 JupyterLab |
jupyter_port |
port | 8888 | JupyterLab 监听端口 |
jupyter_data |
path | /data/jupyter | JupyterLab 数据目录 |
jupyter_password |
string | Vibe.Coding | JupyterLab 登录 Token |
jupyter_venv |
path | /data/venv | Python 虚拟环境路径 |
claude_enabled |
bool | true | 是否启用 Claude Code 配置 |
claude_env |
dict | {} | Claude Code 额外环境变量 |
nodejs_enabled |
bool | true | 是否启用 Node.js 安装 |
nodejs_registry |
string | '' | npm registry,自动配置中国镜像 |
node_uv_env |
path | /data/venv | 节点 UV 虚拟环境路径,空则跳过 |
node_pip_packages |
string | '' | UV 虚拟环境中安装的 pip 包 |
兼容性
| 操作系统 | x86_64 | aarch64 |
|---|---|---|
| EL 8/9/10 | ✅ | ✅ |
| Debian 11/12/13 | ✅ | ✅ |
| Ubuntu 22.04/24.04 | ✅ | ✅ |
PostgreSQL: 13, 14, 15, 16, 17, 18