这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

配置模板

开箱即用的配置模板,针对具体场景的配置示例,以及配置文件的详细解释。

1 - 配置总览

开箱即用的配置模板,针对具体场景的配置示例,以及配置文件的详细解释。

Pigsty 提供了一系列配置模板,覆盖从开发测试到生产部署的各种场景。在 configure 过程中使用 -c <conf> 参数指定配置模板。

./configure                     # 默认使用 meta.yml 配置模板
./configure -c meta             # 显式使用 meta.yml 单节点模板
./configure -c rich             # 功能丰富的单节点模板,包含所有扩展与 MinIO
./configure -c slim             # 精简安装模板,不安装监控基础设施

# 使用不同的数据库内核
./configure -c pgsql            # 原生 PostgreSQL 内核 (13~18)
./configure -c citus            # Citus 分布式高可用集群 (14~17)
./configure -c mssql            # Babelfish 内核,SQL Server 协议兼容 (15)
./configure -c polar            # PolarDB PG 内核,Aurora/RAC 风格 (15)
./configure -c ivory            # IvorySQL 内核,Oracle 语法兼容 (18)
./configure -c mysql            # OpenHalo 内核,MySQL 协议兼容 (14)
./configure -c pgtde            # Percona PostgreSQL,透明数据加密 (18)
./configure -c oriole           # OrioleDB 内核,OLTP 增强 (17)
./configure -c supabase         # 配置 Supabase 自托管 PostgreSQL (15~18)
./configure -c mongo            # FerretDB/DocumentDB MongoDB 协议兼容

# 使用多节点高可用模板
./configure -c ha/dual          # 双节点高可用模板
./configure -c ha/trio          # 三节点标准高可用模板
./configure -c ha/full          # 四节点完整功能模板
./configure -c ha/safe          # 安全加固配置模板

单节点模板

单节点配置模板,适用于单机安装 Pigsty:

模板说明GitHub
meta默认模板,单节点在线安装,包含完整基础设施conf/meta.yml
rich功能丰富模板,启用本地软件源、MinIO、更多扩展示例conf/rich.yml
slim精简安装模板,不部署监控基础设施,直接安装 PostgreSQLconf/slim.yml
bare最精简配置模板,最小必需参数集合conf/demo/bare.yml
pitr云端对象存储 PITR 备份配置模板conf/pitr.yml
infra仅安装基础设施,不含 PostgreSQL 与 etcdconf/demo/infra.yml

多节点模板

生产环境多机部署的多节点高可用配置模板,位于 ha/ 子目录:

模板节点数说明GitHub
dual2双节点半高可用部署conf/ha/dual.yml
trio3三节点标准高可用部署conf/ha/trio.yml
full4四节点完整功能演示环境conf/ha/full.yml
safe4安全加固的高可用配置模板conf/ha/safe.yml

内核模板

使用不同 PostgreSQL 内核分支变体的配置模板,全部为单节点演示模板:

模板PG 内核PG 版本说明GitHub
pgsqlPostgreSQL13~18原生 PostgreSQL 内核conf/pgsql.yml
citusCitus14~17分布式高可用 PostgreSQLconf/citus.yml
mssqlBabelfish15SQL Server 协议兼容conf/mssql.yml
polarPolarDB PG15Aurora/RAC 风格存算分离conf/polar.yml
ivoryIvorySQL18Oracle 语法兼容conf/ivory.yml
mysqlOpenHalo14MySQL 协议兼容conf/mysql.yml
pgtdePercona TDE18透明数据加密 (pg_tde)conf/pgtde.yml
orioleOrioleDB17OLTP 增强,无膨胀存储引擎conf/oriole.yml
mongoFerretDB15~17MongoDB 协议兼容conf/mongo.yml

演示模板

用于演示和展示的配置模板,位于 demo/ 子目录:

模板说明GitHub
demoPigsty 公开演示站点配置conf/demo/demo.yml
minio四节点多盘高可用 MinIO 集群conf/demo/minio.yml

应用模板

用于运行 Docker 应用的配置模板,位于 app/ 子目录:

模板说明GitHub
supabaseSupabase 自托管开源 BaaSconf/supabase.yml
difyDify AI 应用开发平台conf/app/dify.yml
odooOdoo 开源 ERP 系统conf/app/odoo.yml
electricElectric 实时同步引擎conf/app/electric.yml
maybeMaybe 个人财务管理conf/app/maybe.yml
teableTeable 无代码数据库conf/app/teable.yml
registryDocker Registry 镜像代理conf/app/registry.yml

其他模板

其他用于特定场景的配置模板,位于 misc/ 子目录:

模板说明GitHub
oss开源版离线软件包构建环境conf/build/oss.yml
pro专业版多版本构建环境conf/build/pro.yml
simu36节点生产环境仿真配置conf/simu.yml

2 - 单节点模板

单节点配置模板,适用于单机安装 Pigsty

单节点配置模板适用于在单台服务器上安装 Pigsty。

模板说明
meta默认模板,单节点在线安装,包含完整基础设施
rich功能丰富模板,启用本地软件源、MinIO、更多扩展示例
slim精简安装模板,不部署监控基础设施,直接安装 PostgreSQL
bare最精简配置模板,最小化必需配置
pitr云端对象存储 PITR 备份配置模板
infra仅基础设施配置模板,不含 PostgreSQL

2.1 - meta

核心配置文件,Pigsty默认使用的单节点安装配置模板,带有较完善的关键配置参数说明,与最小可用功能集。

meta 配置模板是 Pigsty 默认使用的模板,它的目标是在当前单节点上完成 Pigsty 核心功能 —— PostgreSQL 的部署。

为了实现最好的兼容性,meta 模板仅下载安装包含 最小必需 软件集合,以便在所有操作系统发行版与芯片架构上实现这一目标。


配置概览

  • 配置名称: meta
  • 节点数量: 单节点
  • 配置说明:Pigsty 默认使用的单节点安装配置模板,带有较完善的关键配置参数说明,与最小可用功能集合。
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:richdemo

使用方式:此配置模板为 Pigsty 默认配置模板,因此在 configure 时无需显式指定 -c meta 参数:

./configure [-i <primary_ip>]

例如,如果您想要安装 PG 17,而非默认的 PostgreSQL 18,可以在 configure 中使用 -v 参数:

./configure -v 17   # or 16,15,14,13....

配置内容

源文件地址:pigsty/conf/meta.yml

all:

  children:

    #----------------------------------------------#
    # PGSQL : pg-meta 单节点 PostgreSQL 集群
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary } # <---- 主实例,可读可写
        #x.xx.xx.xx: { pg_seq: 2, pg_role: replica } # <---- 从库实例,只读流量
        #x.xx.xx.xy: { pg_seq: 3, pg_role: offline } # <---- 离线实例,ETL/交互查询
      vars:
        pg_cluster: pg-meta

        # 安装并加载扩展: https://doc.pgsty.com/pgsql/extension
        pg_extensions: [ postgis, pgvector ]

        # 定义业务用户/角色 : https://doc.pgsty.com/pgsql/user
        pg_users:
          - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin   ] ,comment: pigsty admin user }
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer  }

        # 定义业务数据库 : https://doc.pgsty.com/pgsql/db
        pg_databases:
          - name: meta
            baseline: cmdb.sql
            comment: "pigsty meta database"
            schemas: [pigsty]
            extensions: [ postgis, vector ]

        # 定义 HBA 规则 : https://doc.pgsty.com/pgsql/hba
        pg_hba_rules:
          - { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }

        # 定义备份策略: https://doc.pgsty.com/pgsql/backup
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ] # 每天凌晨1点全量备份

        # 定义(可选)L2 VIP 绑定到主库
        #pg_vip_enabled: true
        #pg_vip_address: 10.10.10.2/24
        #pg_vip_interface: eth1


    #----------------------------------------------#
    # INFRA : 基础设施组件
    #----------------------------------------------#
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }
      vars:
        repo_enabled: false   # 单节点模式禁用本地软件源构建

    #----------------------------------------------#
    # ETCD : 高可用 DCS 服务
    #----------------------------------------------#
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd
        etcd_safeguard: false             # 是否防止误删除运行中的etcd实例?

    #----------------------------------------------#
    # MINIO : 可选的备份存储 (默认禁用)
    #----------------------------------------------#
    #minio:
    #  hosts:
    #    10.10.10.10: { minio_seq: 1 }
    #  vars:
    #    minio_cluster: minio
    #    minio_users:
    #      - { access_key: pgbackrest  ,secret_key: S3User.Backup ,policy: pgsql }
    #      - { access_key: s3user_meta ,secret_key: S3User.Meta   ,policy: meta  }
    #      - { access_key: s3user_data ,secret_key: S3User.Data   ,policy: data  }

    #----------------------------------------------#
    # DOCKER & APP : Docker 与应用程序
    #----------------------------------------------#
    # 使用 ./app.yml 启动 pgadmin (http://10.10.10.10:8885 admin@pigsty.cc / pigsty)
    app:
      hosts: { 10.10.10.10: {} }
      vars:
        docker_enabled: true                # 使用 ./docker.yml 启用 Docker
        app: pgadmin                        # 指定默认安装的应用
        apps:
          pgadmin:
            conf:
              PGADMIN_DEFAULT_EMAIL: admin@pigsty.cc
              PGADMIN_DEFAULT_PASSWORD: pigsty


  #==============================================================#
  # 全局参数
  #==============================================================#
  vars:

    #----------------------------------------------#
    # INFRA 基础设施参数
    #----------------------------------------------#
    version: v4.0.0                   # Pigsty 版本号
    admin_ip: 10.10.10.10             # 管理节点 IP 地址
    region: china                     # 上游镜像区域: default|china|europe
    proxy_env:                        # 下载软件包时的全局代理环境变量
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
      # http_proxy:  # 在此设置您的代理: 例如 http://user:pass@proxy.xxx.com
    infra_portal:                     # 通过 Portal 暴露的基础设施服务
      home : { domain: i.pigsty }
      pgadmin : { domain: adm.pigsty ,endpoint: "${admin_ip}:8885" }
      #minio  : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

    #----------------------------------------------#
    # NODE 节点参数
    #----------------------------------------------#
    nodename_overwrite: false             # 单节点模式不覆盖主机名
    node_tune: oltp                       # 节点调优规格: oltp,olap,tiny,crit
    node_etc_hosts: [ '${admin_ip} i.pigsty sss.pigsty' ]
    node_repo_modules: 'node,infra,pgsql' # 直接将这些仓库添加到单节点
    node_repo_remove: true                # 移除 Pigsty 管理节点上的现有软件源

    #----------------------------------------------#
    # PGSQL PostgreSQL 参数
    #----------------------------------------------#
    pg_version: 18                      # 默认 PostgreSQL 版本
    pg_conf: oltp.yml                   # PostgreSQL 调优模板: {oltp,olap,tiny,crit}.yml
    pg_safeguard: false                 # 是否防止误删除运行中的 PostgreSQL 实例?
    pg_packages: [ pgsql-main, pgsql-common ]  # PG 内核和常用工具
    #pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]

    #----------------------------------------------#
    # 备份配置 (可选 MinIO)
    #----------------------------------------------#
    # 如需使用 MinIO 作为备份仓库,请取消下方注释
    #pgbackrest_method: minio
    #pgbackrest_repo:
    #  local:
    #    path: /pg/backup
    #    retention_full_type: count
    #    retention_full: 2
    #  minio:
    #    type: s3
    #    s3_endpoint: sss.pigsty
    #    s3_region: us-east-1
    #    s3_bucket: pgsql
    #    s3_key: pgbackrest
    #    s3_key_secret: S3User.Backup
    #    ...

    #----------------------------------------------#
    # 密码配置 : https://doc.pgsty.com/config/security
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

meta 模板是 Pigsty 的默认入门配置,专为快速上手设计。

适用场景

  • 首次体验 Pigsty 的用户
  • 开发测试环境的快速部署
  • 单机运行的小型生产环境
  • 作为更复杂部署的基础模板

关键特性

  • 在线安装模式,不构建本地软件源(repo_enabled: false
  • 默认安装 PostgreSQL 18,带有 postgispgvector 扩展
  • 包含完整的监控基础设施(Grafana、Prometheus、Loki 等)
  • 预置 Docker 与 pgAdmin 应用示例
  • MinIO 备份存储默认禁用,可按需启用

注意事项

  • 默认密码为示例密码,生产环境务必修改
  • 单节点模式的 etcd 无高可用保障,适合开发测试
  • 如需构建本地软件源,请使用 rich 模板

2.2 - rich

功能丰富的单节点配置,构建本地软件源,下载所有扩展,启用 MinIO 备份,预置完整示例

配置模板 richmeta 的增强版本,专为需要完整功能体验的用户设计。

如果您希望构建本地软件源、使用 MinIO 存储备份、运行 Docker 应用,或需要预置业务数据库,可以使用此模板。


配置概览

  • 配置名称: rich
  • 节点数量: 单节点
  • 配置说明:功能丰富的单节点配置,在 meta 基础上增加本地软件源、MinIO 备份、完整扩展、Docker 应用示例
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64(ARM 部分扩展不可用)
  • 相关配置:metademo

此模板相比 meta 的主要增强:

  • 构建本地软件源(repo_enabled: true),下载所有 PG 扩展
  • 启用单节点 MinIO 作为 PostgreSQL 备份存储
  • 预置 TimescaleDB、pgvector、pg_wait_sampling 等扩展
  • 包含详细的用户/数据库/服务定义注释示例
  • 添加 Redis 主从实例示例
  • 预置 pg-test 三节点高可用集群配置存根

启用方式:

./configure -c rich [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/rich.yml

all:

  children:

    #----------------------------------------------#
    # PGSQL : pg-meta 单节点 PostgreSQL 集群
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta

        # 安装并加载扩展
        pg_extensions: [ postgis, timescaledb, pgvector, pg_wait_sampling ]
        pg_libs: 'timescaledb, pg_stat_statements, auto_explain, pg_wait_sampling'

        # 定义业务用户(含完整属性注释示例)
        pg_users:
          - name: dbuser_meta               # 必填:用户名
            password: DBUser.Meta           # 可选:密码,支持 scram-sha-256 哈希或明文
            login: true                     # 可选:是否允许登录,默认 true
            superuser: false                # 可选:是否超级用户,默认 false
            createdb: false                 # 可选:是否可创建数据库,默认 false
            createrole: false               # 可选:是否可创建角色,默认 false
            inherit: true                   # 可选:是否继承角色权限,默认 true
            replication: false              # 可选:是否可复制,默认 false
            bypassrls: false                # 可选:是否绕过行级安全,默认 false
            pgbouncer: true                 # 可选:是否加入 pgbouncer 用户列表,默认 false
            connlimit: -1                   # 可选:连接数限制,默认 -1 不限制
            expire_in: 3650                 # 可选:N 天后过期(覆盖 expire_at)
            expire_at: '2030-12-31'         # 可选:过期时间戳(被 expire_in 覆盖)
            comment: pigsty admin user      # 可选:用户注释
            roles: [dbrole_admin]           # 可选:所属角色
            parameters: {}                  # 可选:用户级参数
            pool_mode: transaction          # 可选:pgbouncer 池模式
            pool_connlimit: -1              # 可选:pgbouncer 连接限制
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly], comment: read-only viewer }

        # 定义业务数据库(含完整属性注释示例)
        pg_databases:
          - name: meta                      # 必填:数据库名
            baseline: cmdb.sql              # 可选:初始化 SQL 脚本
            schemas: [ pigsty ]             # 可选:额外创建的 schema
            extensions:                     # 可选:安装的扩展
              - vector
              - postgis
              - timescaledb
              - { name: pg_wait_sampling, schema: monitor }
            comment: pigsty meta database   # 可选:数据库注释
            #pgbouncer: true                # 可选:是否加入 pgbouncer,默认 true
            #owner: postgres                # 可选:所有者,默认 postgres
            #template: template1            # 可选:模板库,默认 template1
            #encoding: UTF8                 # 可选:编码,默认 UTF8
            #locale: C                      # 可选:区域设置,默认 C
            #tablespace: pg_default         # 可选:默认表空间
            #revokeconn: false              # 可选:撤销公共连接权限
            #connlimit: -1                  # 可选:连接数限制
            #pool_mode: transaction         # 可选:pgbouncer 池模式

        # 定义 HBA 规则
        pg_hba_rules:
          - { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access' }

        # 备份策略
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # L2 VIP(可选)
        #pg_vip_enabled: true
        #pg_vip_address: 10.10.10.2/24
        #pg_vip_interface: eth1

    #----------------------------------------------#
    # 高可用集群存根示例(需取消注释)
    #----------------------------------------------#
    #pg-test:
    #  hosts:
    #    10.10.10.11: { pg_seq: 1, pg_role: primary }
    #    10.10.10.12: { pg_seq: 2, pg_role: replica }
    #    10.10.10.13: { pg_seq: 3, pg_role: replica, pg_offline_query: true }
    #  vars:
    #    pg_cluster: pg-test
    #    pg_users:  [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
    #    pg_databases: [{ name: test }]
    #    pg_vip_enabled: true
    #    pg_vip_address: 10.10.10.3/24
    #    pg_vip_interface: eth1

    #----------------------------------------------#
    # INFRA : 基础设施(构建本地软件源)
    #----------------------------------------------#
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }
      vars:
        repo_enabled: true    # 构建本地软件源
        repo_extra_packages: [ pg18-main ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]

    #----------------------------------------------#
    # ETCD : DCS 服务
    #----------------------------------------------#
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd
        etcd_safeguard: false

    #----------------------------------------------#
    # MINIO : 备份存储
    #----------------------------------------------#
    minio:
      hosts:
        10.10.10.10: { minio_seq: 1 }
      vars:
        minio_cluster: minio
        minio_users:
          - { access_key: pgbackrest  ,secret_key: S3User.Backup ,policy: pgsql }
          - { access_key: s3user_meta ,secret_key: S3User.Meta   ,policy: meta  }
          - { access_key: s3user_data ,secret_key: S3User.Data   ,policy: data  }

    #----------------------------------------------#
    # DOCKER & APP
    #----------------------------------------------#
    app:
      hosts: { 10.10.10.10: {} }
      vars:
        docker_enabled: true
        app: pgadmin
        apps:
          pgadmin:
            conf:
              PGADMIN_DEFAULT_EMAIL: admin@pigsty.cc
              PGADMIN_DEFAULT_PASSWORD: pigsty
          bytebase:
            conf:
              BB_DOMAIN: http://ddl.pigsty
              BB_PGURL: "postgresql://dbuser_bytebase:DBUser.Bytebase@10.10.10.10:5432/bytebase?sslmode=prefer"

    #----------------------------------------------#
    # REDIS 示例
    #----------------------------------------------#
    redis-ms:
      hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
      vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }


  #==============================================================#
  # 全局参数
  #==============================================================#
  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default                   # 使用默认上游镜像

    certbot_sign: false               # 启用 certbot 签发 HTTPS 证书
    certbot_email: your@email.com     # 接收证书过期通知的邮箱
    infra_portal:
      home      : { domain: i.pigsty }
      pgadmin   : { domain: adm.pigsty ,endpoint: "${admin_ip}:8885" }
      bytebase  : { domain: ddl.pigsty ,endpoint: "${admin_ip}:8887" }
      minio     : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

    #----------------------------------------------#
    # NODE
    #----------------------------------------------#
    nodename_overwrite: false
    node_tune: oltp
    node_etc_hosts:
      - '${admin_ip} i.pigsty sss.pigsty'
      - '${admin_ip} adm.pigsty ddl.pigsty repo.pigsty supa.pigsty'
    node_repo_modules: local          # 使用本地软件源
    node_repo_remove: true

    #----------------------------------------------#
    # PGSQL
    #----------------------------------------------#
    pg_version: 18
    pg_conf: oltp.yml
    pg_safeguard: false
    pg_packages: [ pgsql-main, pgsql-common ]

    #----------------------------------------------#
    # BACKUP
    #----------------------------------------------#
    pgbackrest_method: minio          # 使用 MinIO 作为备份存储
    pgbackrest_repo:
      local:
        path: /pg/backup
        retention_full_type: count
        retention_full: 2
      minio:
        type: s3
        s3_endpoint: sss.pigsty
        s3_region: us-east-1
        s3_bucket: pgsql
        s3_key: pgbackrest
        s3_key_secret: S3User.Backup
        s3_uri_style: path
        path: /pgbackrest
        storage_port: 9000
        storage_ca_file: /etc/pki/ca.crt
        block: y                      # 块级增量备份
        bundle: y                     # 小文件打包
        cipher_type: aes-256-cbc      # AES 加密
        cipher_pass: pgBackRest
        retention_full_type: time
        retention_full: 14            # 保留 14 天全量备份

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

