# ha/safe

> 三节点高可用与安全加固配置示例。

---

LLMS index: [llms.txt](/llms.txt)

---

`ha/safe` 基于三节点高可用拓扑，示范 TLS、客户端证书、口令检查、备份加密和 CRIT 参数模板等安全配置。它是可修改的配置样例，不是合规认证模板。


--------

## 配置概览

- 配置名称：`ha/safe`
- 节点数量：3 个 INFRA、etcd 和 PostgreSQL 节点；可选延迟副本
- 适用系统：`el8`、`el9`、`el10`、`d12`、`d13`、`u22`、`u24`、`u26`
- 适用架构：`x86_64`；部分安全扩展没有 ARM64 软件包
- 相关配置：[**`ha/trio`**](/docs/conf/trio/)、[**`ha/full`**](/docs/conf/full/)

生成配置：

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

`-g` 只能随机化配置向导识别的凭据。生成后仍需手工替换 Silo 用户、pgBackRest `cipher_pass` 和其他模板示例值。


--------

## 加固内容

| 配置项 | 模板行为 | 边界与后续操作 |
|:---|:---|:---|
| PostgreSQL HBA | 主要 TCP 规则使用 `ssl`，公网管理员使用 `cert` | 本地 `ident` 和部分 localhost `pwd` 规则保留 |
| PgBouncer | `pgbouncer_sslmode: require` | 客户端仍需按需要验证服务端证书 |
| Patroni | REST API 启用 HTTPS，并限制监听地址 | 仍使用 Basic Auth，应轮换口令 |
| 口令检查 | 在 `pg_libs` 中预加载 `passwordcheck` | 只影响新设置或修改的口令 |
| 用户有效期 | 内置用户和示例业务用户设置 `expire_in: 7300` | 20 年不是轮换策略，应按组织要求缩短 |
| 监听地址 | PostgreSQL 收敛到 `${ip},${vip},${lo}` | 仍需配合防火墙和 HBA |
| 备份 | 使用 Silo，启用 AES-256-CBC | `pgBR.${pg_cluster}` 是可预测示例值，必须替换 |
| PostgreSQL 参数 | `pg-meta` 使用 `crit.yml` | 严格同步模式可能在无同步副本时阻塞写入 |
| 日志 | CRIT 记录连接和断开事件 | SQL 细粒度审计需另行启用 `pgaudit` |
| 安全扩展 | 安装 `passwordcheck`、`credcheck`、`pgaudit` 等软件包 | 安装不等于预加载、创建或配置 |
| 延迟副本 | 提供注释掉的 1 小时延迟集群示例 | 默认不会创建，需要显式启用 |
{.full-width}


--------

## 使用前检查

- 替换所有公开示例凭据，重点检查 `minio_users`、`pgbackrest_repo`、业务用户和 API 口令；
- 确认 3 个节点位于独立故障域，并按实际网络修改 IP、VIP 和域名；
- 为数据库客户端配置 `sslmode=verify-full` 与可信 CA；
- 确认严格同步模式的可用性影响符合业务要求；
- 根据需要预加载并配置 `pgaudit`、`credcheck` 等扩展；
- 检查 ARM64 环境中的扩展软件包可用性；
- 完成备份恢复、故障切换和证书验证测试。

安全机制说明见 [**安全模型**](/docs/concept/sec/level)、[**身份认证**](/docs/concept/sec/auth)、[**加密通信**](/docs/concept/sec/ca) 和 [**数据安全**](/docs/concept/sec/data)。


--------

## 配置内容