rich 模板是 Pigsty 的完整功能展示配置,适合需要深入体验所有功能的用户。

适用场景

  • 需要构建本地软件源的离线环境
  • 需要使用 MinIO 作为 PostgreSQL 备份存储
  • 需要预先规划多个业务数据库和用户
  • 需要运行 Docker 应用(pgAdmin、Bytebase 等)
  • 希望了解配置参数完整用法的学习者

与 meta 的主要区别

  • 启用本地软件源构建(repo_enabled: true
  • 启用 MinIO 存储备份(pgbackrest_method: minio
  • 预装 TimescaleDB、pg_wait_sampling 等额外扩展
  • 包含详细的参数注释,便于理解配置含义
  • 预置高可用集群存根配置(pg-test)

注意事项

  • ARM64 架构部分扩展不可用,请按需调整
  • 构建本地软件源需要较长时间和较大磁盘空间
  • 默认密码为示例密码,生产环境务必修改

2.3 - slim

精简安装配置模板,不部署监控基础设施,直接从互联网安装 PostgreSQL

slim 配置模板提供精简安装能力,在不部署 Infra 监控基础设施的前提下,直接从互联网安装 PostgreSQL 高可用集群。

当您只需要一个可用的数据库实例,不需要监控系统时,可以考虑使用 精简安装 模式。


配置概览

  • 配置名称: slim
  • 节点数量: 双节点
  • 配置说明:精简安装配置模板,不部署监控基础设施
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:dual

启用方式:

./configure -c slim [-i <primary_ip>]

配置生成后,需要将占位 IP 10.10.10.11 修改为实际的从库节点 IP 地址。


配置内容

源文件地址:pigsty/conf/slim.yml

all:
  children:

    # 占位符:infra 组定义但不使用
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }

    # ETCD DCS 服务
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd

    # PostgreSQL 双节点高可用集群
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
        10.10.10.11: { pg_seq: 2, pg_role: replica }
      vars:
        pg_cluster: pg-meta
        pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: vector}]}]
        pg_users:
          - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer for meta database }
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    node_tune: oltp
    pg_conf: oltp.yml

    # 精简安装设置:禁用监控基础设施
    nginx_enabled: false
    dns_enabled: false
    prometheus_enabled: false
    grafana_enabled: false
    pg_exporter_enabled: false
    pgbouncer_exporter_enabled: false
    pg_vip_enabled: false

    # 软件包配置
    repo_modules: infra,node,pgsql
    repo_remove: true
    node_repo_modules: local
    node_repo_remove: true
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
    repo_extra_packages: [ pg18-main ]

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

slim 模板是 Pigsty 的最小化安装配置,专为资源受限或仅需数据库功能的场景设计。

适用场景

  • 仅需要 PostgreSQL 数据库,不需要监控系统
  • 资源有限的小型服务器或边缘设备
  • 嵌入式场景或容器化部署
  • 快速部署测试用的临时数据库

关键特性

  • 禁用所有监控组件(Prometheus、Grafana、Loki 等)
  • 禁用 Nginx 反向代理和 DNS 服务
  • 禁用 PostgreSQL Exporter 和 PgBouncer Exporter
  • 保留核心 PostgreSQL 高可用能力(Patroni + etcd)
  • 最小化软件包下载,加快安装速度

注意事项

  • 精简模式不提供监控能力,无法通过 Grafana 查看数据库状态
  • 如需恢复监控功能,需要重新部署 Infra 模块
  • 生产环境建议使用完整安装模式(metarich

2.4 - bare

Pigsty 最精简的单节点配置,最小必需参数集合

配置模板 bare 是 Pigsty 所需的最精简配置

比这更少的配置模板将无法正常工作。


配置概览

./configure -c bare [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/demo/bare.yml

all:
  children:
    infra:   { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:    { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
    pg-meta: { hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }, vars: { pg_cluster: pg-meta } }
  vars:
    version: v3.2.2
    admin_ip: 10.10.10.10
    region: default

2.5 - pitr

单节点云端对象存储 PITR 配置,使用远程S3进行持续备份与恢复

配置模板 pitr 演示了在云上如何在只有单个 EC2 / ECS 服务器的情况下, 使用对象存储对数据库进行兜底性容灾。


配置概览

./configure -c pitr [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/pitr.yml

# This 1-node template will use an external S3 (OSS) as backup storage
# which provide a basic level RTO / PRO in case of single point failure
# terraform template: terraform/spec/aliyun-meta-s3.tf

all:

  #==============================================================#
  # Clusters, Nodes, and Modules
  #==============================================================#
  children:

    #----------------------------------#
    # infra: monitor, alert, repo, etc..
    #----------------------------------#
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }

    #----------------------------------#
    # etcd cluster for HA postgres DCS
    #----------------------------------#
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd

    #----------------------------------#
    # minio (OPTIONAL backup repo)
    #----------------------------------#
    #minio:
    #  hosts:
    #    10.10.10.10: { minio_seq: 1 }
    #  vars:
    #    minio_cluster: minio

    #----------------------------------#
    # pgsql (singleton on current node)
    #----------------------------------#
    # this is an example single-node postgres cluster with postgis & timescaledb installed, with one biz database & two biz users
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta                 # required identity parameter, usually same as group name

        # define business databases here: https://pigsty.io/docs/pgsql/config/db/
        pg_databases:                       # define business databases on this cluster, array of database definition
          - name: meta                      # REQUIRED, `name` is the only mandatory field of a database definition
            baseline: cmdb.sql              # optional, database sql baseline path, (relative path among ansible search path, e.g: files/)
            schemas: [ pigsty ]             # optional, additional schemas to be created, array of schema names
            extensions:                     # optional, additional extensions to be installed: array of `{name[,schema]}`
              - { name: vector }            # install pgvector extension on this database by default
            comment: pigsty meta database   # optional, comment string for this database
            #pgbouncer: true                # optional, add this database to pgbouncer database list? true by default
            #owner: postgres                # optional, database owner, postgres by default
            #template: template1            # optional, which template to use, template1 by default
            #encoding: UTF8                 # optional, database encoding, UTF8 by default. (MUST same as template database)
            #locale: C                      # optional, database locale, C by default.  (MUST same as template database)
            #lc_collate: C                  # optional, database collate, C by default. (MUST same as template database)
            #lc_ctype: C                    # optional, database ctype, C by default.   (MUST same as template database)
            #tablespace: pg_default         # optional, default tablespace, 'pg_default' by default.
            #allowconn: true                # optional, allow connection, true by default. false will disable connect at all
            #revokeconn: false              # optional, revoke public connection privilege. false by default. (leave connect with grant option to owner)
            #register_datasource: true      # optional, register this database to grafana datasources? true by default
            #connlimit: -1                  # optional, database connection limit, default -1 disable limit
            #pool_auth_user: dbuser_meta    # optional, all connection to this pgbouncer database will be authenticated by this user
            #pool_mode: transaction         # optional, pgbouncer pool mode at database level, default transaction
            #pool_size: 64                  # optional, pgbouncer pool size at database level, default 64
            #pool_size_reserve: 32          # optional, pgbouncer pool size reserve at database level, default 32
            #pool_size_min: 0               # optional, pgbouncer pool size min at database level, default 0
            #pool_max_db_conn: 100          # optional, max database connections at database level, default 100
          #- { name: grafana  ,owner: dbuser_grafana  ,revokeconn: true ,comment: grafana primary database }  # define another database

        # define business users here: https://pigsty.io/docs/pgsql/config/user/
        pg_users:                           # define business users/roles on this cluster, array of user definition
          - name: dbuser_meta               # REQUIRED, `name` is the only mandatory field of a user definition
            password: DBUser.Meta           # optional, password, can be a scram-sha-256 hash string or plain text
            login: true                     # optional, can log in, true by default  (new biz ROLE should be false)
            superuser: false                # optional, is superuser? false by default
            createdb: false                 # optional, can create database? false by default
            createrole: false               # optional, can create role? false by default
            inherit: true                   # optional, can this role use inherited privileges? true by default
            replication: false              # optional, can this role do replication? false by default
            bypassrls: false                # optional, can this role bypass row level security? false by default
            pgbouncer: true                 # optional, add this user to pgbouncer user-list? false by default (production user should be true explicitly)
            connlimit: -1                   # optional, user connection limit, default -1 disable limit
            expire_in: 3650                 # optional, now + n days when this role is expired (OVERWRITE expire_at)
            expire_at: '2030-12-31'         # optional, YYYY-MM-DD 'timestamp' when this role is expired  (OVERWRITTEN by expire_in)
            comment: pigsty admin user      # optional, comment string for this user/role
            roles: [dbrole_admin]           # optional, belonged roles. default roles are: dbrole_{admin,readonly,readwrite,offline}
            parameters: {}                  # optional, role level parameters with `ALTER ROLE SET`
            pool_mode: transaction          # optional, pgbouncer pool mode at user level, transaction by default
            pool_connlimit: -1              # optional, max database connections at user level, default -1 disable limit
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly], comment: read-only viewer for meta database }

        # define pg extensions: https://pigsty.io/docs/pgext/
        pg_libs: 'pg_stat_statements, auto_explain' # add timescaledb to shared_preload_libraries
        pg_extensions: [ pgvector ] # available extensions: https://pgext.cloud/zh/list

        # define HBA rules here: https://pigsty.io/docs/pgsql/config/hba/#define-hba
        pg_hba_rules:                       # example hba rules
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes'}

        node_crontab:  # make a full backup on monday 1am, and an incremental backup during weekdays
          - '00 01 * * 1 postgres /pg/bin/pg-backup full'
          - '00 01 * * 2,3,4,5,6,7 postgres /pg/bin/pg-backup'


  #==============================================================#
  # Global Parameters
  #==============================================================#
  vars:

    #----------------------------------#
    # Meta Data
    #----------------------------------#
    version: v3.2.2                   # pigsty version string
    admin_ip: 10.10.10.10             # admin node ip address
    region: default                   # upstream mirror region: default|china|europe
    node_tune: oltp                   # node tuning specs: oltp,olap,tiny,crit
    pg_conf: oltp.yml                 # pgsql tuning specs: {oltp,olap,tiny,crit}.yml
    proxy_env:                        # global proxy env when downloading packages
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
      # http_proxy:  # set your proxy here: e.g http://user:pass@proxy.xxx.com
      # https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
      # all_proxy:   # set your proxy here: e.g http://user:pass@proxy.xxx.com
    infra_portal:                     # domain names and upstream servers
      home         : { domain: h.pigsty }
      grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
      prometheus   : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
      alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
      blackbox     : { endpoint: "${admin_ip}:9115" }
      loki         : { endpoint: "${admin_ip}:3100" }

    #----------------------------------#
    # MinIO Related Options
    #----------------------------------#
    # ADD YOUR AK/SK/REGION/ENDPOINT HERE
    pgbackrest_method: s3             # if you want to use minio as backup repo instead of 'local' fs, uncomment this
    pgbackrest_repo:                  # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
      s3:                             # aliyun oss (s3 compatible) object storage service
        type: s3                      # oss is s3-compatible
        s3_endpoint: oss-cn-beijing-internal.aliyuncs.com
        s3_region: oss-cn-beijing
        s3_bucket: <your_bucket_name>
        s3_key: <your_access_key>
        s3_key_secret: <your_secret_key>
        s3_uri_style: host
        path: /pgbackrest
        bundle: y                     # bundle small files into a single file
        cipher_type: aes-256-cbc      # enable AES encryption for remote backup repo
        cipher_pass: PG.${pg_cluster} # AES encryption password, default is 'pgBackRest'
        retention_full_type: time     # retention full backup by time on minio repo
        retention_full: 14            # keep full backup for last 14 days

    #----------------------------------#
    # Credential: CHANGE THESE PASSWORDS
    #----------------------------------#
    #grafana_admin_username: admin
    grafana_admin_password: pigsty
    #pg_admin_username: dbuser_dba
    pg_admin_password: DBUser.DBA
    #pg_monitor_username: dbuser_monitor
    pg_monitor_password: DBUser.Monitor
    #pg_replication_username: replicator
    pg_replication_password: DBUser.Replicator
    #patroni_username: postgres
    patroni_password: Patroni.API
    #haproxy_admin_username: admin
    haproxy_admin_password: pigsty

    #----------------------------------#
    # Safe Guard
    #----------------------------------#
    # you can enable these flags after bootstrap, to prevent purging running etcd / pgsql instances
    etcd_safeguard: false             # prevent purging running etcd instance?
    pg_safeguard: false               # prevent purging running postgres instance? false by default

    #----------------------------------#
    # Repo, Node, Packages
    #----------------------------------#
    # if you wish to customize your own repo, change these settings:
    repo_modules: infra,node,pgsql
    repo_remove: true                 # remove existing repo on admin node during repo bootstrap
    node_repo_modules: local          # install the local module in repo_upstream for all nodes
    node_repo_remove: true            # remove existing node repo for node managed by pigsty
    repo_packages: [                  # default packages to be downloaded
      node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common #,docker
    ]
    repo_extra_packages: [            # default postgres packages to be downloaded
      pg17-main                       # replace with the following line if you want all extensions
      #pg17-core ,pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-olap ,pg17-feat ,pg17-lang ,pg17-type ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl
    ]
    pg_version: 17                    # default postgres version
    #pg_extensions: [ pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-olap ,pg17-feat ,pg17-lang ,pg17-type ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl ]
...

注意事项

你需要在 pgbackrest_repo 中填入对象存储桶的访问信息。

2.6 - infra

仅安装可观测性基础设施,不包含 PostgreSQL 与 etcd 的专用配置模板

3 - 高可用模板

多节点高可用配置模板,适用于生产环境部署

多节点高可用配置模板,适用于生产环境部署。

模板节点数说明
dual2双节点有限高可用部署
trio3三节点标准高可用部署
full4四节点完整功能演示环境
safe4安全加固的高可用配置模板

3.1 - dual

双节点配置模板,有限高可用部署,允许宕机特定一台服务器。

dual 模板使用双节点部署,实现一主一备的"半高可用"架构。如果您只有两台服务器,这是一个务实的选择。


配置概览

  • 配置名称: dual(位于 ha/dual.yml
  • 节点数量: 双节点
  • 配置说明:两节点有限高可用部署,允许特定一台服务器宕机
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:trioslim

启用方式:

./configure -c ha/dual [-i <primary_ip>]

配置生成后,需要将占位 IP 10.10.10.11 修改为实际的备库节点 IP 地址。


配置内容

源文件地址:pigsty/conf/ha/dual.yml

all:
  children:

    # INFRA 基础设施
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }

    # ETCD DCS 服务(单节点)
    etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

    # MinIO 备份存储(可选)
    #minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    # PostgreSQL 双节点高可用集群
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: replica }   # <--- 备库,运行在管理节点
        10.10.10.11: { pg_seq: 2, pg_role: primary }   # <--- 主库,独立节点
      vars:
        pg_cluster: pg-meta
        pg_databases: [ { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [ { name: vector }] } ]
        pg_users:
          - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer }
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.2/24
        pg_vip_interface: eth1

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    node_tune: oltp
    pg_conf: oltp.yml

    infra_portal:
      home         : { domain: i.pigsty }
      #minio       : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

    # 软件包配置
    pg_version: 18
    repo_modules: infra,node,pgsql
    repo_remove: true
    node_repo_modules: local
    node_repo_remove: true
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
    repo_extra_packages: [ pg18-main ]

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

dual 模板是 Pigsty 的双节点有限高可用配置,专为只有两台服务器的场景设计。

架构说明

  • 节点A (10.10.10.10):管理节点,运行 Infra + etcd + PostgreSQL 备库
  • 节点B (10.10.10.11):数据节点,仅运行 PostgreSQL 主库

故障场景分析

故障节点影响是否自动恢复
节点B 宕机主库切换到节点A自动
节点A etcd 宕机主库继续运行(无 DCS)需人工
节点A pgsql 宕机主库继续运行需人工
节点A 完全宕机主库降级为单机需人工

适用场景

  • 仅有两台服务器的预算受限环境
  • 可接受部分故障场景需要人工介入
  • 作为三节点高可用的过渡方案

注意事项

  • 真正的高可用需要至少三节点(DCS 需要多数派)
  • 建议尽快升级到三节点架构
  • L2 VIP 需要网络环境支持(同一广播域)

3.2 - trio

三节点标准高可用配置模板,允许任意一台服务器宕机。

三节点是实现真正高可用的最小规格。trio 模板使用三节点标准 HA 架构,INFRA、ETCD、PGSQL 三个核心模块均采用三节点部署,允许任意一台服务器宕机。


配置概览

  • 配置名称: trio(位于 ha/trio.yml
  • 节点数量: 三节点
  • 配置说明:三节点标准高可用架构,允许任意一台服务器宕机
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:dualfullsafe

启用方式:

./configure -c ha/trio [-i <primary_ip>]

配置生成后,需要将占位 IP 10.10.10.1110.10.10.12 修改为实际的节点 IP 地址。


配置内容

源文件地址:pigsty/conf/ha/trio.yml

all:
  children:

    #----------------------------------------------#
    # INFRA 三节点高可用基础设施
    #----------------------------------------------#
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }
        10.10.10.11: { infra_seq: 2, repo_enabled: false }
        10.10.10.12: { infra_seq: 3, repo_enabled: false }
      vars:
        patroni_watchdog_mode: off   # 不在基础设施节点启用 watchdog
        docker_enabled: true

    #----------------------------------------------#
    # ETCD 三节点高可用 DCS
    #----------------------------------------------#
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
        10.10.10.11: { etcd_seq: 2 }
        10.10.10.12: { etcd_seq: 3 }
      vars:
        etcd_cluster: etcd
        etcd_safeguard: false
        etcd_clean: true

    #----------------------------------------------#
    # MinIO 备份存储(单节点)
    #----------------------------------------------#
    minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    #----------------------------------------------#
    # PostgreSQL 三节点高可用集群
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
        10.10.10.11: { pg_seq: 2, pg_role: replica }
        10.10.10.12: { pg_seq: 3, pg_role: replica , pg_offline_query: true }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - { name: dbuser_meta , password: DBUser.Meta ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
          - { name: dbuser_view , password: DBUser.View ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer }
        pg_databases:
          - { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [ { name: vector } ] }
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.2/24
        pg_vip_interface: eth1


  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    node_tune: oltp
    pg_conf: oltp.yml

    infra_portal:
      home         : { domain: i.pigsty }
      minio        : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

    # 软件包配置
    pg_version: 18
    repo_modules: infra,node,pgsql
    repo_remove: true
    node_repo_modules: local
    node_repo_remove: true
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
    repo_extra_packages: [ pg18-main ]

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

trio 模板是 Pigsty 的标准高可用配置,提供真正的故障自动恢复能力。

架构说明

  • 三节点 INFRA:Prometheus/Grafana/Nginx 分布式部署
  • 三节点 ETCD:DCS 多数派选举,容忍单点故障
  • 三节点 PostgreSQL:一主两从,自动故障转移
  • 单节点 MinIO:可按需扩展为多节点

高可用保障

  • ETCD 三节点可容忍一节点故障,保持多数派
  • PostgreSQL 主库故障时,Patroni 自动选举新主
  • L2 VIP 随主库漂移,应用无需修改连接配置

适用场景

  • 生产环境最小高可用部署
  • 需要自动故障转移的关键业务
  • 作为更大规模部署的基础架构

扩展建议

  • 需要更强数据安全性,参考 safe 模板
  • 需要更多演示功能,参考 full 模板
  • 生产环境建议启用 pgbackrest_method: minio 远程备份

3.3 - full

四节点完整功能演示环境,带有两套 PostgreSQL 集群、MinIO、Redis 等组件示例

full 配置模板是 Pigsty 推荐的沙箱演示环境,使用四个节点部署两套 PostgreSQL 集群,用于测试和演示 Pigsty 各方面的能力。

Pigsty 大部分教程和示例都基于此模板的沙箱环境。


配置概览

  • 配置名称: full(位于 ha/full.yml
  • 节点数量: 四节点
  • 配置说明:四节点完整功能演示环境,带有两套 PostgreSQL 集群、MinIO、Redis 等组件示例
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:triosafedemo

启用方式:

./configure -c ha/full [-i <primary_ip>]

配置生成后,需要修改其他三个节点的 IP 地址。


配置内容

源文件地址:pigsty/conf/ha/full.yml

all:
  children:

    # INFRA 基础设施
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }

    # ETCD DCS 服务
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
      vars:
        etcd_cluster: etcd

    # MinIO 备份存储
    minio:
      hosts:
        10.10.10.10: { minio_seq: 1 }
      vars:
        minio_cluster: minio

    # PostgreSQL 集群: pg-meta(单节点)
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - { name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
          - { name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer }
        pg_databases:
          - { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] }
        pg_hba_rules:
          - { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access' }
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.2/24
        pg_vip_interface: eth1

    # PostgreSQL 集群: pg-test(三节点高可用)
    pg-test:
      hosts:
        10.10.10.11: { pg_seq: 1, pg_role: primary }
        10.10.10.12: { pg_seq: 2, pg_role: replica }
        10.10.10.13: { pg_seq: 3, pg_role: replica, pg_offline_query: true }
      vars:
        pg_cluster: pg-test
        pg_users:  [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
        pg_databases: [{ name: test }]
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.3/24
        pg_vip_interface: eth1

    #----------------------------------------------#
    # Redis 示例
    #----------------------------------------------#
    redis-ms: # 主从模式
      hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
      vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }

    redis-meta: # 哨兵模式
      hosts: { 10.10.10.11: { redis_node: 1 , redis_instances: { 26379: { } ,26380: { } ,26381: { } } } }
      vars:
        redis_cluster: redis-meta
        redis_password: 'redis.meta'
        redis_mode: sentinel
        redis_max_memory: 16MB
        redis_sentinel_monitor:
          - { name: redis-ms, host: 10.10.10.10, port: 6379 ,password: redis.ms, quorum: 2 }

    redis-test: # 原生集群模式
      hosts:
        10.10.10.12: { redis_node: 1 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
        10.10.10.13: { redis_node: 2 ,redis_instances: { 6379: { } ,6380: { } ,6381: { } } }
      vars: { redis_cluster: redis-test ,redis_password: 'redis.test' ,redis_mode: cluster, redis_max_memory: 32MB }


  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    node_tune: oltp
    pg_conf: oltp.yml

    infra_portal:
      home         : { domain: i.pigsty }
      minio        : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }

    # MinIO 备份配置
    pgbackrest_method: minio
    node_etc_hosts: [ '10.10.10.10 i.pigsty sss.pigsty' ]

    # 软件包配置
    pg_version: 18
    repo_modules: infra,node,pgsql
    repo_remove: true
    node_repo_modules: local
    node_repo_remove: true
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-common ]
    repo_extra_packages: [ pg18-main ]

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

full 模板是 Pigsty 的完整功能演示配置,展示了多种组件的协同工作。

组件概览

组件节点分布说明
INFRA节点1监控/告警/Nginx/DNS
ETCD节点1DCS 服务
MinIO节点1S3 兼容存储
pg-meta节点1单节点 PostgreSQL
pg-test节点2-4三节点高可用 PostgreSQL
redis-ms节点1Redis 主从模式
redis-meta节点2Redis 哨兵模式
redis-test节点3-4Redis 原生集群模式

适用场景

  • Pigsty 功能演示与学习
  • 开发测试环境
  • 评估高可用架构
  • Redis 不同模式对比测试

与 trio 的区别

  • 增加了第二套 PostgreSQL 集群(pg-test)
  • 增加了三种模式的 Redis 集群示例
  • 基础设施使用单节点(而非三节点)

注意事项

  • 此模板主要用于演示和测试,生产环境请参考 triosafe
  • 默认启用 MinIO 备份,如不需要可注释相关配置

3.4 - safe

安全加固的高可用配置模板,采用高标准的安全最佳实践

safe 配置模板基于 trio 模板修改,是一个安全加固的专用配置模板,采用高标准的安全最佳实践。


配置概览

  • 配置名称: safe(位于 ha/safe.yml
  • 节点数量: 四节点
  • 配置说明:安全加固的高可用配置模板,采用高标准的安全最佳实践
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64(部分安全扩展在 ARM64 不可用)
  • 相关配置:triofull

启用方式:

./configure -c ha/safe [-i <primary_ip>]

安全加固措施

safe 模板实现了以下安全加固:

  • 强制 SSL 加密:PostgreSQL 和 PgBouncer 均启用 SSL
  • 强密码策略:使用 passwordcheck 扩展强制密码复杂度
  • 用户过期时间:所有用户设置 20 年过期时间
  • 最小化连接范围:限制 PostgreSQL/Patroni/PgBouncer 监听地址
  • 严格 HBA 规则:强制 SSL 认证,管理员需证书认证
  • 审计日志:记录连接和断开事件
  • 延迟副本:可选的 1 小时延迟副本,用于误操作恢复
  • 关键模板:使用 crit.yml 调优模板,零数据丢失

配置内容

源文件地址:pigsty/conf/ha/safe.yml

all:
  children:

    #----------------------------------------------#
    # INFRA 三节点高可用基础设施
    #----------------------------------------------#
    infra:
      hosts:
        10.10.10.10: { infra_seq: 1 }
        10.10.10.11: { infra_seq: 2, repo_enabled: false }
        10.10.10.12: { infra_seq: 3, repo_enabled: false }
      vars: { patroni_watchdog_mode: off }

    #----------------------------------------------#
    # MinIO 备份存储
    #----------------------------------------------#
    minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    #----------------------------------------------#
    # ETCD 三节点高可用 DCS
    #----------------------------------------------#
    etcd:
      hosts:
        10.10.10.10: { etcd_seq: 1 }
        10.10.10.11: { etcd_seq: 2 }
        10.10.10.12: { etcd_seq: 3 }
      vars:
        etcd_cluster: etcd
        etcd_safeguard: false
        etcd_clean: true

    #----------------------------------------------#
    # PostgreSQL 三节点高可用集群
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
        10.10.10.11: { pg_seq: 2, pg_role: replica }
        10.10.10.12: { pg_seq: 3, pg_role: replica , pg_offline_query: true }
      vars:
        pg_cluster: pg-meta
        pg_conf: crit.yml                 # 关键业务调优模板
        pg_users:
          - { name: dbuser_meta , password: Pleas3-ChangeThisPwd ,expire_in: 7300 ,pgbouncer: true ,roles: [ dbrole_admin ]    ,comment: pigsty admin user }
          - { name: dbuser_view , password: Make.3ure-Compl1ance  ,expire_in: 7300 ,pgbouncer: true ,roles: [ dbrole_readonly ] ,comment: read-only viewer }
        pg_databases:
          - { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [ pigsty ] ,extensions: [ { name: vector } ] }
        pg_services:
          - { name: standby , ip: "*" ,port: 5435 , dest: default ,selector: "[]" , backup: "[? pg_role == `primary`]" }
        pg_listen: '${ip},${vip},${lo}'   # 限制监听地址
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.2/24
        pg_vip_interface: eth1

    #----------------------------------------------#
    # 延迟副本(可选,1小时延迟)
    #----------------------------------------------#
    pg-meta-delay:
      hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary, pg_upstream: 10.10.10.10, pg_delay: 1h } }
      vars: { pg_cluster: pg-meta-delay }


  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    node_tune: oltp
    pg_conf: oltp.yml

    # 安全加固选项
    patroni_ssl_enabled: true             # Patroni API 启用 SSL
    pgbouncer_sslmode: require            # PgBouncer 强制 SSL
    pg_default_service_dest: postgres     # 默认直连 PostgreSQL 而非 PgBouncer
    pgbackrest_method: minio              # 使用 MinIO 远程备份

    #----------------------------------------------#
    # 强密码
    #----------------------------------------------#
    grafana_admin_password: You.Have2Use-A_VeryStrongPassword
    pg_admin_password: PessWorb.Should8eStrong-eNough
    pg_monitor_password: MekeSuerYour.PassWordI5secured
    pg_replication_password: doNotUseThis-PasswordFor.AnythingElse
    patroni_password: don.t-forget-to-change-thEs3-password
    haproxy_admin_password: GneratePasswordWith-pwgen-s-16-1

    #----------------------------------------------#
    # MinIO 备份配置
    #----------------------------------------------#
    minio_users:
      - { access_key: dba , secret_key: S3User.DBA.Strong.Password, policy: consoleAdmin }
      - { access_key: pgbackrest , secret_key: Min10.bAckup ,policy: readwrite }
    pgbackrest_repo:
      local:
        path: /pg/backup
        retention_full_type: count
        retention_full: 2
      minio:
        s3_key: pgbackrest
        s3_key_secret: Min10.bAckup
        cipher_pass: 'pgBR.${pg_cluster}'   # 使用集群名作为加密密码
        type: s3
        s3_endpoint: sss.pigsty
        s3_region: us-east-1
        s3_bucket: pgsql
        s3_uri_style: path
        path: /pgbackrest
        storage_port: 9000
        storage_ca_file: /etc/pki/ca.crt
        bundle: y
        cipher_type: aes-256-cbc
        retention_full_type: time
        retention_full: 14

    #----------------------------------------------#
    # 强密码策略扩展
    #----------------------------------------------#
    pg_libs: '$libdir/passwordcheck, pg_stat_statements, auto_explain'
    pg_extensions:
      - passwordcheck, supautils, pgsodium, pg_vault, pg_session_jwt, anonymizer, pgsmcrypto, pgauditlogtofile, pgaudit
      - pg_auth_mon, credcheck, pgcryptokey, pg_jobmon, logerrors, login_hook, set_user, pgextwlist, pg_auditor, sslutils, noset

    #----------------------------------------------#
    # 严格的默认角色配置
    #----------------------------------------------#
    pg_default_roles:
      - { name: dbrole_readonly  ,login: false ,comment: role for global read-only access }
      - { name: dbrole_offline   ,login: false ,comment: role for restricted read-only access }
      - { name: dbrole_readwrite ,login: false ,roles: [ dbrole_readonly ]               ,comment: role for global read-write access }
      - { name: dbrole_admin     ,login: false ,roles: [ pg_monitor, dbrole_readwrite ]  ,comment: role for object creation }
      - { name: postgres     ,superuser: true  ,expire_in: 7300                        ,comment: system superuser }
      - { name: replicator ,replication: true  ,expire_in: 7300 ,roles: [ pg_monitor, dbrole_readonly ]   ,comment: system replicator }
      - { name: dbuser_dba   ,superuser: true  ,expire_in: 7300 ,roles: [ dbrole_admin ]  ,pgbouncer: true ,pool_mode: session, pool_connlimit: 16 , comment: pgsql admin user }
      - { name: dbuser_monitor ,roles: [ pg_monitor ] ,expire_in: 7300 ,pgbouncer: true ,parameters: { log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment: pgsql monitor user }

    #----------------------------------------------#
    # 严格的 HBA 规则
    #----------------------------------------------#
    pg_default_hba_rules:
      - { user: '${dbsu}'    ,db: all         ,addr: local     ,auth: ident ,title: 'dbsu access via local os user ident'   }
      - { user: '${dbsu}'    ,db: replication ,addr: local     ,auth: ident ,title: 'dbsu replication from local os ident'  }
      - { user: '${repl}'    ,db: replication ,addr: localhost ,auth: ssl   ,title: 'replicator replication from localhost' }
      - { user: '${repl}'    ,db: replication ,addr: intra     ,auth: ssl   ,title: 'replicator replication from intranet'  }
      - { user: '${repl}'    ,db: postgres    ,addr: intra     ,auth: ssl   ,title: 'replicator postgres db from intranet'  }
      - { user: '${monitor}' ,db: all         ,addr: localhost ,auth: pwd   ,title: 'monitor from localhost with password'  }
      - { user: '${monitor}' ,db: all         ,addr: infra     ,auth: ssl   ,title: 'monitor from infra host with password' }
      - { user: '${admin}'   ,db: all         ,addr: infra     ,auth: ssl   ,title: 'admin @ infra nodes with pwd & ssl'    }
      - { user: '${admin}'   ,db: all         ,addr: world     ,auth: cert  ,title: 'admin @ everywhere with ssl & cert'    }
      - { user: '+dbrole_readonly',db: all    ,addr: localhost ,auth: ssl   ,title: 'pgbouncer read/write via local socket' }
      - { user: '+dbrole_readonly',db: all    ,addr: intra     ,auth: ssl   ,title: 'read/write biz user via password'      }
      - { user: '+dbrole_offline' ,db: all    ,addr: intra     ,auth: ssl   ,title: 'allow etl offline tasks from intranet' }

    pgb_default_hba_rules:
      - { user: '${dbsu}'    ,db: pgbouncer   ,addr: local     ,auth: peer  ,title: 'dbsu local admin access with os ident' }
      - { user: 'all'        ,db: all         ,addr: localhost ,auth: pwd   ,title: 'allow all user local access with pwd'  }
      - { user: '${monitor}' ,db: pgbouncer   ,addr: intra     ,auth: ssl   ,title: 'monitor access via intranet with pwd'  }
      - { user: '${monitor}' ,db: all         ,addr: world     ,auth: deny  ,title: 'reject all other monitor access addr'  }
      - { user: '${admin}'   ,db: all         ,addr: intra     ,auth: ssl   ,title: 'admin access via intranet with pwd'    }
      - { user: '${admin}'   ,db: all         ,addr: world     ,auth: deny  ,title: 'reject all other admin access addr'    }
      - { user: 'all'        ,db: all         ,addr: intra     ,auth: ssl   ,title: 'allow all user intra access with pwd'  }

配置解读

safe 模板是 Pigsty 的安全加固配置,专为对安全性有较高要求的生产环境设计。

安全特性汇总

安全措施说明
SSL 加密PostgreSQL/PgBouncer/Patroni 全链路 SSL
强密码策略passwordcheck 扩展强制密码复杂度
用户过期所有用户 20 年过期(expire_in: 7300
严格 HBA管理员远程访问需要证书认证
备份加密MinIO 备份启用 AES-256-CBC 加密
审计日志pgaudit 扩展记录 SQL 审计日志
延迟副本1 小时延迟副本用于误操作恢复

适用场景

  • 金融、医疗、政务等高安全要求行业
  • 需要满足合规审计要求的环境
  • 对数据安全有极高要求的关键业务

注意事项

  • 部分安全扩展在 ARM64 架构不可用,请酌情启用
  • 所有默认密码必须修改为强密码
  • 建议配合定期安全审计使用

4 - 内核模板

使用不同 PostgreSQL 内核变体的配置模板

使用不同 PostgreSQL 内核变体的配置模板。

模板内核PG版本说明
pgsqlPostgreSQL13~18原生 PostgreSQL 内核
citusCitus14~17分布式高可用 PostgreSQL
mssqlBabelfish/WiltonDB15SQL Server 协议兼容
polarPolarDB PG15Aurora/RAC 风格存算分离
ivoryIvorySQL18Oracle 语法兼容
mysqlOpenHalo14MySQL 协议兼容
pgtdePercona PG18透明数据加密 (pg_tde)
orioleOrioleDB17OLTP 增强,无膨胀存储引擎
mongoDocumentDB/FerretDB17MongoDB 协议兼容

4.1 - pgsql

原生 PostgreSQL 内核,支持 PostgreSQL 13 到 18 的多版本部署

pgsql 配置模板使用原生 PostgreSQL 内核,是 Pigsty 的默认数据库内核,支持 PostgreSQL 13 到 18 版本。


配置概览

  • 配置名称: pgsql
  • 节点数量: 单节点
  • 配置说明:原生 PostgreSQL 内核配置模板
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:meta

启用方式:

./configure -c pgsql [-i <primary_ip>]

如需指定特定 PostgreSQL 版本(如 17):

./configure -c pgsql -v 17

配置内容

源文件地址:pigsty/conf/pgsql.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: vector},{name: postgis}]}
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 18                      # 默认 PostgreSQL 18
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

pgsql 模板是 Pigsty 的标准内核配置,使用社区原生 PostgreSQL。

版本支持

  • PostgreSQL 18(默认)
  • PostgreSQL 17、16、15、14、13

适用场景

  • 需要使用最新 PostgreSQL 特性
  • 需要最广泛的扩展支持
  • 标准生产环境部署
  • meta 模板功能相同,显式声明使用原生内核