源文件：[**`pigsty/conf/ha/safe.yml`**](https://github.com/pgsty/pigsty/blob/main/conf/ha/safe.yml)

<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#==============================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># File      :   safe.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   Pigsty 3-node security enhance template</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2020-05-22</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2025-12-12</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/conf/safe</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># License   :   Apache-2.0 @ https://pigsty.io/docs/about/license/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Copyright :   2018-2026  Ruohang Feng / Vonng (rh@vonng.com)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#==============================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#===== SECURITY ENHANCEMENT CONFIG TEMPLATE WITH 3 NODES ======#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * 3 infra nodes, 3 etcd nodes, single minio node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * 3-instance pgsql cluster with an extra delayed instance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * crit.yml templates, no data loss, checksum enforced</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * enforce ssl on postgres &amp; pgbouncer, use postgres by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * enforce an expiration date for all users (20 years by default)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * enforce strong password policy with passwordcheck extension</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * enforce changing default password for all users</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * log connections and disconnections</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   * restrict listen ip address for postgres/patroni/pgbouncer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">all</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">children</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra</span><span class="p">:</span><span class="w"> </span><span class="c"># infra cluster for proxy, monitor, alert, etc</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="c"># 1 for common usage, 3 nodes for production</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">infra_seq</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>}<span class="w"> </span><span class="c"># identity required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.11</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">infra_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">2, repo_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.12</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">infra_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">3, repo_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">patroni_watchdog_mode</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;off&#39;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio</span><span class="p">:</span><span class="w"> </span><span class="c"># minio cluster, s3 compatible object storage</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">minio_seq</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">minio_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">minio }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd</span><span class="p">:</span><span class="w"> </span><span class="c"># dcs service for postgres/patroni ha consensus</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w"> </span><span class="c"># 1 node for testing, 3 or 5 for production</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">etcd_seq</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>}<span class="w">  </span><span class="c"># etcd_seq required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.11</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">etcd_seq</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span>}<span class="w">  </span><span class="c"># assign from 1 ~ n</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.12</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">etcd_seq</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span>}<span class="w">  </span><span class="c"># three-member cluster keeps an odd voter count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span><span class="c"># cluster level parameter override roles/etcd</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">etcd_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">etcd </span><span class="w"> </span><span class="c"># mark etcd cluster name etcd</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">etcd_safeguard</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="c"># safeguard against purging</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg-meta</span><span class="p">:</span><span class="w"> </span><span class="c"># 3 instance postgres cluster `pg-meta`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">hosts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.10</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">pg_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">1, pg_role</span><span class="p">:</span><span class="w"> </span><span class="l">primary }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.11</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">pg_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">2, pg_role</span><span class="p">:</span><span class="w"> </span><span class="l">replica }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.12</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">pg_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">3, pg_role</span><span class="p">:</span><span class="w"> </span><span class="nt">replica , pg_offline_query</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">pg-meta</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_conf</span><span class="p">:</span><span class="w"> </span><span class="l">crit.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_users</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_meta , password</span><span class="p">:</span><span class="w"> </span><span class="nt">Pleas3-ChangeThisPwd ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300 ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ dbrole_admin ]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty admin user }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_view , password</span><span class="p">:</span><span class="w"> </span><span class="nt">Make.3ure-Compl1ance  ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300 ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ dbrole_readonly ] ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">read-only viewer for meta database }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_databases</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">meta ,baseline</span><span class="p">:</span><span class="w"> </span><span class="nt">cmdb.sql ,comment</span><span class="p">:</span><span class="w"> </span><span class="nt">pigsty meta database ,schemas</span><span class="p">:</span><span class="w"> </span><span class="nt">[ pigsty ] ,extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span>{<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">vector } ] }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_services</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">standby , ip</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;*&#34;</span><span class="w"> </span><span class="nt">,port</span><span class="p">:</span><span class="w"> </span><span class="nt">5435 , dest</span><span class="p">:</span><span class="w"> </span><span class="nt">default ,selector</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[]&#34;</span><span class="w"> </span><span class="nt">, backup</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[? pg_role == `primary`]&#34;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_crontab</span><span class="p">:</span><span class="w">     </span><span class="c"># https://pigsty.io/docs/pgsql/admin/crontab</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="s1">&#39;00 01 * * * /pg/bin/pg-backup full&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_listen</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${ip},${vip},${lo}&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_vip_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_vip_address</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.2</span><span class="l">/24</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># OPTIONAL delayed cluster for pg-meta</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pg-meta-delay: # delayed instance for pg-meta (1 hour ago)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#  hosts: { 10.10.10.13: { pg_seq: 1, pg_role: primary, pg_upstream: 10.10.10.10, pg_delay: 1h } }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#  vars: { pg_cluster: pg-meta-delay }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c">####################################################################</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c">#                          Parameters                              #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c">####################################################################</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">vars</span><span class="p">:</span><span class="w"> </span><span class="c"># global variables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l">v4.5.0                  </span><span class="w"> </span><span class="c"># pigsty version string</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">admin_ip</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">             </span><span class="c"># admin node ip address</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">region</span><span class="p">:</span><span class="w"> </span><span class="l">default                  </span><span class="w"> </span><span class="c"># upstream mirror region: default|china|europe</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_tune</span><span class="p">:</span><span class="w"> </span><span class="l">oltp                  </span><span class="w"> </span><span class="c"># node tuning specs: oltp,olap,tiny,crit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_conf</span><span class="p">:</span><span class="w"> </span><span class="l">oltp.yml                </span><span class="w"> </span><span class="c"># pgsql tuning specs: {oltp,olap,tiny,crit}.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#docker_registry_mirrors: [&#34;https://docker.1panel.live&#34;,&#34;https://docker.1ms.run&#34;,&#34;https://docker.xuanyuan.me&#34;,&#34;https://registry-1.docker.io&#34;]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_ssl_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">         </span><span class="c"># secure patroni RestAPI communications with SSL?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_sslmode</span><span class="p">:</span><span class="w"> </span><span class="l">require       </span><span class="w"> </span><span class="c"># pgbouncer client ssl mode: disable|allow|prefer|require|verify-ca|verify-full, disable by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_service_dest</span><span class="p">:</span><span class="w"> </span><span class="l">postgres</span><span class="w"> </span><span class="c"># default service destination to postgres instead of pgbouncer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_method</span><span class="p">:</span><span class="w"> </span><span class="l">minio         </span><span class="w"> </span><span class="c"># pgbackrest repo method: local,minio,[user-defined...]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># MinIO Related Options</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_users</span><span class="p">:</span><span class="w"> </span><span class="c"># and configure `pgbackrest_repo` &amp; `minio_users` accordingly</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">access_key</span><span class="p">:</span><span class="w"> </span><span class="nt">dba , secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.DBA.Strong.Password, policy</span><span class="p">:</span><span class="w"> </span><span class="l">consoleAdmin }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">access_key</span><span class="p">:</span><span class="w"> </span><span class="nt">pgbackrest , secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">Min10.bAckup ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">readwrite }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_repo</span><span class="p">:</span><span class="w"> </span><span class="c"># pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">local</span><span class="p">:</span><span class="w"> </span><span class="c"># default pgbackrest repo with local posix fs</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/backup             </span><span class="w"> </span><span class="c"># local backup directory, `/pg/backup` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">retention_full_type</span><span class="p">:</span><span class="w"> </span><span class="l">count   </span><span class="w"> </span><span class="c"># retention full backups by count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">retention_full</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">             </span><span class="c"># keep 2, at most 3 full backup when using local fs repo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">minio</span><span class="p">:</span><span class="w"> </span><span class="c"># optional minio repo for pgbackrest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_key</span><span class="p">:</span><span class="w"> </span><span class="l">pgbackrest           </span><span class="w"> </span><span class="c"># &lt;-------- CHANGE THIS, SAME AS `minio_users` access_key</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_key_secret</span><span class="p">:</span><span class="w"> </span><span class="l">Min10.bAckup  </span><span class="w"> </span><span class="c"># &lt;-------- CHANGE THIS, SAME AS `minio_users` secret_key</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cipher_pass</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;pgBR.${pg_cluster}&#39;</span><span class="w">  </span><span class="c"># &lt;-------- CHANGE THIS, you can use cluster name as part of password</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">s3                     </span><span class="w"> </span><span class="c"># minio is s3-compatible, so s3 is used</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_endpoint</span><span class="p">:</span><span class="w"> </span><span class="l">sss.pigsty      </span><span class="w"> </span><span class="c"># minio endpoint domain name, `sss.pigsty` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_region</span><span class="p">:</span><span class="w"> </span><span class="l">us-east-1         </span><span class="w"> </span><span class="c"># minio region, us-east-1 by default, useless for minio</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_bucket</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql             </span><span class="w"> </span><span class="c"># minio bucket name, `pgsql` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">s3_uri_style</span><span class="p">:</span><span class="w"> </span><span class="l">path           </span><span class="w"> </span><span class="c"># use path style uri for minio rather than host style</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/pgbackrest            </span><span class="w"> </span><span class="c"># minio backup path, default is `/pgbackrest`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">storage_port</span><span class="p">:</span><span class="w"> </span><span class="m">9000</span><span class="w">            </span><span class="c"># minio port, 9000 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">storage_ca_file</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/pki/ca.crt </span><span class="w"> </span><span class="c"># minio ca file path, `/etc/pki/ca.crt` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">block</span><span class="p">:</span><span class="w"> </span><span class="kc">y</span><span class="w">                      </span><span class="c"># Enable block incremental backup</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">bundle</span><span class="p">:</span><span class="w"> </span><span class="kc">y</span><span class="w">                     </span><span class="c"># bundle small files into a single file</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">bundle_limit</span><span class="p">:</span><span class="w"> </span><span class="l">20MiB          </span><span class="w"> </span><span class="c"># Limit for file bundles, 20MiB for object storage</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">bundle_size</span><span class="p">:</span><span class="w"> </span><span class="l">128MiB          </span><span class="w"> </span><span class="c"># Target size for file bundles, 128MiB for object storage</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cipher_type</span><span class="p">:</span><span class="w"> </span><span class="l">aes-256-cbc     </span><span class="w"> </span><span class="c"># enable AES encryption for remote backup repo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">retention_full_type</span><span class="p">:</span><span class="w"> </span><span class="l">time    </span><span class="w"> </span><span class="c"># retention full backup by time on minio repo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">retention_full</span><span class="p">:</span><span class="w"> </span><span class="m">14</span><span class="w">            </span><span class="c"># keep full backup for last 14 days</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Access Control</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># add passwordcheck_cracklib extension to enforce strong password policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_libs</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;$libdir/passwordcheck_cracklib, pg_stat_statements, auto_explain&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_extensions</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">passwordcheck_cracklib, supautils, pgsodium, pg_vault, pg_session_jwt, pg_anon, pgsmcrypto, pgauditlogtofile, pgaudit</span><span class="w"> </span><span class="c">#, pgaudit17, pgaudit16, pgaudit15, pgaudit14</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">pg_auth_mon, credcheck, pgcryptokey, pg_jobmon, logerrors, login_hook, set_user, pgextwlist, pg_auditor, sslutils, pg_noset #pg_tde</span><span class="w"> </span><span class="c">#pg_snakeoil</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_roles</span><span class="p">:</span><span class="w"> </span><span class="c"># default roles and users in postgres cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbrole_readonly  ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">role for global read-only access }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbrole_offline   ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">role for restricted read-only access }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbrole_readwrite ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ dbrole_readonly ]               ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">role for global read-write access }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbrole_admin     ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ pg_monitor, dbrole_readwrite ]  ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">role for object creation }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">postgres     ,superuser</span><span class="p">:</span><span class="w"> </span><span class="nt">true  ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300                        ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">system superuser }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">replicator ,replication</span><span class="p">:</span><span class="w"> </span><span class="nt">true  ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300 ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ pg_monitor, dbrole_readonly ]   ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">system replicator }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_dba   ,superuser</span><span class="p">:</span><span class="w"> </span><span class="nt">true  ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300 ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ dbrole_admin ]  ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,pool_mode</span><span class="p">:</span><span class="w"> </span><span class="nt">session, pool_connlimit</span><span class="p">:</span><span class="w"> </span><span class="nt">16 , comment</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql admin user }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_monitor ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[ pg_monitor ] ,expire_in</span><span class="p">:</span><span class="w"> </span><span class="nt">7300 ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,parameters</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">log_min_duration_statement</span><span class="p">:</span><span class="w"> </span><span class="nt">1000 } ,pool_mode</span><span class="p">:</span><span class="w"> </span><span class="nt">session ,pool_connlimit</span><span class="p">:</span><span class="w"> </span><span class="nt">8 ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql monitor user }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_hba_rules</span><span class="p">:</span><span class="w"> </span><span class="c"># postgres host-based auth rules by default, order by `order`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${dbsu}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">local     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ident ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;dbsu access via local os user ident&#39;   ,order</span><span class="p">:</span><span class="w"> </span><span class="m">100</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${dbsu}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">replication ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">local     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ident ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;dbsu replication from local os ident&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">150</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${repl}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">replication ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">localhost ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;replicator replication from localhost&#39; ,order</span><span class="p">:</span><span class="w"> </span><span class="m">200</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${repl}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">replication ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;replicator replication from intranet&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">250</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${repl}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">postgres    ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;replicator postgres db from intranet&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">300</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${monitor}&#39;</span><span class="w"> </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">localhost ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">pwd   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;monitor from localhost with password&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">350</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${monitor}&#39;</span><span class="w"> </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">infra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;monitor from infra host with password&#39; ,order</span><span class="p">:</span><span class="w"> </span><span class="m">400</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${admin}&#39;</span><span class="w">   </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">infra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;admin @ infra nodes with pwd &amp; ssl&#39;    ,order</span><span class="p">:</span><span class="w"> </span><span class="m">450</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${admin}&#39;</span><span class="w">   </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">world     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">cert  ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;admin @ everywhere with ssl &amp; cert&#39;    ,order</span><span class="p">:</span><span class="w"> </span><span class="m">500</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;+dbrole_readonly&#39;,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all    ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">localhost ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;pgbouncer read/write via local socket&#39; ,order</span><span class="p">:</span><span class="w"> </span><span class="m">550</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;+dbrole_readonly&#39;,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all    ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;read/write biz user via password&#39;      ,order</span><span class="p">:</span><span class="w"> </span><span class="m">600</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;+dbrole_offline&#39; ,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all    ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;allow etl offline tasks from intranet&#39; ,order</span><span class="p">:</span><span class="w"> </span><span class="m">650</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgb_default_hba_rules</span><span class="p">:</span><span class="w"> </span><span class="c"># pgbouncer host-based authentication rules, order by `order`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${dbsu}&#39;</span><span class="w">    </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">pgbouncer   ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">local     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">peer  ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;dbsu local admin access with os ident&#39; ,order</span><span class="p">:</span><span class="w"> </span><span class="m">100</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;all&#39;        ,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">localhost ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">pwd   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;allow all user local access with pwd&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">150</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${monitor}&#39;</span><span class="w"> </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">pgbouncer   ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;monitor access via intranet with pwd&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">200</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${monitor}&#39;</span><span class="w"> </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">world     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">deny  ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;reject all other monitor access addr&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">250</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${admin}&#39;</span><span class="w">   </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;admin access via intranet with pwd&#39;    ,order</span><span class="p">:</span><span class="w"> </span><span class="m">300</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${admin}&#39;</span><span class="w">   </span><span class="nt">,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">world     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">deny  ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;reject all other admin access addr&#39;    ,order</span><span class="p">:</span><span class="w"> </span><span class="m">350</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- {<span class="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;all&#39;        ,db</span><span class="p">:</span><span class="w"> </span><span class="nt">all         ,addr</span><span class="p">:</span><span class="w"> </span><span class="nt">intra     ,auth</span><span class="p">:</span><span class="w"> </span><span class="nt">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;allow all user intra access with pwd&#39;  ,order</span><span class="p">:</span><span class="w"> </span><span class="m">400</span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Repo, Node, Packages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_remove</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                 </span><span class="c"># remove existing repo on admin node during repo bootstrap</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_repo_remove</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">            </span><span class="c"># remove existing node repo for node managed by pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#node_selinux_mode: enforcing     # set selinux mode: enforcing,permissive,disabled</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_firewall_mode</span><span class="p">:</span><span class="w"> </span><span class="l">zone         </span><span class="w"> </span><span class="c"># firewall mode: zone (default), off (disable), none (skip &amp; self-managed)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_extra_packages</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">pg18-main ]</span><span class="w"> </span><span class="c">#,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]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_version</span><span class="p">:</span><span class="w"> </span><span class="m">18</span><span class="w">                    </span><span class="c"># default postgres version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#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]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># PASSWORD : https://pigsty.io/docs/setup/security/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#grafana_admin_username: admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">You.Have2Use-A_VeryStrongPassword</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_view_password</span><span class="p">:</span><span class="w"> </span><span class="l">DBUser.Viewer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pg_admin_username: dbuser_dba</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">PessWorb.Should8eStrong-eNough</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pg_monitor_username: dbuser_monitor</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_monitor_password</span><span class="p">:</span><span class="w"> </span><span class="l">MekeSuerYour.PassWordI5secured</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pg_replication_username: replicator</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_replication_password</span><span class="p">:</span><span class="w"> </span><span class="l">doNotUseThis-PasswordFor.AnythingElse</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#patroni_username: postgres</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_password</span><span class="p">:</span><span class="w"> </span><span class="l">don.t-forget-to-change-thEs3-password</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#haproxy_admin_username: admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">GneratePasswordWith-pwgen-s-16-1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_secret_key</span><span class="p">:</span><span class="w"> </span><span class="l">S3User.MinIO</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_root_password</span><span class="p">:</span><span class="w"> </span><span class="l">Etcd.Root</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">...</span><span class="w">
</span></span></span></code></pre></div>