与 meta 的区别

  • pgsql 模板显式声明使用原生 PostgreSQL 内核
  • 适合需要明确区分不同内核类型的场景

4.2 - citus

Citus 分布式 PostgreSQL 集群,提供水平扩展与分片能力

citus 配置模板使用 Citus 扩展部署分布式 PostgreSQL 集群,提供透明的水平扩展与数据分片能力。


配置概览

  • 配置名称: citus
  • 节点数量: 五节点(1 协调节点 + 4 数据节点)
  • 配置说明:Citus 分布式 PostgreSQL 集群
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c citus [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/citus.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # Citus 协调节点
    #----------------------------------------------#
    pg-citus0:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-citus0
        pg_group: 0                       # Citus 协调节点组 ID
        pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
        pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]

    #----------------------------------------------#
    # Citus 数据节点 1
    #----------------------------------------------#
    pg-citus1:
      hosts: { 10.10.10.11: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus1, pg_group: 1 }

    #----------------------------------------------#
    # Citus 数据节点 2
    #----------------------------------------------#
    pg-citus2:
      hosts: { 10.10.10.12: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus2, pg_group: 2 }

    #----------------------------------------------#
    # Citus 数据节点 3
    #----------------------------------------------#
    pg-citus3:
      hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary } }
      vars: { pg_cluster: pg-citus3, pg_group: 3 }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 17                      # Citus 支持 PG 14~17
    pg_conf: oltp.yml

    # Citus 专用配置
    pg_mode: citus
    pg_shard: pg-citus                  # Citus 集群名称
    pg_primary_db: citus                # Citus 主数据库
    pg_extensions: [ citus, postgis, pgvector ]
    pg_libs: 'citus, pg_stat_statements, auto_explain'
    pg_users: [{ name: dbuser_citus ,password: DBUser.Citus ,pgbouncer: true ,roles: [dbrole_admin] }]
    pg_databases: [{ name: citus, owner: dbuser_citus ,extensions: [{ name: citus }] }]
    pg_hba_rules:
      - { user: 'all' ,db: 'all' ,addr: '10.10.10.0/24' ,auth: ssl ,title: 'trust citus cluster members' }

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

citus 模板部署 Citus 分布式 PostgreSQL 集群,适合需要水平扩展的大规模数据场景。

关键特性

  • 透明数据分片,自动分布数据到多个节点
  • 并行查询执行,聚合多节点结果
  • 支持分布式事务(2PC)
  • 保持 PostgreSQL SQL 兼容性

架构说明

  • 协调节点 (pg-citus0):接收查询,路由到数据节点
  • 数据节点 (pg-citus1~3):存储分片数据

适用场景

  • 单表数据量超过单机容量
  • 需要水平扩展写入和查询性能
  • 多租户 SaaS 应用
  • 实时分析型工作负载

注意事项

  • Citus 支持 PostgreSQL 14~17
  • 分布式表需要指定分布列
  • 部分 PostgreSQL 特性可能受限(如外键跨分片)
  • 不支持 ARM64 架构

4.3 - mssql

WiltonDB / Babelfish 内核,提供 Microsoft SQL Server 协议与语法兼容能力

mssql 配置模板使用 WiltonDB / Babelfish 数据库内核替代原生 PostgreSQL,提供 Microsoft SQL Server 线缆协议(TDS)与 T-SQL 语法兼容能力。

完整教程请参考:Babelfish (MSSQL) 内核使用说明


配置概览

  • 配置名称: mssql
  • 节点数量: 单节点
  • 配置说明:WiltonDB / Babelfish 配置模板,提供 SQL Server 协议兼容
  • 适用系统:el8, el9, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c mssql [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/mssql.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # Babelfish Database Cluster
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
          - {name: dbuser_mssql ,password: DBUser.MSSQL ,superuser: true ,pgbouncer: true ,roles: [dbrole_admin] ,comment: babelfish superuser }
        pg_databases:
          - name: mssql
            baseline: mssql.sql             # 初始化 babelfish 数据库
            extensions:
              - { name: uuid-ossp          }
              - { name: babelfishpg_common }
              - { name: babelfishpg_tsql   }
              - { name: babelfishpg_tds    }
              - { name: babelfishpg_money  }
              - { name: pg_hint_plan       }
              - { name: system_stats       }
              - { name: tds_fdw            }
            owner: dbuser_mssql
            parameters: { 'babelfishpg_tsql.migration_mode' : 'multi-db' }
            comment: babelfish MSSQL compatible database
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty]}
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access' }
          - {user: dbuser_mssql ,db: mssql ,addr: intra ,auth: md5 ,title: 'allow mssql dbsu intranet access' }
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # Babelfish Ad Hoc Settings
        pg_mode: mssql                    # MSSQL 兼容模式
        pg_packages: [ wiltondb, pgsql-common ]  # 安装 WiltonDB 内核
        pg_libs: 'babelfishpg_tds, pg_stat_statements, auto_explain'
        pg_default_services:              # TDS 端口 1433 服务路由
          - { name: primary ,port: 5433 ,dest: 1433  ,check: /primary   ,selector: "[]" }
          - { name: replica ,port: 5434 ,dest: 1433  ,check: /read-only ,selector: "[]" , backup: "[? pg_role == `primary` || pg_role == `offline` ]" }
          - { name: default ,port: 5436 ,dest: postgres ,check: /primary   ,selector: "[]" }
          - { name: offline ,port: 5438 ,dest: postgres ,check: /replica   ,selector: "[? pg_role == `offline` || pg_offline_query ]" , backup: "[? pg_role == `replica` && !pg_offline_query]" }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 15                      # WiltonDB 基于 PostgreSQL 15
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

mssql 模板让您可以使用 SQL Server Management Studio (SSMS) 或其他 SQL Server 客户端工具连接 PostgreSQL。

关键特性

  • 使用 TDS 协议(端口 1433),兼容 SQL Server 客户端
  • 支持 T-SQL 语法,迁移成本低
  • 保留 PostgreSQL 的 ACID 特性和扩展生态
  • 支持 multi-dbsingle-db 两种迁移模式

连接方式

# 使用 sqlcmd 命令行工具
sqlcmd -S 10.10.10.10,1433 -U dbuser_mssql -P DBUser.MSSQL -d mssql

# 使用 SSMS 或 Azure Data Studio
# Server: 10.10.10.10,1433
# Authentication: SQL Server Authentication
# Login: dbuser_mssql
# Password: DBUser.MSSQL

适用场景

  • 从 SQL Server 迁移到 PostgreSQL
  • 需要同时支持 SQL Server 和 PostgreSQL 客户端的应用
  • 希望利用 PostgreSQL 生态同时保持 T-SQL 兼容性

注意事项

  • WiltonDB 基于 PostgreSQL 15,不支持更高版本特性
  • 部分 T-SQL 语法可能存在兼容性差异,请参考 Babelfish 兼容性文档
  • 需要使用 md5 认证方式(而非 scram-sha-256

4.4 - polar

PolarDB for PostgreSQL 内核,提供 Aurora 风格的存算分离能力

polar 配置模板使用阿里云 PolarDB for PostgreSQL 数据库内核替代原生 PostgreSQL,提供"云原生" Aurora 风格的存算分离能力。

完整教程请参考:PolarDB for PostgreSQL (POLAR) 内核使用说明


配置概览

  • 配置名称: polar
  • 节点数量: 单节点
  • 配置说明:使用 PolarDB for PostgreSQL 内核
  • 适用系统:el8, el9, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c polar [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/polar.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # PolarDB Database Cluster
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty]}
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # PolarDB 专用配置
        pg_mode: polar                    # PolarDB 模式
        pg_packages: [ polardb, pgsql-common ]  # 安装 PolarDB 内核
        pg_exporter_exclude_database: 'template0,template1,postgres,polardb_admin'
        pg_default_roles:
          - { name: dbrole_readonly  ,login: false ,comment: role for global read-only access     }
          - { name: dbrole_offline   ,login: false ,comment: role for restricted read-only access }
          - { name: dbrole_readwrite ,login: false ,roles: [dbrole_readonly] ,comment: role for global read-write access }
          - { name: dbrole_admin     ,login: false ,roles: [pg_monitor, dbrole_readwrite] ,comment: role for object creation }
          - { name: postgres     ,superuser: true  ,comment: system superuser }
          - { name: replicator   ,superuser: true  ,replication: true ,roles: [pg_monitor, dbrole_readonly] ,comment: system replicator } # 需要超级用户权限
          - { name: dbuser_dba   ,superuser: true  ,roles: [dbrole_admin]  ,pgbouncer: true ,pool_mode: session, pool_connlimit: 16 ,comment: pgsql admin user }
          - { name: dbuser_monitor ,roles: [pg_monitor] ,pgbouncer: true ,parameters: {log_min_duration_statement: 1000 } ,pool_mode: session ,pool_connlimit: 8 ,comment: pgsql monitor user }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 15                      # PolarDB 基于 PostgreSQL 15
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

polar 模板使用阿里云开源的 PolarDB for PostgreSQL 内核,提供云原生数据库能力。

关键特性

  • 存算分离架构,计算节点和存储节点可独立扩展
  • 支持一写多读,读副本秒级扩展
  • 兼容 PostgreSQL 生态,保持 SQL 兼容性
  • 支持共享存储场景,适合云环境部署

适用场景

  • 需要存算分离架构的云原生场景
  • 读多写少的业务负载
  • 需要快速扩展读副本的场景
  • 评估 PolarDB 特性的测试环境

注意事项

  • PolarDB 基于 PostgreSQL 15,不支持更高版本特性
  • 复制用户需要超级用户权限(与原生 PostgreSQL 不同)
  • 部分 PostgreSQL 扩展可能存在兼容性问题
  • 不支持 ARM64 架构

4.5 - ivory

IvorySQL 内核,提供 Oracle 语法与 PL/SQL 兼容能力

ivory 配置模板使用瀚高的 IvorySQL 数据库内核替代原生 PostgreSQL,提供 Oracle 语法与 PL/SQL 兼容能力。

完整教程请参考:IvorySQL (Oracle兼容) 内核使用说明


配置概览

  • 配置名称: ivory
  • 节点数量: 单节点
  • 配置说明:使用 IvorySQL Oracle 兼容内核
  • 适用系统:el8, el9
  • 适用架构:x86_64, aarch64
  • 相关配置:meta

启用方式:

./configure -c ivory [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/ivory.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # IvorySQL Database Cluster
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty]}
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # IvorySQL 专用配置
        pg_mode: ivory                    # IvorySQL Oracle 兼容模式
        pg_packages: [ ivorysql, pgsql-common ]  # 安装 IvorySQL 内核
        pg_libs: 'liboracle_parser, pg_stat_statements, auto_explain'
        pgbackrest_enabled: false         # IvorySQL 模式下 pgbackrest 存在校验问题

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 18                      # IvorySQL 4 基于 PostgreSQL 18
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

ivory 模板使用瀚高开源的 IvorySQL 内核,提供 Oracle 数据库兼容能力。

关键特性

  • 支持 Oracle PL/SQL 语法
  • 兼容 Oracle 数据类型(NUMBER、VARCHAR2 等)
  • 支持 Oracle 风格的包(Package)
  • 保留 PostgreSQL 的所有标准功能

适用场景

  • 从 Oracle 迁移到 PostgreSQL
  • 需要同时支持 Oracle 和 PostgreSQL 语法的应用
  • 希望利用 PostgreSQL 生态同时保持 PL/SQL 兼容性
  • 评估 IvorySQL 特性的测试环境

注意事项

  • IvorySQL 4 基于 PostgreSQL 18
  • 使用 liboracle_parser 需要加载到 shared_preload_libraries
  • pgbackrest 在 Oracle 兼容模式下可能存在校验问题,PITR 能力受限
  • 仅支持 EL8/EL9 系统,不支持 Debian/Ubuntu

4.6 - mysql

OpenHalo 内核,提供 MySQL 协议与语法兼容能力

mysql 配置模板使用 OpenHalo 数据库内核替代原生 PostgreSQL,提供 MySQL 线缆协议与 SQL 语法兼容能力。


配置概览

  • 配置名称: mysql
  • 节点数量: 单节点
  • 配置说明:OpenHalo MySQL 兼容内核配置
  • 适用系统:el8, el9
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c mysql [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/mysql.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # OpenHalo MySQL Compatible Cluster
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty]}
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # OpenHalo 专用配置
        pg_mode: mysql                    # MySQL 兼容模式
        pg_packages: [ openhalo, pgsql-common ]  # 安装 OpenHalo 内核
        pg_default_services:              # MySQL 端口 3306 服务路由
          - { name: primary ,port: 5433 ,dest: 3306  ,check: /primary   ,selector: "[]" }
          - { name: replica ,port: 5434 ,dest: 3306  ,check: /read-only ,selector: "[]" , backup: "[? pg_role == `primary` || pg_role == `offline` ]" }
          - { name: default ,port: 5436 ,dest: postgres ,check: /primary   ,selector: "[]" }
          - { name: offline ,port: 5438 ,dest: postgres ,check: /replica   ,selector: "[? pg_role == `offline` || pg_offline_query ]" , backup: "[? pg_role == `replica` && !pg_offline_query]" }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 14                      # OpenHalo 基于 PostgreSQL 14
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

mysql 模板使用 OpenHalo 内核,让您可以使用 MySQL 客户端工具连接 PostgreSQL。

关键特性

  • 使用 MySQL 协议(端口 3306),兼容 MySQL 客户端
  • 支持 MySQL SQL 语法子集
  • 保留 PostgreSQL 的 ACID 特性和存储引擎
  • 同时支持 PostgreSQL 和 MySQL 两种协议连接

连接方式

# 使用 MySQL 客户端
mysql -h 10.10.10.10 -P 3306 -u dbuser_meta -pDBUser.Meta

# 同时保留 PostgreSQL 连接能力
psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/meta

适用场景

  • 从 MySQL 迁移到 PostgreSQL
  • 需要同时支持 MySQL 和 PostgreSQL 客户端的应用
  • 希望利用 PostgreSQL 生态同时保持 MySQL 兼容性

注意事项

  • OpenHalo 基于 PostgreSQL 14,不支持更高版本特性
  • 部分 MySQL 语法可能存在兼容性差异
  • 仅支持 EL8/EL9 系统
  • 不支持 ARM64 架构

4.7 - pgtde

Percona PostgreSQL 内核,提供透明数据加密 (pg_tde) 能力

pgtde 配置模板使用 Percona PostgreSQL 数据库内核,提供透明数据加密 (Transparent Data Encryption, TDE) 能力。


配置概览

  • 配置名称: pgtde
  • 节点数量: 单节点
  • 配置说明:Percona PostgreSQL 透明数据加密配置
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c pgtde [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/pgtde.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # Percona PostgreSQL with pg_tde
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - name: meta
            baseline: cmdb.sql
            comment: pigsty meta database
            schemas: [pigsty]
            extensions: [{ name: pg_tde }]  # 启用透明数据加密扩展
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # Percona PostgreSQL 专用配置
        pg_mode: pgtde                    # Percona TDE 模式
        pg_packages: [ percona-postgresql, pgsql-common ]  # 安装 Percona PostgreSQL 内核
        pg_libs: 'pg_tde, pg_stat_statements, auto_explain'

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 18                      # Percona PostgreSQL 18
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

pgtde 模板使用 Percona PostgreSQL 内核,提供企业级透明数据加密能力。

关键特性

  • 透明数据加密:数据在磁盘上自动加密,对应用透明
  • 密钥管理:支持本地密钥和外部密钥管理系统 (KMS)
  • 表级加密:可选择性加密敏感表
  • 完整兼容:与原生 PostgreSQL 完全兼容

适用场景

  • 需要满足数据安全合规要求(如 PCI-DSS、HIPAA)
  • 存储敏感数据(如个人信息、金融数据)
  • 需要静态数据加密的场景
  • 对数据安全有严格要求的企业环境

使用方法

-- 创建加密表
CREATE TABLE sensitive_data (
    id SERIAL PRIMARY KEY,
    ssn VARCHAR(11)
) USING pg_tde;

-- 或对现有表启用加密
ALTER TABLE existing_table SET ACCESS METHOD pg_tde;

注意事项

  • Percona PostgreSQL 基于 PostgreSQL 18
  • 加密会带来一定性能开销(通常 5-15%)
  • 需要妥善管理加密密钥
  • 不支持 ARM64 架构

4.8 - oriole

OrioleDB 内核,提供无膨胀的 OLTP 增强存储引擎

oriole 配置模板使用 OrioleDB 存储引擎替代 PostgreSQL 默认的 Heap 存储,提供无膨胀、高性能的 OLTP 能力。


配置概览

  • 配置名称: oriole
  • 节点数量: 单节点
  • 配置说明:OrioleDB 无膨胀存储引擎配置
  • 适用系统:el8, el9, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c oriole [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/oriole.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # OrioleDB Cluster
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - name: meta
            baseline: cmdb.sql
            comment: pigsty meta database
            schemas: [pigsty]
            extensions: [{ name: orioledb }]  # 启用 OrioleDB 扩展
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # OrioleDB 专用配置
        pg_mode: oriole                   # OrioleDB 模式
        pg_packages: [ orioledb, pgsql-common ]  # 安装 OrioleDB 内核
        pg_libs: 'orioledb, pg_stat_statements, auto_explain'

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 17                      # OrioleDB 基于 PostgreSQL 17
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

oriole 模板使用 OrioleDB 存储引擎,从根本上解决 PostgreSQL 表膨胀问题。

关键特性

  • 无膨胀设计:使用 UNDO 日志而非多版本并发控制 (MVCC)
  • 无需 VACUUM:消除 autovacuum 带来的性能抖动
  • 行级 WAL:更高效的日志记录和复制
  • 压缩存储:内置数据压缩,减少存储空间

适用场景

  • 高频更新的 OLTP 工作负载
  • 对写入延迟敏感的应用
  • 需要稳定响应时间(消除 VACUUM 影响)
  • 大表频繁更新导致膨胀的场景

使用方法

-- 创建使用 OrioleDB 存储的表
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT,
    amount DECIMAL(10,2)
) USING orioledb;

-- 对现有表无法直接转换,需要重建

注意事项

  • OrioleDB 基于 PostgreSQL 17
  • 需要将 orioledb 添加到 shared_preload_libraries
  • 部分 PostgreSQL 特性可能不完全支持
  • 不支持 ARM64 架构

4.9 - mongo

FerretDB/DocumentDB 内核,提供 MongoDB 协议兼容能力

mongo 配置模板使用 FerretDB 或 AWS DocumentDB 兼容层,为 PostgreSQL 提供 MongoDB 线缆协议兼容能力。


配置概览

  • 配置名称: mongo
  • 节点数量: 单节点
  • 配置说明:FerretDB/DocumentDB MongoDB 兼容配置
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:meta

启用方式:

./configure -c mongo [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/mongo.yml

all:
  children:
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 }} ,vars: { repo_enabled: false }}
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  }} ,vars: { etcd_cluster: etcd  }}

    #----------------------------------------------#
    # MongoDB Compatible PostgreSQL
    #----------------------------------------------#
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1, pg_role: primary }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta ,password: DBUser.Meta   ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view ,password: DBUser.Viewer ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
        pg_databases:
          - name: meta
            baseline: cmdb.sql
            comment: pigsty meta database
            schemas: [pigsty]
            extensions:
              - { name: documentdb_core }
              - { name: documentdb_distributed }
        pg_hba_rules:
          - {user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana access'}
        node_crontab: [ '00 01 * * * postgres /pg/bin/pg-backup full' ]

        # DocumentDB 专用配置
        pg_mode: mongo                    # MongoDB 兼容模式
        pg_extensions: [ documentdb, postgis, pgvector ]
        pg_libs: 'documentdb.so, pg_stat_statements, auto_explain'

    #----------------------------------------------#
    # FerretDB Docker 服务 (可选)
    #----------------------------------------------#
    app:
      hosts: { 10.10.10.10: {} }
      vars:
        docker_enabled: true
        app: ferretdb
        apps:
          ferretdb:
            conf:
              FERRETDB_POSTGRESQL_URL: "postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/ferretdb"

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }

    nodename_overwrite: false
    node_repo_modules: node,infra,pgsql
    node_tune: oltp

    pg_version: 17
    pg_conf: oltp.yml

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

mongo 模板让您可以使用 MongoDB 客户端工具(如 mongosh)连接 PostgreSQL。

两种实现方式

  1. FerretDB:作为 Docker 服务运行的协议转换代理
  2. DocumentDB:PostgreSQL 扩展,原生支持 MongoDB 协议

关键特性

  • 使用 MongoDB 协议(端口 27017),兼容 MongoDB 客户端
  • 数据实际存储在 PostgreSQL(JSONB 格式)
  • 保留 PostgreSQL 的 ACID 特性和事务支持
  • 可结合 PostgreSQL 扩展(如 pgvector)使用

连接方式

# 使用 mongosh 连接 FerretDB
mongosh "mongodb://dbuser_meta:DBUser.Meta@10.10.10.10:27017/ferretdb"

# 同时保留 PostgreSQL 连接能力
psql postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/ferretdb

适用场景

  • 从 MongoDB 迁移到 PostgreSQL
  • 需要同时支持 MongoDB 和 SQL 的应用
  • 希望在 PostgreSQL 上存储文档数据
  • 需要利用 PostgreSQL 生态(如向量搜索)处理文档

注意事项

  • 部分 MongoDB 特性可能存在兼容性差异
  • FerretDB 通过 Docker 运行,需要启用 Docker
  • DocumentDB 扩展提供更原生的集成

5 - 演示模板

用于演示和展示的配置模板

用于演示和展示的配置模板。

模板说明
demoPigsty 公开演示站点配置
minio四节点多盘高可用 MinIO 集群

5.1 - demo

Pigsty 公开演示站点配置,展示如何配置 SSL 证书、暴露域名、安装全部扩展

demo 配置模板是 Pigsty 公开演示站点使用的配置文件,展示了如何对外暴露网站、配置 SSL 证书、安装全部扩展插件。

如果您希望在云服务器上搭建自己的公开服务,可以参考此配置模板。


配置概览

  • 配置名称: demo(位于 demo/demo.yml
  • 节点数量: 单节点
  • 配置说明:Pigsty 公开演示站点配置
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:metarich

启用方式:

./configure -c demo/demo [-i <primary_ip>]

主要特性

此模板在 meta 基础上进行了以下增强:

  • 配置 SSL 证书和自定义域名(如 pigsty.cc
  • 下载并安装 PostgreSQL 18 所有可用扩展
  • 启用 Docker 并配置镜像加速
  • 部署 MinIO 对象存储
  • 预置多个业务数据库和用户
  • 添加 Redis 主从实例示例
  • 添加 FerretDB MongoDB 兼容集群
  • 添加 Kafka 样例集群

配置内容

源文件地址:pigsty/conf/demo/demo.yml

all:
  children:

    infra:
      hosts: { 10.10.10.10: { infra_seq: 1 } }
      vars:
        nodename: pigsty.cc
        node_id_from_pg: false
        docker_enabled: true
        docker_registry_mirrors: ["https://mirror.ccs.tencentyun.com"]

    etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
    minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - {name: dbuser_meta     ,password: DBUser.Meta     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin }
          - {name: dbuser_view     ,password: DBUser.Viewer   ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer }
          - {name: dbuser_grafana  ,password: DBUser.Grafana  ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: grafana user }
          - {name: dbuser_odoo     ,password: DBUser.Odoo     ,pgbouncer: true ,roles: [dbrole_admin]    ,createdb: true }
        pg_databases:
          - {name: meta ,baseline: cmdb.sql ,schemas: [pigsty] ,extensions: [{name: vector},{name: postgis},{name: timescaledb}]}
          - {name: grafana  ,owner: dbuser_grafana  ,revokeconn: true }
          - {name: odoo     ,owner: dbuser_odoo     ,revokeconn: true }
        pg_libs: 'timescaledb, pg_stat_statements, auto_explain'
        pg_extensions:
          - timescaledb periods temporal_tables emaj table_version pg_cron pg_later pg_background
          - postgis pgrouting pointcloud q3c geoip pg_polyline pg_geohash
          - pgvector pgvectorscale pg_vectorize pg_similarity smlar pg_summarize pg_tiktoken pg4ml
          - pg_search pg_bigm zhparser hunspell
          - pg_analytics pg_duckdb duckdb_fdw pg_parquet pg_fkpart plproxy
          # ... 更多扩展

    redis-ms:
      hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { }, 6380: { replica_of: '10.10.10.10 6379' } } } }
      vars: { redis_cluster: redis-ms ,redis_password: 'redis.ms' ,redis_max_memory: 64MB }

    pg-mongo:
      hosts: { 10.10.10.10: { mongo_seq: 1 } }
      vars:
        mongo_cluster: pg-mongo
        mongo_pgurl: 'postgres://dbuser_meta:DBUser.Meta@10.10.10.10:5432/grafana'


  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: china

    # SSL 证书和域名配置
    infra_portal:
      home         : { domain: home.pigsty.cc }
      cc           : { domain: pigsty.cc      ,path: "/www/pigsty.cc" ,cert: /etc/cert/pigsty.cc.crt ,key: /etc/cert/pigsty.cc.key }
      grafana      : { domain: demo.pigsty.cc ,endpoint: "${admin_ip}:3000" ,websocket: true ,cert: /etc/cert/demo.pigsty.cc.crt ,key: /etc/cert/demo.pigsty.cc.key }
      prometheus   : { domain: p.pigsty.cc    ,endpoint: "${admin_ip}:9090" }
      alertmanager : { domain: a.pigsty.cc    ,endpoint: "${admin_ip}:9093" }
      minio        : { domain: m.pigsty.cc    ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
      # ... 更多服务域名

    node_timezone: Asia/Hong_Kong
    node_ntp_servers:
      - pool cn.pool.ntp.org iburst
      - pool ${admin_ip} iburst

    # 下载 Docker 和全部扩展
    repo_modules: infra,node,pgsql,docker
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, docker ]
    pg_version: 18
    repo_extra_packages: [pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
    pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl ]

配置解读

demo 模板是 Pigsty 的公开演示配置,展示了完整的生产级部署示例。

关键特性

  • 配置 HTTPS 证书和自定义域名
  • 安装所有可用的 PostgreSQL 扩展
  • 集成 Redis、FerretDB、Kafka 等组件
  • 配置 Docker 镜像加速

适用场景

  • 搭建公开演示站点
  • 需要完整功能展示的场景
  • 学习 Pigsty 高级配置

注意事项

  • 需要准备 SSL 证书文件
  • 需要配置 DNS 解析
  • 部分扩展在 ARM64 架构不可用

5.2 - minio

四节点 x 四盘位的高可用多节点多盘 MinIO 集群演示

minio 配置模板演示了如何部署一套四节点 x 四盘位、总计十六盘的高可用 MinIO 集群,提供 S3 兼容的对象存储服务。

更多教程,请参考 MINIO 模块文档。


配置概览

  • 配置名称: minio(位于 demo/minio.yml
  • 节点数量: 四节点
  • 配置说明:高可用多节点多盘 MinIO 集群演示
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:meta

启用方式:

./configure -c demo/minio

备注:这是一个四节点模版,您需要在生成配置后修改其他三个节点的 IP 地址


配置内容

源文件地址:pigsty/conf/demo/minio.yml

all:
  children:

    # infra cluster for proxy, monitor, alert, etc..
    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }

    # minio cluster with 4 nodes and 4 drivers per node
    minio:
      hosts:
        10.10.10.10: { minio_seq: 1 , nodename: minio-1 }
        10.10.10.11: { minio_seq: 2 , nodename: minio-2 }
        10.10.10.12: { minio_seq: 3 , nodename: minio-3 }
        10.10.10.13: { minio_seq: 4 , nodename: minio-4 }
      vars:
        minio_cluster: minio
        minio_data: '/data{1...4}'          # 每节点4盘
        minio_buckets:                      # 创建存储桶
          - { name: pgsql }
          - { name: meta ,versioning: true }
          - { name: data }
        minio_users:                        # 创建用户
          - { access_key: pgbackrest  ,secret_key: S3User.Backup ,policy: pgsql }
          - { access_key: s3user_meta ,secret_key: S3User.Meta   ,policy: meta  }
          - { access_key: s3user_data ,secret_key: S3User.Data   ,policy: data  }

        # 绑定 L2 VIP (10.10.10.9) 到 minio 集群(可选)
        node_cluster: minio
        vip_enabled: true
        vip_vrid: 128
        vip_address: 10.10.10.9
        vip_interface: eth1

        # 在所有节点上通过 HAProxy 暴露 MinIO 服务
        haproxy_services:
          - name: minio
            port: 9002
            balance: leastconn
            options:
              - option httpchk
              - option http-keep-alive
              - http-check send meth OPTIONS uri /minio/health/live
              - http-check expect status 200
            servers:
              - { name: minio-1 ,ip: 10.10.10.10 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-2 ,ip: 10.10.10.11 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-3 ,ip: 10.10.10.12 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-4 ,ip: 10.10.10.13 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }
      # 每个 MinIO 节点的控制台访问域名
      minio   : { domain: m.pigsty   ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
      minio10 : { domain: m10.pigsty ,endpoint: "10.10.10.10:9001" ,scheme: https ,websocket: true }
      minio11 : { domain: m11.pigsty ,endpoint: "10.10.10.11:9001" ,scheme: https ,websocket: true }
      minio12 : { domain: m12.pigsty ,endpoint: "10.10.10.12:9001" ,scheme: https ,websocket: true }
      minio13 : { domain: m13.pigsty ,endpoint: "10.10.10.13:9001" ,scheme: https ,websocket: true }

    minio_endpoint: https://sss.pigsty:9002   # 使用 HAProxy 负载均衡端点
    node_etc_hosts: ["10.10.10.9 sss.pigsty"] # VIP 域名解析

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO

配置解读

minio 模板是 MinIO 生产级部署的参考配置,展示了多节点多盘 (MNMD) 架构。

关键特性

  • 多节点多盘架构:4 节点 × 4 盘 = 16 盘纠删码组
  • L2 VIP 高可用:通过 Keepalived 绑定虚拟 IP
  • HAProxy 负载均衡:9002 端口统一访问入口
  • 细粒度权限:为不同应用创建独立用户和存储桶

访问方式

# 使用 mcli 配置 MinIO 别名(通过 HAProxy 负载均衡)
mcli alias set sss https://sss.pigsty:9002 minioadmin S3User.MinIO

# 列出存储桶
mcli ls sss/

# 使用控制台
# 访问 https://m.pigsty 或 https://m10-m13.pigsty

适用场景

  • 需要 S3 兼容对象存储的环境
  • PostgreSQL 备份存储(pgBackRest 远程仓库)
  • 大数据和 AI 工作负载的数据湖
  • 需要高可用对象存储的生产环境

注意事项

  • 每个节点需要准备 4 块独立磁盘挂载到 /data1 - /data4
  • 生产环境建议至少 4 节点以实现纠删码冗余
  • VIP 需要正确配置网络接口(vip_interface
  • 节点间需要能够互相解析 minio-{1...4}.pigsty 域名

6 - 应用模板

用于运行 Docker 应用的配置模板

用于运行 Docker 应用的配置模板。

模板说明
supabaseSupabase 自托管开源 BaaS
difyDify AI 应用开发平台
odooOdoo 开源 ERP 系统
electricElectric 实时同步引擎
maybeMaybe 个人财务管理
teableTeable 无代码数据库
registryDocker Registry 镜像代理

6.1 - supabase

使用 Pigsty 托管的 PostgreSQL 自建 Supabase 开源 Firebase 替代方案

supabase 配置模板提供了自建 Supabase 的参考配置,使用 Pigsty 托管的 PostgreSQL 作为底层存储。

更多细节,请参考 Supabase 自建教程


配置概览

  • 配置名称: supabase
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 自建 Supabase
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:metarich

启用方式:

./configure -c supabase [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/supabase.yml

all:
  children:

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } }, vars: { repo_enabled: false } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1  } }, vars: { etcd_cluster: etcd  } }
    minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

    #----------------------------------------------#
    # PostgreSQL cluster for Supabase self-hosting
    #----------------------------------------------#
    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          # supabase 角色
          - { name: anon           ,login: false }
          - { name: authenticated  ,login: false }
          - { name: dashboard_user ,login: false ,replication: true ,createdb: true ,createrole: true }
          - { name: service_role   ,login: false ,bypassrls: true }
          # supabase 用户
          - { name: supabase_admin             ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: true   ,roles: [ dbrole_admin ] ,superuser: true ,replication: true ,createdb: true ,createrole: true ,bypassrls: true }
          - { name: authenticator              ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false  ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] }
          - { name: supabase_auth_admin        ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false  ,roles: [ dbrole_admin ] ,createrole: true }
          - { name: supabase_storage_admin     ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false  ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] ,createrole: true }
          - { name: supabase_functions_admin   ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false  ,roles: [ dbrole_admin ] ,createrole: true }
          - { name: supabase_replication_admin ,password: 'DBUser.Supa' ,replication: true ,roles: [ dbrole_admin ]}
          - { name: supabase_etl_admin         ,password: 'DBUser.Supa' ,replication: true ,roles: [ pg_read_all_data ]}
          - { name: supabase_read_only_user    ,password: 'DBUser.Supa' ,bypassrls: true ,roles: [ pg_read_all_data, dbrole_readonly ]}
        pg_databases:
          - name: postgres
            baseline: supabase.sql
            owner: supabase_admin
            comment: supabase postgres database
            schemas: [ extensions ,auth ,realtime ,storage ,graphql_public ,supabase_functions ,_analytics ,_realtime ]
            extensions:
              - { name: pgcrypto       ,schema: extensions }
              - { name: pg_net         ,schema: extensions }
              - { name: pgjwt          ,schema: extensions }
              - { name: uuid-ossp      ,schema: extensions }
              - { name: pgsodium       ,schema: extensions }
              - { name: supabase_vault ,schema: extensions }
              - { name: pg_graphql     ,schema: extensions }
              - { name: pg_jsonschema  ,schema: extensions }
              - { name: wrappers       ,schema: extensions }
              - { name: http           ,schema: extensions }
              - { name: pg_cron        ,schema: extensions }
              - { name: timescaledb    ,schema: extensions }
              - { name: pg_tle         ,schema: extensions }
              - { name: vector         ,schema: extensions }
              - { name: pgmq           ,schema: extensions }
          - { name: supabase ,owner: supabase_admin ,comment: supabase analytics database }
        pg_libs: 'timescaledb, pgsodium, plpgsql, plpgsql_check, pg_cron, pg_net, pg_stat_statements, auto_explain, pg_wait_sampling, pg_tle, plan_filter'
        pg_extensions: [ pg18-main ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
        pg_parameters: { cron.database_name: postgres }
        pg_hba_rules:
          - { user: all ,db: postgres  ,addr: intra         ,auth: pwd ,title: 'allow supabase access from intranet'    }
          - { user: all ,db: postgres  ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow access from local docker network' }
        node_crontab:
          - '00 01 * * * postgres /pg/bin/pg-backup full'
          - '*  *  * * * postgres /pg/bin/supa-kick'    # 处理 _analytics 延迟问题

    #----------------------------------------------#
    # Supabase 无状态容器 (默认用户密码: supabase/pigsty)
    #----------------------------------------------#
    supabase:
      hosts: { 10.10.10.10: {} }
      vars:
        docker_enabled: true
        app: supabase
        apps:
          supabase:
            conf:
              # 重要:修改 JWT_SECRET 并重新生成凭据!
              JWT_SECRET: your-super-secret-jwt-token-with-at-least-32-characters-long
              ANON_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
              SERVICE_ROLE_KEY: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
              PG_META_CRYPTO_KEY: your-encryption-key-32-chars-min
              DASHBOARD_USERNAME: supabase
              DASHBOARD_PASSWORD: pigsty
              LOGFLARE_PUBLIC_ACCESS_TOKEN: 1234567890abcdef...
              LOGFLARE_PRIVATE_ACCESS_TOKEN: fedcba0987654321...

              # PostgreSQL 连接配置
              POSTGRES_HOST: 10.10.10.10
              POSTGRES_PORT: 5436
              POSTGRES_DB: postgres
              POSTGRES_PASSWORD: DBUser.Supa

              # Supabase 外部访问地址
              SITE_URL: https://supa.pigsty
              API_EXTERNAL_URL: https://supa.pigsty
              SUPABASE_PUBLIC_URL: https://supa.pigsty

              # S3/MinIO 文件存储配置
              S3_BUCKET: data
              S3_ENDPOINT: https://sss.pigsty:9000
              S3_ACCESS_KEY: s3user_data
              S3_SECRET_KEY: S3User.Data
              MINIO_DOMAIN_IP: 10.10.10.10

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home    : { domain: i.pigsty }
      minio   : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
      supa    : { domain: supa.pigsty ,endpoint: "10.10.10.10:8000" ,websocket: true ,certbot: supa.pigsty }

    node_etc_hosts: [ "10.10.10.10 i.pigsty sss.pigsty supa.pigsty" ]

    # 使用 MinIO 作为 PostgreSQL 备份存储
    minio_endpoint: https://sss.pigsty:9000
    pgbackrest_method: minio
    pgbackrest_repo:
      minio:
        type: s3
        s3_endpoint: sss.pigsty
        s3_bucket: pgsql
        s3_key: pgbackrest
        s3_key_secret: S3User.Backup
        # ... 更多配置

    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    grafana_view_password: DBUser.Viewer
    pg_admin_password: DBUser.DBA
    pg_monitor_password: DBUser.Monitor
    pg_replication_password: DBUser.Replicator
    patroni_password: Patroni.API
    haproxy_admin_password: pigsty
    minio_secret_key: S3User.MinIO
    etcd_root_password: Etcd.Root

配置解读

supabase 模板提供了完整的 Supabase 自建方案,让您可以在自己的基础设施上运行这个开源 Firebase 替代品。

架构组成

  • PostgreSQL:Pigsty 托管的生产级 PostgreSQL(支持高可用)
  • Docker 容器:Supabase 无状态服务(Auth、Storage、Realtime、Edge Functions 等)
  • MinIO:S3 兼容的对象存储,用于文件存储和 PostgreSQL 备份
  • Nginx:反向代理和 HTTPS 终止

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 替代 Supabase 自带的数据库容器
  • 支持 PostgreSQL 高可用(可扩展为三节点集群)
  • 安装全部 Supabase 所需扩展(pg_net、pgjwt、pg_graphql、vector 等)
  • 集成 MinIO 对象存储用于文件上传和备份
  • 支持 HTTPS 和 Let’s Encrypt 自动证书

部署步骤

curl https://repo.pigsty.io/get | bash   # 下载 Pigsty
./configure -c supabase                   # 使用 supabase 配置模板
./install.yml                             # 安装 Pigsty、PostgreSQL、MinIO
./docker.yml                              # 安装 Docker
./app.yml                                 # 启动 Supabase 容器

访问方式

# Supabase Studio
https://supa.pigsty   (用户名: supabase, 密码: pigsty)

# 直接连接 PostgreSQL
psql postgres://supabase_admin:DBUser.Supa@10.10.10.10:5432/postgres

适用场景

  • 需要自建 BaaS (Backend as a Service) 平台
  • 希望完全掌控数据和基础设施
  • 需要企业级 PostgreSQL 高可用和备份
  • 对 Supabase 云服务有合规或成本考虑

注意事项

  • 必须修改 JWT_SECRET:使用至少 32 字符的随机字符串,并重新生成 ANON_KEY 和 SERVICE_ROLE_KEY
  • 需要配置正确的域名(SITE_URLAPI_EXTERNAL_URL
  • 生产环境建议启用 HTTPS(可使用 certbot 自动签发证书)
  • Docker 网络需要能访问 PostgreSQL(已配置 172.17.0.0/16 HBA 规则)

6.2 - dify

使用 Pigsty 托管的 PostgreSQL 部署 Dify AI 应用开发平台

dify 配置模板提供了自建 Dify AI 应用开发平台的参考配置,使用 Pigsty 托管的 PostgreSQL 和 pgvector 作为向量存储。

更多细节,请参考 Dify 部署教程


配置概览

  • 配置名称: dify(位于 app/dify.yml
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Dify
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c app/dify [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/dify.yml

all:
  children:

    # Dify 应用
    dify:
      hosts: { 10.10.10.10: {} }
      vars:
        app: dify
        apps:
          dify:
            file:
              - { path: /data/dify ,state: directory ,mode: 0755 }
            conf:
              NGINX_SERVER_NAME: dify.pigsty
              SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U  # 请修改!
              DIFY_PORT: 5001
              DIFY_DATA: /data/dify

              # 数据库配置
              DB_USERNAME: dify
              DB_PASSWORD: difyai123456
              DB_HOST: 10.10.10.10
              DB_PORT: 5432
              DB_DATABASE: dify

              # pgvector 向量存储配置
              VECTOR_STORE: pgvector
              PGVECTOR_HOST: 10.10.10.10
              PGVECTOR_PORT: 5432
              PGVECTOR_USER: dify
              PGVECTOR_PASSWORD: difyai123456
              PGVECTOR_DATABASE: dify

    # PostgreSQL 数据库
    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - { name: dify ,password: difyai123456 ,pgbouncer: true ,roles: [ dbrole_admin ] ,superuser: true }
        pg_databases:
          - { name: dify        ,owner: dify ,revokeconn: true ,comment: dify main database  }
          - { name: dify_plugin ,owner: dify ,revokeconn: true ,comment: dify plugin database }
        pg_hba_rules:
          - { user: dify ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow dify from docker' }

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    docker_enabled: true
    infra_portal:
      home : { domain: i.pigsty }
      dify : { domain: dify.pigsty ,endpoint: "10.10.10.10:5001" ,websocket: true ,certbot: dify.pigsty }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql
    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

dify 模板提供了 Dify AI 应用开发平台的一键部署方案。

Dify 是什么

  • 开源的 LLM 应用开发平台
  • 支持 RAG、Agent、Workflow 等 AI 应用模式
  • 提供可视化的 Prompt 编排和应用构建界面
  • 支持多种 LLM 后端(OpenAI、Claude、本地模型等)

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 替代 Dify 自带的数据库
  • 使用 pgvector 作为向量存储(替代 Weaviate/Qdrant)
  • 支持 HTTPS 和自定义域名
  • 数据持久化到独立目录 /data/dify

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/dify
vi pigsty.yml                    # 修改密码和域名
./install.yml                    # 安装 Pigsty 和 PostgreSQL
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Dify 容器

访问方式

# Dify Web 界面
http://dify.pigsty:5001

# 或通过 Nginx 代理
https://dify.pigsty

适用场景

  • 需要自建 AI 应用开发平台
  • 希望使用 PostgreSQL + pgvector 作为向量存储
  • 需要完全掌控 AI 应用的数据和基础设施
  • 企业内部 AI 应用开发和部署

注意事项

  • 必须修改 SECRET_KEY,使用 openssl rand -base64 42 生成
  • 需要配置 LLM API 密钥(如 OpenAI API Key)
  • Docker 网络需要能访问 PostgreSQL(已配置 172.17.0.0/16 HBA 规则)
  • 建议配置代理以加速 Python 包下载

6.3 - odoo

使用 Pigsty 托管的 PostgreSQL 部署 Odoo 开源 ERP 系统

odoo 配置模板提供了自建 Odoo 开源 ERP 系统的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。

更多细节,请参考 Odoo 部署教程


配置概览

  • 配置名称: odoo(位于 app/odoo.yml
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Odoo ERP
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c app/odoo [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/odoo.yml

all:
  children:

    # Odoo 应用 (默认用户密码: admin/admin)
    odoo:
      hosts: { 10.10.10.10: {} }
      vars:
        app: odoo
        apps:
          odoo:
            file:
              - { path: /data/odoo         ,state: directory, owner: 100, group: 101 }
              - { path: /data/odoo/webdata ,state: directory, owner: 100, group: 101 }
              - { path: /data/odoo/addons  ,state: directory, owner: 100, group: 101 }
            conf:
              PG_HOST: 10.10.10.10
              PG_PORT: 5432
              PG_USERNAME: odoo
              PG_PASSWORD: DBUser.Odoo
              ODOO_PORT: 8069
              ODOO_DATA: /data/odoo/webdata
              ODOO_ADDONS: /data/odoo/addons
              ODOO_DBNAME: odoo
              ODOO_VERSION: 19.0

    # Odoo 数据库
    pg-odoo:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-odoo
        pg_users:
          - { name: odoo    ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_admin ] ,createdb: true }
          - { name: odoo_ro ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_readonly ] }
          - { name: odoo_rw ,password: DBUser.Odoo ,pgbouncer: true ,roles: [ dbrole_readwrite ] }
        pg_databases:
          - { name: odoo ,owner: odoo ,revokeconn: true ,comment: odoo main database }
        pg_hba_rules:
          - { user: all ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow access from docker' }

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    docker_enabled: true
    infra_portal:
      home : { domain: i.pigsty }
      odoo : { domain: odoo.pigsty ,endpoint: "10.10.10.10:8069" ,websocket: true ,certbot: odoo.pigsty }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql
    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

odoo 模板提供了 Odoo 开源 ERP 系统的一键部署方案。

Odoo 是什么

  • 全球最流行的开源 ERP 系统
  • 覆盖 CRM、销售、采购、库存、财务、HR 等企业管理模块
  • 支持数千个社区和官方应用扩展
  • 提供 Web 界面和移动端支持

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 替代 Odoo 自带的数据库
  • 支持 Odoo 19.0 最新版本
  • 数据持久化到独立目录 /data/odoo
  • 支持自定义插件目录 /data/odoo/addons

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/odoo
vi pigsty.yml                    # 修改密码和域名
./install.yml                    # 安装 Pigsty 和 PostgreSQL
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Odoo 容器

访问方式

# Odoo Web 界面
http://odoo.pigsty:8069

# 默认管理员账号
用户名: admin
密码: admin (首次登录时设置)

适用场景

  • 中小企业 ERP 系统部署
  • 需要完整的企业管理功能套件
  • 希望自建而非使用 SaaS 服务
  • 需要企业级 PostgreSQL 高可用和备份

注意事项

  • Odoo 容器以 uid=100, gid=101 运行,数据目录需要正确的权限
  • 首次访问时需要创建数据库和设置管理员密码
  • 生产环境建议启用 HTTPS
  • 可通过 /data/odoo/addons 安装自定义模块

6.4 - electric

使用 Pigsty 托管的 PostgreSQL 部署 Electric 实时同步服务

electric 配置模板提供了部署 Electric SQL 实时同步服务的参考配置,实现 PostgreSQL 到客户端的实时数据同步。

更多细节,请参考 Electric 部署教程


配置概览

  • 配置名称: electric(位于 app/electric.yml
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Electric 实时同步
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c app/electric [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/electric.yml

all:
  children:

    infra:
      hosts: { 10.10.10.10: { infra_seq: 1 } }
      vars:
        app: electric
        apps:
          electric:
            conf:
              DATABASE_URL: 'postgresql://electric:DBUser.Electric@10.10.10.10:5432/electric?sslmode=require'
              ELECTRIC_PORT: 8002
              ELECTRIC_PROMETHEUS_PORT: 8003
              ELECTRIC_INSECURE: true

    etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - { name: electric ,password: DBUser.Electric ,pgbouncer: true ,replication: true ,roles: [dbrole_admin] }
        pg_databases:
          - { name: electric ,owner: electric }
        pg_hba_rules:
          - { user: electric ,db: replication ,addr: infra ,auth: ssl ,title: 'allow electric ssl access' }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    docker_enabled: true
    infra_portal:
      home     : { domain: i.pigsty }
      electric : { domain: elec.pigsty ,endpoint: "${admin_ip}:8002" ,websocket: true }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql
    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

electric 模板提供了 Electric SQL 实时同步服务的一键部署方案。

Electric 是什么

  • PostgreSQL 到客户端的实时数据同步服务
  • 支持离线优先 (Local-first) 应用架构
  • 通过逻辑复制实时同步数据变更
  • 提供 HTTP API 供前端应用消费

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 作为数据源
  • 通过逻辑复制 (Logical Replication) 捕获数据变更
  • 支持 SSL 加密连接
  • 内置 Prometheus 指标端点

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/electric
vi pigsty.yml                    # 修改密码和域名
./install.yml                    # 安装 Pigsty 和 PostgreSQL
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Electric 容器

访问方式

# Electric API 端点
http://elec.pigsty:8002

# Prometheus 指标
http://elec.pigsty:8003/metrics

# 在前端应用中使用
const electric = new ElectricClient({
  url: 'http://elec.pigsty:8002'
});

适用场景

  • 构建离线优先 (Local-first) 应用
  • 需要实时数据同步到客户端
  • 移动应用和 PWA 的数据同步
  • 协作应用的实时更新

注意事项

  • Electric 用户需要 replication 权限
  • 需要启用 PostgreSQL 逻辑复制
  • 生产环境建议使用 SSL 连接(已配置 sslmode=require
  • 可通过 ELECTRIC_INSECURE: false 启用安全模式

6.5 - maybe

使用 Pigsty 托管的 PostgreSQL 部署 Maybe 个人财务管理系统

maybe 配置模板提供了部署 Maybe 开源个人财务管理系统的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。

更多细节,请参考 Maybe 部署教程


配置概览

  • 配置名称: maybe(位于 app/maybe.yml
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Maybe 财务管理
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c app/maybe [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/maybe.yml

all:
  children:

    # Maybe 应用 (个人财务管理)
    maybe:
      hosts: { 10.10.10.10: {} }
      vars:
        app: maybe
        apps:
          maybe:
            file:
              - { path: /data/maybe         ,state: directory ,mode: 0755 }
              - { path: /data/maybe/storage ,state: directory ,mode: 0755 }
            conf:
              MAYBE_VERSION: latest
              MAYBE_PORT: 5002
              MAYBE_DATA: /data/maybe
              APP_DOMAIN: maybe.pigsty

              # 必须修改:使用 openssl rand -hex 64 生成
              SECRET_KEY_BASE: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U

              # 数据库配置
              DB_HOST: 10.10.10.10
              DB_PORT: 5432
              DB_USERNAME: maybe
              DB_PASSWORD: MaybeFinance2025
              DB_DATABASE: maybe_production

    # Maybe 数据库
    pg-maybe:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-maybe
        pg_users:
          - { name: maybe    ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_admin ] ,createdb: true }
          - { name: maybe_ro ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_readonly ] }
          - { name: maybe_rw ,password: MaybeFinance2025 ,pgbouncer: true ,roles: [ dbrole_readwrite ] }
        pg_databases:
          - { name: maybe_production ,owner: maybe ,revokeconn: true ,comment: maybe main database }
        pg_hba_rules:
          - { user: maybe ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow maybe from docker' }

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    docker_enabled: true
    infra_portal:
      home  : { domain: i.pigsty }
      maybe : { domain: maybe.pigsty ,endpoint: "10.10.10.10:5002" ,websocket: true }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

maybe 模板提供了 Maybe 开源个人财务管理系统的一键部署方案。

Maybe 是什么

  • 开源的个人和家庭财务管理系统
  • 支持多账户、多币种资产追踪
  • 提供投资组合分析和净值计算
  • 美观现代的 Web 界面

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 替代 Maybe 自带的数据库
  • 数据持久化到独立目录 /data/maybe
  • 支持 HTTPS 和自定义域名
  • 提供多用户权限管理

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/maybe
vi pigsty.yml                    # 修改密码和域名
./install.yml                    # 安装 Pigsty 和 PostgreSQL
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Maybe 容器

访问方式

# Maybe Web 界面
http://maybe.pigsty:5002

# 或通过 Nginx 代理
https://maybe.pigsty

适用场景

  • 个人或家庭财务管理
  • 投资组合追踪和分析
  • 多账户资产汇总
  • 替代 Mint、YNAB 等商业服务

注意事项

  • 必须修改 SECRET_KEY_BASE,使用 openssl rand -hex 64 生成
  • 首次访问时需要注册管理员账号
  • 可选配置 Synth API 以获取股票价格数据
  • Docker 网络需要能访问 PostgreSQL

6.6 - teable

使用 Pigsty 托管的 PostgreSQL 部署 Teable 开源 Airtable 替代品

teable 配置模板提供了部署 Teable 开源无代码数据库的参考配置,使用 Pigsty 托管的 PostgreSQL 作为数据库。

更多细节,请参考 Teable 部署教程


配置概览

  • 配置名称: teable(位于 app/teable.yml
  • 节点数量: 单节点
  • 配置说明:使用 Pigsty 托管的 PostgreSQL 部署 Teable
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
  • 相关配置:meta

启用方式:

./configure -c app/teable [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/teable.yml

all:
  children:

    # Teable 应用
    teable:
      hosts: { 10.10.10.10: {} }
      vars:
        app: teable
        apps:
          teable:
            conf:
              POSTGRES_HOST: "10.10.10.10"
              POSTGRES_PORT: "5432"
              POSTGRES_DB: "teable"
              POSTGRES_USER: "dbuser_teable"
              POSTGRES_PASSWORD: "DBUser.Teable"
              PRISMA_DATABASE_URL: "postgresql://dbuser_teable:DBUser.Teable@10.10.10.10:5432/teable"
              PUBLIC_ORIGIN: "http://tea.pigsty"
              PUBLIC_DATABASE_PROXY: "10.10.10.10:5432"
              TIMEZONE: "UTC"

    # Teable 数据库
    pg-meta:
      hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
      vars:
        pg_cluster: pg-meta
        pg_users:
          - { name: dbuser_teable ,password: DBUser.Teable ,pgbouncer: true ,roles: [ dbrole_admin ] ,superuser: true }
        pg_databases:
          - { name: teable ,owner: dbuser_teable ,comment: teable database }
        pg_hba_rules:
          - { user: teable ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow teable from docker' }

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
    minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    docker_enabled: true
    infra_portal:
      home   : { domain: i.pigsty }
      teable : { domain: tea.pigsty ,endpoint: "10.10.10.10:8890" ,websocket: true ,certbot: tea.pigsty }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql
    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

teable 模板提供了 Teable 开源无代码数据库的一键部署方案。

Teable 是什么

  • 开源的 Airtable 替代品
  • 基于 PostgreSQL 的无代码数据库
  • 支持表格、看板、日历、表单等多种视图
  • 提供 API 和自动化工作流

关键特性

  • 使用 Pigsty 管理的 PostgreSQL 作为底层存储
  • 数据实际存储在真实的 PostgreSQL 表中
  • 支持 SQL 直接查询数据
  • 可与其他 PostgreSQL 工具和扩展集成

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/teable
vi pigsty.yml                    # 修改密码和域名
./install.yml                    # 安装 Pigsty 和 PostgreSQL
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Teable 容器

访问方式

# Teable Web 界面
http://tea.pigsty:8890

# 或通过 Nginx 代理
https://tea.pigsty

# 同时可以直接 SQL 访问底层数据
psql postgresql://dbuser_teable:DBUser.Teable@10.10.10.10:5432/teable

适用场景

  • 需要 Airtable 类似功能但希望自建
  • 团队协作数据管理
  • 需要同时支持 API 和 SQL 访问
  • 希望数据存储在真实 PostgreSQL 中

注意事项

  • Teable 用户需要 superuser 权限
  • 需要正确配置 PUBLIC_ORIGIN 为外部访问地址
  • 支持邮件通知(可选配置 SMTP)
  • Docker 网络需要能访问 PostgreSQL

6.7 - registry

使用 Pigsty 部署 Docker Registry 镜像代理和私有仓库

registry 配置模板提供了部署 Docker Registry 镜像代理的参考配置,可用作 Docker Hub 镜像加速或私有镜像仓库。

更多细节,请参考 Registry 部署教程


配置概览

  • 配置名称: registry(位于 app/registry.yml
  • 节点数量: 单节点
  • 配置说明:部署 Docker Registry 镜像代理和私有仓库
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64, aarch64
  • 相关配置:meta

启用方式:

./configure -c app/registry [-i <primary_ip>]

配置内容

源文件地址:pigsty/conf/app/registry.yml

all:
  children:

    # Docker Registry 镜像代理
    registry:
      hosts: { 10.10.10.10: {} }
      vars:
        app: registry
        apps:
          registry:
            file:
              - { path: /data/registry ,state: directory ,mode: 0755 }
            conf:
              REGISTRY_DATA: /data/registry
              REGISTRY_PORT: 5000
              REGISTRY_UI_PORT: 5080
              REGISTRY_STORAGE_DELETE_ENABLED: true
              REGISTRY_LOG_LEVEL: info
              REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
              REGISTRY_PROXY_TTL: 168h    # 缓存 7 天

    infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
    etcd:  { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }

  vars:
    version: v4.0.0
    admin_ip: 10.10.10.10
    region: default
    infra_portal:
      home : { domain: i.pigsty }
      registry    : { domain: d.pigsty   ,endpoint: "10.10.10.10:5000" ,certbot: d.pigsty }
      registry-ui : { domain: dui.pigsty ,endpoint: "10.10.10.10:5080" }

    repo_enabled: false
    node_repo_modules: node,infra,pgsql
    pg_version: 18

    #----------------------------------------------#
    # PASSWORD
    #----------------------------------------------#
    grafana_admin_password: pigsty
    pg_admin_password: DBUser.DBA
    # ... 更多密码配置

配置解读

registry 模板提供了 Docker Registry 镜像代理的一键部署方案。

Registry 是什么

  • Docker 官方的镜像仓库实现
  • 可作为 Docker Hub 的拉取代理(Pull-through Cache)
  • 也可作为私有镜像仓库使用
  • 支持镜像缓存和本地存储

关键特性

  • 作为 Docker Hub 的代理缓存,加速镜像拉取
  • 缓存镜像到本地存储 /data/registry
  • 提供 Web UI 界面查看缓存的镜像
  • 支持自定义缓存过期时间

部署步骤

curl -fsSL https://repo.pigsty.io/get | bash
./configure -c app/registry
vi pigsty.yml                    # 修改域名
./install.yml                    # 安装 Pigsty 基础设施
./docker.yml                     # 安装 Docker
./app.yml                        # 启动 Registry 容器

配置 Docker 客户端

# 编辑 /etc/docker/daemon.json
{
  "registry-mirrors": ["https://d.pigsty"],
  "insecure-registries": ["d.pigsty"]
}

# 重启 Docker
sudo systemctl restart docker

访问方式

# Registry API
https://d.pigsty/v2/_catalog

# Web UI
http://dui.pigsty:5080

# 拉取镜像(自动使用代理)
docker pull nginx:latest

适用场景

  • 加速 Docker 镜像拉取(尤其在中国大陆)
  • 减少对外网络依赖
  • 企业内部私有镜像仓库
  • 离线环境镜像分发

注意事项

  • 需要足够的磁盘空间存储缓存镜像
  • 默认缓存 7 天(REGISTRY_PROXY_TTL: 168h
  • 可配置 HTTPS 证书(通过 certbot)
  • 也可作为推送目标存储私有镜像

7 - 其他模板

用于特定场景的配置模板,例如离线软件包构建、生产模拟测试等

用于特定场景的配置模板,例如离线软件包构建、生产模拟测试等。

模板说明
oss开源版离线软件包构建环境
pro专业版多版本构建环境
simu36节点生产环境仿真配置

7.1 - oss

Pigsty 开源版离线软件包构建环境配置

oss 配置模板是 Pigsty 开源版离线软件包的构建环境配置,用于在多个操作系统上批量构建离线安装包。

此配置仅供开发者和贡献者使用。


配置概览

  • 配置名称: oss(位于 build/oss.yml
  • 节点数量: 六节点(el9, el10, d12, d13, u22, u24)
  • 配置说明:Pigsty 开源版离线软件包构建环境
  • 适用系统:el9, el10, d12, d13, u22, u24
  • 适用架构:x86_64

启用方式:

cp conf/build/oss.yml pigsty.yml

备注:这是一个固定 IP 地址的构建模板,仅供内部使用


配置内容

源文件地址:pigsty/conf/build/oss.yml

all:
  vars:
    version: v4.0.0
    admin_ip: 10.10.10.24
    region: china
    etcd_clean: true
    proxy_env:
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn,*.pigsty.cc"

    # 构建规格
    pg_version: 18
    cache_pkg_dir: 'dist/${version}'
    repo_modules: infra,node,pgsql
    repo_packages: [ node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules ]
    repo_extra_packages: [pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
    pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap, pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]

  children:
    el9:  { hosts: { 10.10.10.9:  { pg_cluster: el9  ,pg_seq: 1 ,pg_role: primary }}}
    el10: { hosts: { 10.10.10.10: { pg_cluster: el10 ,pg_seq: 1 ,pg_role: primary }}}
    d12:  { hosts: { 10.10.10.12: { pg_cluster: d12  ,pg_seq: 1 ,pg_role: primary }}}
    d13:  { hosts: { 10.10.10.13: { pg_cluster: d13  ,pg_seq: 1 ,pg_role: primary }}}
    u22:  { hosts: { 10.10.10.22: { pg_cluster: u22  ,pg_seq: 1 ,pg_role: primary }}}
    u24:  { hosts: { 10.10.10.24: { pg_cluster: u24  ,pg_seq: 1 ,pg_role: primary }}}
    etcd: { hosts: { 10.10.10.24: { etcd_seq: 1 }}, vars: { etcd_cluster: etcd }}
    infra:
      hosts:
        10.10.10.9:  { infra_seq: 2, admin_ip: 10.10.10.9  ,ansible_host: el9  }
        10.10.10.10: { infra_seq: 3, admin_ip: 10.10.10.10 ,ansible_host: el10 }
        10.10.10.12: { infra_seq: 4, admin_ip: 10.10.10.12 ,ansible_host: d12  }
        10.10.10.13: { infra_seq: 5, admin_ip: 10.10.10.13 ,ansible_host: d13  }
        10.10.10.22: { infra_seq: 6, admin_ip: 10.10.10.22 ,ansible_host: u22  }
        10.10.10.24: { infra_seq: 7, admin_ip: 10.10.10.24 ,ansible_host: u24  }
      vars: { node_conf: oltp }

配置解读

oss 模板是 Pigsty 开源版离线软件包的构建配置。

构建内容

  • PostgreSQL 18 及所有分类扩展包
  • 基础设施软件包(Prometheus、Grafana、Nginx 等)
  • 节点软件包(监控代理、工具等)
  • 额外模块(extra-modules)

支持的操作系统

  • EL9 (Rocky/Alma/RHEL 9)
  • EL10 (Rocky 10 / RHEL 10)
  • Debian 12 (Bookworm)
  • Debian 13 (Trixie)
  • Ubuntu 22.04 (Jammy)
  • Ubuntu 24.04 (Noble)

构建流程

# 1. 准备构建环境
cp conf/build/oss.yml pigsty.yml

# 2. 在各节点上下载软件包
./infra.yml -t repo_build

# 3. 打包离线安装包
make cache

适用场景

  • Pigsty 开发者构建新版本
  • 贡献者测试新扩展
  • 企业用户自定义离线包

注意事项

  • 构建需要访问上游软件源
  • 可配置 proxy_env 使用代理
  • 输出目录为 dist/${version}/
  • 需要在所有目标操作系统上分别构建

7.2 - pro

Pigsty 专业版离线软件包构建环境配置(多版本)

pro 配置模板是 Pigsty 专业版离线软件包的构建环境配置,包含 PostgreSQL 13-18 全版本及额外商业组件。

此配置仅供开发者和贡献者使用。


配置概览

  • 配置名称: pro(位于 build/pro.yml
  • 节点数量: 六节点(el9, el10, d12, d13, u22, u24)
  • 配置说明:Pigsty 专业版离线软件包构建环境(多版本)
  • 适用系统:el9, el10, d12, d13, u22, u24
  • 适用架构:x86_64

启用方式:

cp conf/build/pro.yml pigsty.yml

备注:这是一个固定 IP 地址的构建模板,仅供内部使用


配置内容

源文件地址:pigsty/conf/build/pro.yml

all:
  vars:
    version: v4.0.0
    admin_ip: 10.10.10.24
    region: china
    etcd_clean: true
    proxy_env:
      no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn,*.pigsty.cc"

    # 构建规格
    pg_version: 18
    cache_pkg_dir: 'dist/${version}/pro'
    repo_modules: infra,node,pgsql
    pg_extensions: []
    repo_packages: [
      node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules,
      # PostgreSQL 18 全部扩展
      pg18-full,pg18-time,pg18-gis,pg18-rag,pg18-fts,pg18-olap,pg18-feat,pg18-lang,pg18-type,pg18-util,pg18-func,pg18-admin,pg18-stat,pg18-sec,pg18-fdw,pg18-sim,pg18-etl,
      # PostgreSQL 17 全部扩展
      pg17-full,pg17-time,pg17-gis,pg17-rag,pg17-fts,pg17-olap,pg17-feat,pg17-lang,pg17-type,pg17-util,pg17-func,pg17-admin,pg17-stat,pg17-sec,pg17-fdw,pg17-sim,pg17-etl,
      # PostgreSQL 16 全部扩展
      pg16-full,pg16-time,pg16-gis,pg16-rag,pg16-fts,pg16-olap,pg16-feat,pg16-lang,pg16-type,pg16-util,pg16-func,pg16-admin,pg16-stat,pg16-sec,pg16-fdw,pg16-sim,pg16-etl,
      # PostgreSQL 15 全部扩展
      pg15-full,pg15-time,pg15-gis,pg15-rag,pg15-fts,pg15-olap,pg15-feat,pg15-lang,pg15-type,pg15-util,pg15-func,pg15-admin,pg15-stat,pg15-sec,pg15-fdw,pg15-sim,pg15-etl,
      # PostgreSQL 14 全部扩展
      pg14-full,pg14-time,pg14-gis,pg14-rag,pg14-fts,pg14-olap,pg14-feat,pg14-lang,pg14-type,pg14-util,pg14-func,pg14-admin,pg14-stat,pg14-sec,pg14-fdw,pg14-sim,pg14-etl,
      # PostgreSQL 13 全部扩展
      pg13-full,pg13-time,pg13-gis,pg13-rag,pg13-fts,pg13-olap,pg13-feat,pg13-lang,pg13-type,pg13-util,pg13-func,pg13-admin,pg13-stat,pg13-sec,pg13-fdw,pg13-sim,pg13-etl,
      # 额外组件
      infra-extra, kafka, java-runtime, sealos, tigerbeetle, polardb, ivorysql
    ]

  children:
    el9:  { hosts: { 10.10.10.9:  { pg_cluster: el9  ,pg_seq: 1 ,pg_role: primary }}}
    el10: { hosts: { 10.10.10.10: { pg_cluster: el10 ,pg_seq: 1 ,pg_role: primary }}}
    d12:  { hosts: { 10.10.10.12: { pg_cluster: d12  ,pg_seq: 1 ,pg_role: primary }}}
    d13:  { hosts: { 10.10.10.13: { pg_cluster: d13  ,pg_seq: 1 ,pg_role: primary }}}
    u22:  { hosts: { 10.10.10.22: { pg_cluster: u22  ,pg_seq: 1 ,pg_role: primary }}}
    u24:  { hosts: { 10.10.10.24: { pg_cluster: u24  ,pg_seq: 1 ,pg_role: primary }}}
    etcd: { hosts: { 10.10.10.24: { etcd_seq: 1 }}, vars: { etcd_cluster: etcd }}
    infra:
      hosts:
        10.10.10.9:  { infra_seq: 1, admin_ip: 10.10.10.9  ,ansible_host: el9  }
        10.10.10.10: { infra_seq: 2, admin_ip: 10.10.10.10 ,ansible_host: el10 }
        10.10.10.12: { infra_seq: 3, admin_ip: 10.10.10.12 ,ansible_host: d12  }
        10.10.10.13: { infra_seq: 4, admin_ip: 10.10.10.13 ,ansible_host: d13  }
        10.10.10.22: { infra_seq: 5, admin_ip: 10.10.10.22 ,ansible_host: u22  }
        10.10.10.24: { infra_seq: 6, admin_ip: 10.10.10.24 ,ansible_host: u24  }
      vars: { node_conf: oltp }

配置解读

pro 模板是 Pigsty 专业版离线软件包的构建配置,比开源版包含更多内容。

与 OSS 版的区别

  • 包含 PostgreSQL 13-18 全部六个大版本
  • 包含额外商业/企业组件:Kafka、PolarDB、IvorySQL 等
  • 包含 Java 运行时和 Sealos 等工具
  • 输出目录为 dist/${version}/pro/

构建内容

  • PostgreSQL 13、14、15、16、17、18 全版本
  • 每个版本的全部分类扩展包
  • Kafka 消息队列
  • PolarDB 和 IvorySQL 内核
  • TigerBeetle 分布式数据库
  • Sealos 容器平台

适用场景

  • 企业客户需要多版本支持
  • 需要 Oracle/MySQL 兼容内核
  • 需要 Kafka 消息队列集成
  • 需要长期支持版本(LTS)

构建流程

# 1. 准备构建环境
cp conf/build/pro.yml pigsty.yml

# 2. 在各节点上下载软件包
./infra.yml -t repo_build

# 3. 打包离线安装包
make cache-pro

注意事项

  • 专业版离线包体积较大(约 5-8 GB)
  • 构建时间较长(需要下载所有版本)
  • 部分组件可能需要额外授权
  • 输出目录为 dist/${version}/pro/

7.3 - simu

36 节点生产环境仿真配置,用于大规模部署测试

配置概览

  • 配置名称: simu
  • 节点数量: 36 节点,pigsty/vagrant/spec/simu.rb
  • 配置说明:43 节点的生产环境仿真配置,需要强大的宿主机方可运行。
  • 适用系统:el8, el9, d12, u22, u24
  • 适用架构:x86_64
cp -f conf/simu.yml pigsty.yml

配置内容

源文件地址:pigsty/conf/prod.yml

all:

  children:

    #==========================================================#
    # infra: 2 nodes
    #==========================================================#
    # ./infra.yml -l infra
    # ./docker.yml -l infra (optional)
    infra:
      hosts:
        10.10.10.10: {}
        10.10.10.11: {}
      vars:
        docker_enabled: true
        node_conf: oltp         # use oltp template for infra nodes
        pg_conf: oltp.yml       # use oltp template for infra pgsql
        pg_exporters:           # bin/pgmon-add pg-meta2/pg-test2/pg-src2/pg-dst2
          20001: {pg_cluster: pg-meta2   ,pg_seq: 1 ,pg_host: 10.10.10.10, pg_databases: [{ name: meta }]}
          20002: {pg_cluster: pg-meta2   ,pg_seq: 2 ,pg_host: 10.10.10.11, pg_databases: [{ name: meta }]}

          20003: {pg_cluster: pg-test2   ,pg_seq: 1 ,pg_host: 10.10.10.41, pg_databases: [{ name: test }]}
          20004: {pg_cluster: pg-test2   ,pg_seq: 2 ,pg_host: 10.10.10.42, pg_databases: [{ name: test }]}
          20005: {pg_cluster: pg-test2   ,pg_seq: 3 ,pg_host: 10.10.10.43, pg_databases: [{ name: test }]}
          20006: {pg_cluster: pg-test2   ,pg_seq: 4 ,pg_host: 10.10.10.44, pg_databases: [{ name: test }]}

          20007: {pg_cluster: pg-src2    ,pg_seq: 1 ,pg_host: 10.10.10.45, pg_databases: [{ name: src }]}
          20008: {pg_cluster: pg-src2    ,pg_seq: 2 ,pg_host: 10.10.10.46, pg_databases: [{ name: src }]}
          20009: {pg_cluster: pg-src2    ,pg_seq: 3 ,pg_host: 10.10.10.47, pg_databases: [{ name: src }]}

          20010: {pg_cluster: pg-dst2    ,pg_seq: 3 ,pg_host: 10.10.10.48, pg_databases: [{ name: dst }]}
          20011: {pg_cluster: pg-dst2    ,pg_seq: 4 ,pg_host: 10.10.10.49, pg_databases: [{ name: dst }]}


    #==========================================================#
    # nodes: 36 nodes
    #==========================================================#
    # ./node.yml
    nodes:
      hosts:
        10.10.10.10 : { nodename: meta1  ,node_cluster: meta   ,pg_cluster: pg_meta  ,pg_seq: 1 ,pg_role: primary, infra_seq: 1 }
        10.10.10.11 : { nodename: meta2  ,node_cluster: meta   ,pg_cluster: pg_meta  ,pg_seq: 2 ,pg_role: replica, infra_seq: 2 }
        10.10.10.12 : { nodename: pg12   ,node_cluster: pg12   ,pg_cluster: pg-v12   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.13 : { nodename: pg13   ,node_cluster: pg13   ,pg_cluster: pg-v13   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.14 : { nodename: pg14   ,node_cluster: pg14   ,pg_cluster: pg-v14   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.15 : { nodename: pg15   ,node_cluster: pg15   ,pg_cluster: pg-v15   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.16 : { nodename: pg16   ,node_cluster: pg16   ,pg_cluster: pg-v16   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.17 : { nodename: pg17   ,node_cluster: pg17   ,pg_cluster: pg-v17   ,pg_seq: 1 ,pg_role: primary }
        10.10.10.18 : { nodename: proxy1 ,node_cluster: proxy  ,vip_address: 10.10.10.20 ,vip_vrid: 20 ,vip_interface: eth1 ,vip_role: master }
        10.10.10.19 : { nodename: proxy2 ,node_cluster: proxy  ,vip_address: 10.10.10.20 ,vip_vrid: 20 ,vip_interface: eth1 ,vip_role: backup }
        10.10.10.21 : { nodename: minio1 ,node_cluster: minio  ,minio_cluster: minio ,minio_seq: 1 ,etcd_cluster: etcd ,etcd_seq: 1}
        10.10.10.22 : { nodename: minio2 ,node_cluster: minio  ,minio_cluster: minio ,minio_seq: 2 ,etcd_cluster: etcd ,etcd_seq: 2}
        10.10.10.23 : { nodename: minio3 ,node_cluster: minio  ,minio_cluster: minio ,minio_seq: 3 ,etcd_cluster: etcd ,etcd_seq: 3}
        10.10.10.24 : { nodename: minio4 ,node_cluster: minio  ,minio_cluster: minio ,minio_seq: 4 ,etcd_cluster: etcd ,etcd_seq: 4}
        10.10.10.25 : { nodename: minio5 ,node_cluster: minio  ,minio_cluster: minio ,minio_seq: 5 ,etcd_cluster: etcd ,etcd_seq: 5}
        10.10.10.40 : { nodename: node40 ,node_id_from_pg: true }
        10.10.10.41 : { nodename: node41 ,node_id_from_pg: true }
        10.10.10.42 : { nodename: node42 ,node_id_from_pg: true }
        10.10.10.43 : { nodename: node43 ,node_id_from_pg: true }
        10.10.10.44 : { nodename: node44 ,node_id_from_pg: true }
        10.10.10.45 : { nodename: node45 ,node_id_from_pg: true }
        10.10.10.46 : { nodename: node46 ,node_id_from_pg: true }
        10.10.10.47 : { nodename: node47 ,node_id_from_pg: true }
        10.10.10.48 : { nodename: node48 ,node_id_from_pg: true }
        10.10.10.49 : { nodename: node49 ,node_id_from_pg: true }
        10.10.10.50 : { nodename: node50 ,node_id_from_pg: true }
        10.10.10.51 : { nodename: node51 ,node_id_from_pg: true }
        10.10.10.52 : { nodename: node52 ,node_id_from_pg: true }
        10.10.10.53 : { nodename: node53 ,node_id_from_pg: true }
        10.10.10.54 : { nodename: node54 ,node_id_from_pg: true }
        10.10.10.55 : { nodename: node55 ,node_id_from_pg: true }
        10.10.10.56 : { nodename: node56 ,node_id_from_pg: true }
        10.10.10.57 : { nodename: node57 ,node_id_from_pg: true }
        10.10.10.58 : { nodename: node58 ,node_id_from_pg: true }
        10.10.10.59 : { nodename: node59 ,node_id_from_pg: true }
        10.10.10.88 : { nodename: test   }

    #==========================================================#
    # etcd: 5 nodes used as dedicated minio cluster
    #==========================================================#
    # ./etcd.yml -l etcd;
    etcd:
      hosts:
        10.10.10.21: {}
        10.10.10.22: {}
        10.10.10.23: {}
        10.10.10.24: {}
        10.10.10.25: {}
      vars: {}

    #==========================================================#
    # minio: 3 nodes used as dedicated minio cluster
    #==========================================================#
    # ./minio.yml -l minio;
    minio:
      hosts:
        10.10.10.21: {}
        10.10.10.22: {}
        10.10.10.23: {}
        10.10.10.24: {}
        10.10.10.25: {}
      vars:
        minio_data: '/data{1...4}' # 5 node x 4 disk

    #==========================================================#
    # proxy: 2 nodes used as dedicated haproxy server
    #==========================================================#
    # ./node.yml -l proxy
    proxy:
      hosts:
        10.10.10.18: {}
        10.10.10.19: {}
      vars:
        vip_enabled: true
        haproxy_services:      # expose minio service : sss.pigsty:9000
          - name: minio        # [REQUIRED] service name, unique
            port: 9000         # [REQUIRED] service port, unique
            balance: leastconn # Use leastconn algorithm and minio health check
            options: [ "option httpchk", "option http-keep-alive", "http-check send meth OPTIONS uri /minio/health/live", "http-check expect status 200" ]
            servers:           # reload service with ./node.yml -t haproxy_config,haproxy_reload
              - { name: minio-1 ,ip: 10.10.10.21 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-2 ,ip: 10.10.10.22 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-3 ,ip: 10.10.10.23 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-4 ,ip: 10.10.10.24 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }
              - { name: minio-5 ,ip: 10.10.10.25 ,port: 9000 ,options: 'check-ssl ca-file /etc/pki/ca.crt check port 9000' }

    #==========================================================#
    # pg-meta: reuse infra node as meta cmdb
    #==========================================================#
    # ./pgsql.yml -l pg-meta
    pg-meta:
      hosts:
        10.10.10.10: { pg_seq: 1 , pg_role: primary }
        10.10.10.11: { pg_seq: 2 , pg_role: replica }
      vars:
        pg_cluster: pg-meta
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.2/24
        pg_vip_interface: eth1
        pg_users:
          - {name: dbuser_meta     ,password: DBUser.Meta     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: pigsty admin user }
          - {name: dbuser_view     ,password: DBUser.Viewer   ,pgbouncer: true ,roles: [dbrole_readonly] ,comment: read-only viewer for meta database }
          - {name: dbuser_grafana  ,password: DBUser.Grafana  ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for grafana database    }
          - {name: dbuser_bytebase ,password: DBUser.Bytebase ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for bytebase database   }
          - {name: dbuser_kong     ,password: DBUser.Kong     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for kong api gateway    }
          - {name: dbuser_gitea    ,password: DBUser.Gitea    ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for gitea service       }
          - {name: dbuser_wiki     ,password: DBUser.Wiki     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for wiki.js service     }
          - {name: dbuser_noco     ,password: DBUser.Noco     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for nocodb service      }
        pg_databases:
          - { name: meta ,baseline: cmdb.sql ,comment: pigsty meta database ,schemas: [pigsty] ,extensions: [{name: vector}]}
          - { name: grafana  ,owner: dbuser_grafana  ,revokeconn: true ,comment: grafana primary database }
          - { name: bytebase ,owner: dbuser_bytebase ,revokeconn: true ,comment: bytebase primary database }
          - { name: kong     ,owner: dbuser_kong     ,revokeconn: true ,comment: kong the api gateway database }
          - { name: gitea    ,owner: dbuser_gitea    ,revokeconn: true ,comment: gitea meta database }
          - { name: wiki     ,owner: dbuser_wiki     ,revokeconn: true ,comment: wiki meta database }
          - { name: noco     ,owner: dbuser_noco     ,revokeconn: true ,comment: nocodb database }
        pg_hba_rules:
          - { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
        pg_libs: 'pg_stat_statements, auto_explain' # add timescaledb to shared_preload_libraries
        node_crontab:  # make a full backup on monday 1am, and an incremental backup during weekdays
          - '00 01 * * 1 postgres /pg/bin/pg-backup full'
          - '00 01 * * 2,3,4,5,6,7 postgres /pg/bin/pg-backup'

    #==========================================================#
    # pg-v13 - v17
    #==========================================================#
    # ./pgsql.yml -l pg-v*
    pg-v12:
      hosts: { 10.10.10.12: {}}
      vars:
        pg_version: 13
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10012
        pg_default_services:  [{ name: primary ,port: 10012 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    pg-v13:
      hosts: { 10.10.10.13: {}}
      vars:
        pg_version: 13
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10013
        pg_default_services:  [{ name: primary ,port: 10013 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    pg-v14:
      hosts: { 10.10.10.14: {}}
      vars:
        pg_version: 14
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10014
        pg_default_services:  [{ name: primary ,port: 10014 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    pg-v15:
      hosts: { 10.10.10.15: {}}
      vars:
        pg_version: 15
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10015
        pg_default_services:  [{ name: primary ,port: 10015 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    pg-v16:
      hosts: { 10.10.10.16: {}}
      vars:
        pg_version: 16
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10016
        pg_default_services:  [{ name: primary ,port: 10016 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    pg-v17:
      hosts: { 10.10.10.17: {}}
      vars:
        pg_version: 17
        pg_service_provider: proxy       # use load balancer on group `proxy` with port 10017
        pg_default_services:  [{ name: primary ,port: 10017 ,dest: postgres  ,check: /primary   ,selector: "[]" }]

    #==========================================================#
    # pg-pitr: single node
    #==========================================================#
    # ./pgsql.yml -l pg-pitr
    pg-pitr:
      hosts:
        10.10.10.40: { pg_seq: 1 ,pg_role: primary }
      vars:
        pg_cluster: pg-pitr
        pg_databases: [{ name: test }]

    #==========================================================#
    # pg-test: dedicate 4 node testing cluster
    #==========================================================#
    # ./pgsql.yml -l pg-test
    pg-test:
      hosts:
        10.10.10.41: { pg_seq: 1 ,pg_role: primary }
        10.10.10.42: { pg_seq: 2 ,pg_role: replica }
        10.10.10.43: { pg_seq: 3 ,pg_role: replica }
        10.10.10.44: { pg_seq: 4 ,pg_role: replica }
      vars:
        pg_cluster: pg-test
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.3/24
        pg_vip_interface: eth1
        pg_users:  [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
        pg_databases: [{ name: test }]


    #==========================================================#
    # pg-src: dedicate 3 node testing cluster
    #==========================================================#
    # ./pgsql.yml -l pg-src
    pg-src:
      hosts:
        10.10.10.45: { pg_seq: 1 ,pg_role: primary }
        10.10.10.46: { pg_seq: 2 ,pg_role: replica }
        10.10.10.47: { pg_seq: 3 ,pg_role: replica }
      vars:
        pg_cluster: pg-src
        #pg_version: 14
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.4/24
        pg_vip_interface: eth1
        pg_users:  [{ name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] }]
        pg_databases: [{ name: src }]


    #==========================================================#
    # pg-dst: dedicate 2 node testing cluster
    #==========================================================#
    # ./pgsql.yml -l pg-dst
    pg-dst:
      hosts:
        10.10.10.48: { pg_seq: 1 ,pg_role: primary } # 8C 8G
        10.10.10.49: { pg_seq: 2 ,pg_role: replica } # 1C 2G
      vars:
        pg_cluster: pg-dst
        pg_vip_enabled: true
        pg_vip_address: 10.10.10.5/24
        pg_vip_interface: eth1
        node_hugepage_ratio: 0.3
        pg_users: [ { name: test , password: test , pgbouncer: true , roles: [ dbrole_admin ] } ]
        pg_databases: [ { name: dst } ]


    #==========================================================#
    # pg-citus: 10 node citus cluster (5 x primary-replica pair)
    #==========================================================#
    pg-citus: # citus group
      hosts:
        10.10.10.50: { pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.60/24 ,pg_seq: 0, pg_role: primary }
        10.10.10.51: { pg_group: 0, pg_cluster: pg-citus0 ,pg_vip_address: 10.10.10.60/24 ,pg_seq: 1, pg_role: replica }
        10.10.10.52: { pg_group: 1, pg_cluster: pg-citus1 ,pg_vip_address: 10.10.10.61/24 ,pg_seq: 0, pg_role: primary }
        10.10.10.53: { pg_group: 1, pg_cluster: pg-citus1 ,pg_vip_address: 10.10.10.61/24 ,pg_seq: 1, pg_role: replica }
        10.10.10.54: { pg_group: 2, pg_cluster: pg-citus2 ,pg_vip_address: 10.10.10.62/24 ,pg_seq: 0, pg_role: primary }
        10.10.10.55: { pg_group: 2, pg_cluster: pg-citus2 ,pg_vip_address: 10.10.10.62/24 ,pg_seq: 1, pg_role: replica }
        10.10.10.56: { pg_group: 3, pg_cluster: pg-citus3 ,pg_vip_address: 10.10.10.63/24 ,pg_seq: 0, pg_role: primary }
        10.10.10.57: { pg_group: 3, pg_cluster: pg-citus3 ,pg_vip_address: 10.10.10.63/24 ,pg_seq: 1, pg_role: replica }
        10.10.10.58: { pg_group: 4, pg_cluster: pg-citus4 ,pg_vip_address: 10.10.10.64/24 ,pg_seq: 0, pg_role: primary }
        10.10.10.59: { pg_group: 4, pg_cluster: pg-citus4 ,pg_vip_address: 10.10.10.64/24 ,pg_seq: 1, pg_role: replica }
      vars:
        pg_mode: citus                    # pgsql cluster mode: citus
        pg_version: 16                    # citus does not have pg16 available
        pg_shard: pg-citus                # citus shard name: pg-citus
        pg_primary_db: test               # primary database used by citus
        pg_dbsu_password: DBUser.Postgres # all dbsu password access for citus cluster
        pg_vip_enabled: true
        pg_vip_interface: eth1
        pg_extensions: [ 'citus postgis pgvector' ]
        pg_libs: 'citus, pg_stat_statements, auto_explain' # citus will be added by patroni automatically
        pg_users: [ { name: test ,password: test ,pgbouncer: true ,roles: [ dbrole_admin ] } ]
        pg_databases: [ { name: test ,owner: test ,extensions: [ { name: citus }, { name: vector } ] } ]
        pg_hba_rules:
          - { user: 'all' ,db: all  ,addr: 10.10.10.0/24 ,auth: trust ,title: 'trust citus cluster members'        }
          - { user: 'all' ,db: all  ,addr: 127.0.0.1/32  ,auth: ssl   ,title: 'all user ssl access from localhost' }
          - { user: 'all' ,db: all  ,addr: intra         ,auth: ssl   ,title: 'all user ssl access from intranet'  }

    #==========================================================#
    # redis-meta: reuse the 5 etcd nodes as redis sentinel
    #==========================================================#
    # ./redis.yml -l redis-meta
    redis-meta:
      hosts:
        10.10.10.21: { redis_node: 1 , redis_instances: { 26379: {} } }
        10.10.10.22: { redis_node: 2 , redis_instances: { 26379: {} } }
        10.10.10.23: { redis_node: 3 , redis_instances: { 26379: {} } }
        10.10.10.24: { redis_node: 4 , redis_instances: { 26379: {} } }
        10.10.10.25: { redis_node: 5 , redis_instances: { 26379: {} } }
      vars:
        redis_cluster: redis-meta
        redis_password: 'redis.meta'
        redis_mode: sentinel
        redis_max_memory: 256MB
        redis_sentinel_monitor:  # primary list for redis sentinel, use cls as name, primary ip:port
          - { name: redis-src, host: 10.10.10.45, port: 6379 ,password: redis.src, quorum: 1 }
          - { name: redis-dst, host: 10.10.10.48, port: 6379 ,password: redis.dst, quorum: 1 }

    #==========================================================#
    # redis-test: redis native cluster in 4 nodes, 12 instances
    #==========================================================#
    # ./node.yml -l redis-test; ./redis.yml -l redis-test
    redis-test:
      hosts:
        10.10.10.41: { redis_node: 1 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
        10.10.10.42: { redis_node: 2 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
        10.10.10.43: { redis_node: 3 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
        10.10.10.44: { redis_node: 4 ,redis_instances: { 6379: {} ,6380: {} ,6381: {} } }
      vars:
        redis_cluster: redis-test
        redis_password: 'redis.test'
        redis_mode: cluster
        redis_max_memory: 64MB

    #==========================================================#
    # redis-src: reuse pg-src 3 nodes for redis
    #==========================================================#
    # ./redis.yml -l redis-src
    redis-src:
      hosts:
        10.10.10.45: { redis_node: 1 , redis_instances: {6379: {  } }}
        10.10.10.46: { redis_node: 2 , redis_instances: {6379: { replica_of: '10.10.10.45 6379' }, 6380: { replica_of: '10.10.10.46 6379' } }}
        10.10.10.47: { redis_node: 3 , redis_instances: {6379: { replica_of: '10.10.10.45 6379' }, 6380: { replica_of: '10.10.10.47 6379' } }}
      vars:
        redis_cluster: redis-src
        redis_password: 'redis.src'
        redis_max_memory: 64MB

    #==========================================================#
    # redis-dst: reuse pg-dst 2 nodes for redis
    #==========================================================#
    # ./redis.yml -l redis-dst
    redis-dst:
      hosts:
        10.10.10.48: { redis_node: 1 , redis_instances: {6379: {  }                               }}
        10.10.10.49: { redis_node: 2 , redis_instances: {6379: { replica_of: '10.10.10.48 6379' } }}
      vars:
        redis_cluster: redis-dst
        redis_password: 'redis.dst'
        redis_max_memory: 64MB

    #==========================================================#
    # ferret: reuse pg-src as mongo (ferretdb)
    #==========================================================#
    # ./mongo.yml -l ferret
    ferret:
      hosts:
        10.10.10.45: { mongo_seq: 1 }
        10.10.10.46: { mongo_seq: 2 }
        10.10.10.47: { mongo_seq: 3 }
      vars:
        mongo_cluster: ferret
        mongo_pgurl: 'postgres://test:test@10.10.10.45:5432/src'
        #mongo_pgurl: 'postgres://test:test@10.10.10.3:5436/test'


    #==========================================================#
    # test: running cli tools and test miscellaneous stuff
    #==========================================================#
    test:
      hosts: { 10.10.10.88: { nodename: test } }
      vars:
        node_cluster: test
        node_packages: [ 'etcd,logcli,mcli,redis' ]


  #============================================================#
  # Global Variables
  #============================================================#
  vars:

    #==========================================================#
    # INFRA
    #==========================================================#
    version: v3.2.2                   # pigsty version string
    admin_ip: 10.10.10.10             # admin node ip address
    region: default                   # upstream mirror region: default|china|europe
    infra_portal:                     # domain names and upstream servers
      home         : { domain: h.pigsty }
      grafana      : { domain: g.pigsty ,endpoint: "10.10.10.10:3000" , websocket: true }
      prometheus   : { domain: p.pigsty ,endpoint: "10.10.10.10:9090" }
      alertmanager : { domain: a.pigsty ,endpoint: "10.10.10.10:9093" }
      blackbox     : { endpoint: "10.10.10.10:9115" }
      loki         : { endpoint: "10.10.10.10:3100" }
      minio        : { domain: m.pigsty    ,endpoint: "10.10.10.21:9001" ,scheme: https ,websocket: true }
      postgrest    : { domain: api.pigsty  ,endpoint: "127.0.0.1:8884" }
      pgadmin      : { domain: adm.pigsty  ,endpoint: "127.0.0.1:8885" }
      pgweb        : { domain: cli.pigsty  ,endpoint: "127.0.0.1:8886" }
      bytebase     : { domain: ddl.pigsty  ,endpoint: "127.0.0.1:8887" }
      jupyter      : { domain: lab.pigsty  ,endpoint: "127.0.0.1:8888"  , websocket: true }
      supa         : { domain: supa.pigsty ,endpoint: "10.10.10.10:8000", websocket: true }
    nginx_navbar: []
    dns_records:                      # dynamic dns records resolved by dnsmasq
      - 10.10.10.1 h.pigsty a.pigsty p.pigsty g.pigsty

    #==========================================================#
    # NODE
    #==========================================================#
    node_id_from_pg: false            # use nodename rather than pg identity as hostname
    node_conf: tiny                   # use small node template
    node_timezone: Asia/Hong_Kong     # use Asia/Hong_Kong Timezone
    node_dns_servers:                 # DNS servers in /etc/resolv.conf
      - 10.10.10.10
      - 10.10.10.11
    node_etc_hosts:
      - 10.10.10.10 h.pigsty a.pigsty p.pigsty g.pigsty
      - 10.10.10.20 sss.pigsty        # point minio serviec domain to the L2 VIP of proxy cluster
    node_ntp_servers:                 # NTP servers in /etc/chrony.conf
      - pool cn.pool.ntp.org iburst
      - pool 10.10.10.10 iburst
    node_admin_ssh_exchange: false    # exchange admin ssh key among node cluster

    #==========================================================#
    # PGSQL
    #==========================================================#
    pg_conf: tiny.yml
    pgbackrest_method: minio          # USE THE HA MINIO THROUGH A LOAD BALANCER
    pg_dbsu_ssh_exchange: false       # do not exchange dbsu ssh key among pgsql cluster
    pgbackrest_repo:                  # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
      local:                          # default pgbackrest repo with local posix fs
        path: /pg/backup              # local backup directory, `/pg/backup` by default
        retention_full_type: count    # retention full backups by count
        retention_full: 2             # keep 2, at most 3 full backup when using local fs repo
      minio:
        type: s3
        s3_endpoint: sss.pigsty       # s3_endpoint could be any load balancer: 10.10.10.1{0,1,2}, or domain names point to any of the 3 nodes
        s3_region: us-east-1          # you could use external domain name: sss.pigsty , which resolve to any members  (`minio_domain`)
        s3_bucket: pgsql              # instance & nodename can be used : minio-1.pigsty minio-1.pigsty minio-1.pigsty minio-1 minio-2 minio-3
        s3_key: pgbackrest            # Better using a new password for MinIO pgbackrest user
        s3_key_secret: S3User.Backup
        s3_uri_style: path
        path: /pgbackrest
        storage_port: 9000            # Use the load balancer port 9000
        storage_ca_file: /etc/pki/ca.crt
        bundle: y
        cipher_type: aes-256-cbc      # Better using a new cipher password for your production environment
        cipher_pass: pgBackRest.${pg_cluster}
        retention_full_type: time
        retention_full: 14

注意事项