# demo/debian

> Debian/Ubuntu 专用配置模板

---

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

---

`demo/debian` 配置模板是针对 Debian 和 Ubuntu 发行版优化的配置模板。


--------

## 配置概览

- 配置名称： `demo/debian`
- 节点数量： 单节点
- 配置说明：Debian/Ubuntu 专用配置模板
- 适用系统：`d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`, `aarch64`
- 相关配置：[`meta`](/docs/conf/meta/)，[`demo/el`](/docs/conf/el/)

启用方式：

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


--------

## 配置内容

源文件地址：[`pigsty/conf/demo/debian.yml`](https://github.com/pgsty/pigsty/blob/main/conf/demo/debian.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      :   debian.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   Default parameters for Debian/Ubuntu in Pigsty</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     :   2026-08-02</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/conf/debian</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">#==============================================================#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#                        Sandbox (4-node)                      #</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"># admin user : vagrant  (nopass ssh &amp; sudo already set)        #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 1.  meta    :    10.10.10.10     (2 Core | 4GB)    pg-meta   #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 2.  node-1  :    10.10.10.11     (1 Core | 1GB)    pg-test-1 #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 3.  node-2  :    10.10.10.12     (1 Core | 1GB)    pg-test-2 #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># 4.  node-3  :    10.10.10.13     (1 Core | 1GB)    pg-test-3 #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># (replace these ip if your 4-node env have different ip addr) #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># VIP 2: (l2 vip is available inside same LAN )                #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#     pg-meta ---&gt;  10.10.10.2 ---&gt; 10.10.10.10                #</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#     pg-test ---&gt;  10.10.10.3 ---&gt; 10.10.10.1{1,2,3}          #</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="nt">all</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="c">##################################################################</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c">#                            CLUSTERS                            #</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"># meta nodes, nodes, pgsql, redis, pgsql clusters are defined as</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># k:v pair inside `all.children`. Where the key is cluster name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># and value is cluster definition consist of two parts:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># `hosts`: cluster members ip and instance level variables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="c"># `vars` : cluster level variables</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">children</span><span class="p">:</span><span class="w">                                 </span><span class="c"># groups definition</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"># 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">infra</span><span class="p">:</span><span class="w"> </span>{<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">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="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="c"># etcd cluster for ha postgres</span><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="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">etcd_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">1 } }, vars</span><span class="p">:</span><span class="w"> </span>{<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></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"># 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">minio</span><span class="p">:</span><span class="w"> </span>{<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="nt">1 } }, 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="c">#----------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pgsql cluster: pg-meta (CMDB)    #</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">pg-meta</span><span class="p">:</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">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="nt">primary , 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 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></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># define business databases here: https://pigsty.io/docs/pgsql/config/db</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 class="c"># define business databases on this cluster, array of database definition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">meta                     </span><span class="w"> </span><span class="c"># REQUIRED, `name` is the only mandatory field of a database definition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#state: create                  # optional, create|absent|recreate, create by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">baseline</span><span class="p">:</span><span class="w"> </span><span class="l">cmdb.sql             </span><span class="w"> </span><span class="c"># optional, database sql baseline path, (relative path among ansible search path, e.g: files/)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">schemas</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">pigsty]              </span><span class="w"> </span><span class="c"># optional, additional schemas to be created, array of schema names</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">extensions</span><span class="p">:</span><span class="w">                     </span><span class="c"># optional, additional extensions to be installed: array of `{name[,schema]}`</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="l">vector }           </span><span class="w"> </span><span class="c"># install pgvector extension on this database by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty meta database  </span><span class="w"> </span><span class="c"># optional, comment string for this database</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pgbouncer: true                # optional, add this database to pgbouncer database list? true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#owner: postgres                # optional, database owner, current user if not specified</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#template: template1            # optional, which template to use, template1 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#strategy: FILE_COPY            # optional, clone strategy: FILE_COPY or WAL_LOG (PG15+), default to PG&#39;s default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#encoding: UTF8                 # optional, inherited from template / cluster if not defined (UTF8)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#locale: C                      # optional, inherited from template / cluster if not defined (C)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#lc_collate: C                  # optional, inherited from template / cluster if not defined (C)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#lc_ctype: C                    # optional, inherited from template / cluster if not defined (C)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#locale_provider: libc          # optional, locale provider: libc, icu, builtin (PG15+)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#icu_locale: en-US              # optional, icu locale for icu locale provider (PG15+)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#icu_rules: &#39;&#39;                  # optional, icu rules for icu locale provider (PG16+)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#builtin_locale: C.UTF-8        # optional, builtin locale for builtin locale provider (PG17+)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#tablespace: pg_default         # optional, default tablespace, pg_default by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#is_template: false             # optional, mark database as template, allowing clone by any user with CREATEDB privilege</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#allowconn: true                # optional, allow connection, true by default. false will disable connect at all</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#revokeconn: false              # optional, revoke public connection privilege. false by default. (leave connect with grant option to owner)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#register_datasource: true      # optional, register this database to grafana datasources? true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#connlimit: -1                  # optional, database connection limit, default -1 disable limit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_auth_user: dbuser_meta    # optional, all connection to this pgbouncer database will be authenticated by this user</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_mode: transaction         # optional, pgbouncer pool mode at database level, default transaction</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_size: 64                  # optional, pgbouncer pool size at database level, default 64</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_reserve: 32               # optional, pgbouncer pool size reserve at database level, default 32</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_size_min: 0               # optional, pgbouncer pool size min at database level, default 0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_connlimit: 100            # optional, max database connections at database level, default 100</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- { name: grafana  ,owner: dbuser_grafana  ,revokeconn: true ,comment: grafana primary database }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- { name: bytebase ,owner: dbuser_bytebase ,revokeconn: true ,comment: bytebase primary database }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- { name: kong     ,owner: dbuser_kong     ,revokeconn: true ,comment: kong the api gateway database }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- { name: gitea    ,owner: dbuser_gitea    ,revokeconn: true ,comment: gitea meta database }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- { name: wiki     ,owner: dbuser_wiki     ,revokeconn: true ,comment: wiki meta database }</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"># define business users here: https://pigsty.io/docs/pgsql/config/user</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 class="c"># define business users/roles on this cluster, array of user definition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">dbuser_meta              </span><span class="w"> </span><span class="c"># REQUIRED, `name` is the only mandatory field of a user definition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l">DBUser.Meta          </span><span class="w"> </span><span class="c"># optional, password, can be a scram-sha-256 hash string or plain text</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                 </span><span class="c"># optional, add this user to pgbouncer user-list? false by default (production user should be true explicitly)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty admin user     </span><span class="w"> </span><span class="c"># optional, comment string for this user/role</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">roles</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">dbrole_admin ]        </span><span class="w"> </span><span class="c"># optional, belonged roles. default roles are: dbrole_{admin,readonly,readwrite,offline}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#login: true                     # optional, can log in, true by default  (new biz ROLE should be false)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#superuser: false                # optional, is superuser? false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#createdb: false                 # optional, can create database? false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#createrole: false               # optional, can create role? false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#inherit: true                   # optional, can this role use inherited privileges? true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#replication: false              # optional, can this role do replication? false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#bypassrls: false                # optional, can this role bypass row level security? false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#connlimit: -1                   # optional, user connection limit, default -1 disable limit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#expire_in: 3650                 # optional, now + n days when this role is expired (OVERWRITE expire_at)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#expire_at: &#39;2030-12-31&#39;         # optional, YYYY-MM-DD &#39;timestamp&#39; when this role is expired  (OVERWRITTEN by expire_in)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#parameters: {}                  # optional, role level parameters with `ALTER ROLE SET`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_mode: transaction          # optional, pgbouncer pool mode at user level, transaction by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#pool_connlimit: -1              # optional, max database connections at user level, default -1 disable limit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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">DBUser.Viewer   ,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="c">#- {name: dbuser_grafana  ,password: DBUser.Grafana  ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for grafana database   }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- {name: dbuser_bytebase ,password: DBUser.Bytebase ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for bytebase database  }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- {name: dbuser_gitea    ,password: DBUser.Gitea    ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for gitea service      }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- {name: dbuser_wiki     ,password: DBUser.Wiki     ,pgbouncer: true ,roles: [dbrole_admin]    ,comment: admin user for wiki.js service    }</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"># define business service here: https://pigsty.io/docs/pgsql/service</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 class="c"># extra services in addition to pg_default_services, array of service definition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c"># standby service will route {ip|name}:5435 to sync replica&#39;s pgbouncer (5435-&gt;6432 standby)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">standby                  </span><span class="w"> </span><span class="c"># required, service name, the actual svc name will be prefixed with `pg_cluster`, e.g: pg-meta-standby</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">5435</span><span class="w">                      </span><span class="c"># required, service exposed port (work as kubernetes service node port mode)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">ip</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;*&#34;</span><span class="w">                         </span><span class="c"># optional, service bind ip address, `*` for all ip by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">selector</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[]&#34;</span><span class="w">                  </span><span class="c"># required, service member selector, use JMESPath to filter inventory</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">dest</span><span class="p">:</span><span class="w"> </span><span class="l">default                  </span><span class="w"> </span><span class="c"># optional, destination port, default|postgres|pgbouncer|&lt;port_number&gt;, &#39;default&#39; by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">check</span><span class="p">:</span><span class="w"> </span><span class="l">/sync                   </span><span class="w"> </span><span class="c"># optional, health check url path, / by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># backup server selector</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">maxconn</span><span class="p">:</span><span class="w"> </span><span class="m">3000</span><span class="w">                   </span><span class="c"># optional, max allowed front-end connection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">balance</span><span class="p">:</span><span class="w"> </span><span class="l">roundrobin            </span><span class="w"> </span><span class="c"># optional, haproxy load balance algorithm (roundrobin by default, other: leastconn)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="c">#options: &#39;inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100&#39;</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"># define pg extensions: https://pigsty.io/docs/pgsql/ext/</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;pg_stat_statements, auto_explain&#39;</span><span class="w"> </span><span class="c"># add timescaledb to shared_preload_libraries</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c">#pg_extensions: [] # extensions to be installed on this cluster</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"># define HBA rules here: https://pigsty.io/docs/pgsql/config/hba</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_hba_rules</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_view , 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">pwd ,title</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;allow grafana dashboard access cmdb from infra nodes&#39;</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_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="nt">pg_crontab</span><span class="p">:</span><span class="w">  </span><span class="c"># make a full backup 1 am everyday</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></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"># pgsql cluster: pg-test (3 nodes) #</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"># pg-test ---&gt;  10.10.10.3 ---&gt; 10.10.10.1{1,2,3}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg-test</span><span class="p">:</span><span class="w">                          </span><span class="c"># define the new 3-node cluster pg-test</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.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">1, pg_role</span><span class="p">:</span><span class="w"> </span><span class="l">primary }  </span><span class="w"> </span><span class="c"># primary instance, leader of cluster</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">2, pg_role</span><span class="p">:</span><span class="w"> </span><span class="l">replica }  </span><span class="w"> </span><span class="c"># replica instance, follower of leader</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">10.10.10.13</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 class="c"># replica with offline access</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-test          </span><span class="w"> </span><span class="c"># define pgsql cluster name</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 class="p">[</span>{<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">test , password</span><span class="p">:</span><span class="w"> </span><span class="nt">test , 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="p">[</span><span class="w"> </span><span class="l">dbrole_admin ] }]</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 class="p">[</span>{<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test }]</span><span class="w"> </span><span class="c"># create a database and user named &#39;test&#39;</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">tiny</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">tiny.yml</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.3</span><span class="l">/24</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"># make a full backup on monday 1am, and an incremental backup during weekdays</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="s1">&#39;00 01 * * 1 /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="s1">&#39;00 01 * * 2,3,4,5,6,7 /pg/bin/pg-backup&#39;</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"># redis ms, sentinel, native cluster</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">redis-ms</span><span class="p">:</span><span class="w"> </span><span class="c"># redis classic primary &amp; replica</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">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 , redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">}, 6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">replica_of</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;10.10.10.10 6379&#39;</span><span class="w"> </span>}<span class="w"> </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">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="nt">redis-ms ,redis_password</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;redis.ms&#39; ,redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">64MB }</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">redis-meta</span><span class="p">:</span><span class="w"> </span><span class="c"># redis sentinel x 3</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.11</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 , redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">26379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,26380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,26381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span>}<span class="w"> </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></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">redis-meta</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;redis.meta&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_mode</span><span class="p">:</span><span class="w"> </span><span class="l">sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">16MB</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">redis_sentinel_monitor</span><span class="p">:</span><span class="w"> </span><span class="c"># primary list for redis sentinel, use cls as name, primary ip:port</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">redis-ms, host</span><span class="p">:</span><span class="w"> </span><span class="nt">10.10.10.10, port</span><span class="p">:</span><span class="w"> </span><span class="nt">6379 ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">redis.ms, quorum</span><span class="p">:</span><span class="w"> </span><span class="m">2</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">redis-test</span><span class="p">:</span><span class="w"> </span><span class="c"># redis native cluster: 3m x 3s</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.12</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">1 ,redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </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">10.10.10.13</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">redis_node</span><span class="p">:</span><span class="w"> </span><span class="nt">2 ,redis_instances</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">6379</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6380</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">} ,6381</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </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">redis_cluster</span><span class="p">:</span><span class="w"> </span><span class="nt">redis-test ,redis_password</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;redis.test&#39; ,redis_mode</span><span class="p">:</span><span class="w"> </span><span class="nt">cluster, redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">32MB }</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">#                             VARS                                 #</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></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">#                         VARS: INFRA                            #</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></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"># META</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">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">language</span><span class="p">:</span><span class="w"> </span><span class="l">en                     </span><span class="w"> </span><span class="c"># default language: en, zh</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">proxy_env</span><span class="p">:</span><span class="w">                        </span><span class="c"># global proxy env when downloading packages</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">no_proxy</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># http_proxy:  # set your proxy here: e.g http://user:pass@proxy.xxx.com</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c"># all_proxy:   # set your proxy here: e.g http://user:pass@proxy.xxx.com</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"># CA</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">ca_create</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                   </span><span class="c"># create ca if not exists? or just abort</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">ca_cn</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty-ca                 </span><span class="w"> </span><span class="c"># ca common name, fixed as pigsty-ca</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">cert_validity</span><span class="p">:</span><span class="w"> </span><span class="l">7300d             </span><span class="w"> </span><span class="c"># cert validity, 20 years by default</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"># INFRA_IDENTITY</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">#infra_seq: 1                     # infra node identity, explicitly required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra_portal</span><span class="p">:</span><span class="w">                     </span><span class="c"># infra services exposed via portal</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">home </span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="l">i.pigsty }    </span><span class="w"> </span><span class="c"># default domain name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data/infra          </span><span class="w"> </span><span class="c"># default data path for infrastructure data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra_services</span><span class="p">:</span><span class="w">                   </span><span class="c"># home page navigation entries</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">Metrics            ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/vmetrics/vmui/&#39;         ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;VictoriaMetrics Query UI&#39;    ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">metrics  ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;指标查询&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;VictoriaMetrics 指标查询界面&#39;</span><span class="w"> </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">Logs               ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/vlogs/select/vmui/&#39;     ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;VictoriaLogs Query UI&#39;       ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">logs     ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;日志查询&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;VictoriaLogs 日志查询界面&#39;</span><span class="w"> </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">Traces             ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/vtraces/select/vmui/&#39;   ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;VictoriaTraces Query UI&#39;     ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">traces   ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;链路追踪&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;VictoriaTraces 链路查询界面&#39;</span><span class="w"> </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">Monitor Targets    ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/vmetrics/targets&#39;       ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Prometheus Scrape Targets&#39;   ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">target   ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;监控目标&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;VictoriaMetrics 监控对象列表&#39;</span><span class="w"> </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">Alert Rules        ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/vmalert/vmalert/groups&#39; ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;VMAlert alert/record Rules&#39;  ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">alert    ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;告警规则&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;VMAlert 告警规则管理&#39;</span><span class="w"> </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">Alert Manager      ,url</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;/alertmgr/#/alerts&#39;</span><span class="w">      </span><span class="nt">,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Alert Manage &amp; Silence&#39;      ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">alertmgr ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;告警管理&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;AlertManager 告警管理与屏蔽&#39;</span><span class="w"> </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">CA Certificate     ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/ca.crt&#39;                 ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Self-Signed CA Certificate&#39;  ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">lock     ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;CA 证书&#39;  ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;Pigsty 自签CA根证书&#39;</span><span class="w"> </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">Software Repo      ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/pigsty&#39;                 ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Local YUM/APT Repository&#39;    ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">package  ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;软件仓库&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;本地 YUM/APT 软件源&#39;</span><span class="w"> </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">Explain Visualizer ,url</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;/pev&#39;                    ,desc</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Postgres EXPLAIN Visualizer&#39; ,icon</span><span class="p">:</span><span class="w"> </span><span class="nt">search   ,name_cn</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;执行计划&#39; ,desc_cn</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;PG 执行计划可视化工具&#39;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra_extra_services</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">          </span><span class="c"># extra services to be added on infra home page</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</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_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                </span><span class="c"># create a yum repo on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_home</span><span class="p">:</span><span class="w"> </span><span class="l">/www                  </span><span class="w"> </span><span class="c"># repo home dir, `/www` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_name</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty                </span><span class="w"> </span><span class="c"># repo name, pigsty by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_endpoint</span><span class="p">:</span><span class="w"> </span><span class="l">http://${admin_ip}:80</span><span class="w"> </span><span class="c"># access point to this repo by domain or ip:port</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 upstream repo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_modules</span><span class="p">:</span><span class="w"> </span><span class="l">infra,node,pgsql   </span><span class="w"> </span><span class="c"># which repo modules are installed in repo_upstream</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_upstream</span><span class="p">:</span><span class="w">                    </span><span class="c"># where to download</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">pigsty-local   ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Pigsty Local&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">local   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://${admin_ip}/pigsty ./&#39;</span><span class="w"> </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">pigsty-pgsql   ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Pigsty PgSQL&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">pgsql   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.io/apt/pgsql/${distro_codename} ${distro_codename} main&#39;</span><span class="nt">, china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.cc/apt/pgsql/${distro_codename} ${distro_codename} main&#39;</span><span class="w"> </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">pigsty-infra   ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Pigsty Infra&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">infra   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.io/apt/infra/ generic main&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.cc/apt/infra/ generic main&#39;</span><span class="w"> </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">nginx          ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Nginx&#39;              ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">infra   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://nginx.org/packages/${distro_name} ${distro_codename} nginx&#39;</span><span class="w"> </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">docker-ce      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Docker&#39;             ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">infra   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://download.docker.com/linux/${distro_name} ${distro_codename} stable&#39;</span><span class="w">                               </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/docker-ce/linux/${distro_name} ${distro_codename} stable&#39;</span><span class="w"> </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">base           ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Debian Basic&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13         ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://deb.debian.org/debian/ ${distro_codename} main non-free-firmware&#39;</span><span class="w">                                  </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/debian/ ${distro_codename} main non-free-firmware&#39;</span><span class="w"> </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">updates        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Debian Updates&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13         ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://deb.debian.org/debian/ ${distro_codename}-updates main non-free-firmware&#39;</span><span class="w">                          </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/debian/ ${distro_codename}-updates main non-free-firmware&#39;</span><span class="w"> </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">security       ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Debian Security&#39;    ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13         ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://security.debian.org/debian-security ${distro_codename}-security main non-free-firmware&#39;</span><span class="w">            </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/debian-security/ ${distro_codename}-security main non-free-firmware&#39;</span><span class="w"> </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">base           ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Basic&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64         ] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.edge.kernel.org/ubuntu/ ${distro_codename}           main universe multiverse restricted&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu/ ${distro_codename}           main restricted universe multiverse&#39;</span><span class="w"> </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">updates        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Updates&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64         ] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.edge.kernel.org/ubuntu/ ${distro_codename}-updates   main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu/ ${distro_codename}-updates   main restricted universe multiverse&#39;</span><span class="w"> </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">backports      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Backports&#39;   ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64         ] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.edge.kernel.org/ubuntu/ ${distro_codename}-backports main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu/ ${distro_codename}-backports main restricted universe multiverse&#39;</span><span class="w"> </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">security       ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Security&#39;    ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64         ] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.edge.kernel.org/ubuntu/ ${distro_codename}-security  main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu/ ${distro_codename}-security  main restricted universe multiverse&#39;</span><span class="w"> </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">base           ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Basic&#39;       ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[        aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://ports.ubuntu.com/ubuntu-ports/ ${distro_codename}             main universe multiverse restricted&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu-ports/ ${distro_codename}           main restricted universe multiverse&#39;</span><span class="w"> </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">updates        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Updates&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[        aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://ports.ubuntu.com/ubuntu-ports/ ${distro_codename}-updates     main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu-ports/ ${distro_codename}-updates   main restricted universe multiverse&#39;</span><span class="w"> </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">backports      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Backports&#39;   ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[        aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://ports.ubuntu.com/ubuntu-ports/ ${distro_codename}-backports   main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu-ports/ ${distro_codename}-backports main restricted universe multiverse&#39;</span><span class="w"> </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">security       ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Ubuntu Security&#39;    ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">node    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[        aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://ports.ubuntu.com/ubuntu-ports/ ${distro_codename}-security    main restricted universe multiverse&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/ubuntu-ports/ ${distro_codename}-security  main restricted universe multiverse&#39;</span><span class="w"> </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">pgdg           ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;PGDG&#39;               ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">pgsql   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://apt.postgresql.org/pub/repos/apt/ ${distro_codename}-pgdg main&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/postgresql/repos/apt/ ${distro_codename}-pgdg main&#39;</span><span class="w"> </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">pgdg-beta      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;PGDG Beta&#39;          ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">beta    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://apt.postgresql.org/pub/repos/apt/ ${distro_codename}-pgdg-testing main 19&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/postgresql/repos/apt/ ${distro_codename}-pgdg-testing main 19&#39;</span><span class="w"> </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">timescaledb    ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;TimescaleDB&#39;        ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">extra   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packagecloud.io/timescale/timescaledb/${distro_name}/ ${distro_codename} main&#39;</span><span class="w"> </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">citus          ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Citus&#39;              ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">extra   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,   22      ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packagecloud.io/citusdata/community/${distro_name}/ ${distro_codename} main&#39;</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="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">percona        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Percona TDE&#39;        ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">percona ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[   12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.io/apt/percona ${distro_codename} main&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.pigsty.cc/apt/percona ${distro_codename} main&#39;</span><span class="w"> </span><span class="nt">,origin</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://repo.percona.com/ppg-18.4/apt ${distro_codename} main&#39;</span><span class="w"> </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">groonga        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Groonga Debian&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">groonga ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13         ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packages.groonga.org/debian/ ${distro_codename} main&#39;</span><span class="w"> </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">groonga        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Groonga Ubuntu&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">groonga ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[         22,24   ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://ppa.launchpadcontent.net/groonga/ppa/ubuntu/ ${distro_codename} main&#39;</span><span class="w"> </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">mysql          ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;MySQL 8.4 LTS&#39;      ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">mysql   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[   12,13,22,24   ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64         ] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.mysql.com/apt/${distro_name} ${distro_codename} mysql-8.4-lts&#39;</span><span class="nt">, china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.ustc.edu.cn/mysql-repo/apt/${distro_name} ${distro_codename} mysql-8.4-lts&#39;</span><span class="w"> </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">mongo          ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;MongoDB&#39;            ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">mongo   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[   12,   22,24   ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.mongodb.org/apt/${distro_name} ${distro_codename}/mongodb-org/8.0 multiverse&#39;</span><span class="nt">, china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/mongodb/apt/${distro_name} ${distro_codename}/mongodb-org/8.0 multiverse&#39;</span><span class="w"> </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">redis          ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Redis&#39;              ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">redis   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,   22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packages.redis.io/deb ${distro_codename} main&#39;</span><span class="w"> </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">llvm           ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;LLVM&#39;               ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">llvm    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://apt.llvm.org/${distro_codename}/ llvm-toolchain-${distro_codename} main&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.tuna.tsinghua.edu.cn/llvm-apt/${distro_codename}/ llvm-toolchain-${distro_codename} main&#39;</span><span class="w"> </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">haproxyd       ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Haproxy Debian&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">haproxy ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[   12            ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;http://haproxy.debian.net/ ${distro_codename}-backports-3.2 main&#39;</span><span class="w"> </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">haproxyu       ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Haproxy Ubuntu&#39;     ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">haproxy ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[            24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://ppa.launchpadcontent.net/vbernat/haproxy-3.2/ubuntu/ ${distro_codename} main&#39;</span><span class="w"> </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">grafana        ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Grafana&#39;            ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">grafana ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://apt.grafana.com stable main&#39;</span><span class="w"> </span><span class="nt">,china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.cloud.tencent.com/grafana/apt/ stable main&#39;</span><span class="w"> </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">kubernetes     ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Kubernetes&#39;         ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">kube    ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://pkgs.k8s.io/core:/stable:/v1.36/deb/ /&#39;</span><span class="nt">, china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://mirrors.ustc.edu.cn/kubernetes/core:/stable:/v1.36/deb/ /&#39;</span><span class="w"> </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">gitlab-ee      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Gitlab EE&#39;          ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">gitlab  ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24   ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packages.gitlab.com/gitlab/gitlab-ee/${distro_name}/ ${distro_codename} main&#39;</span><span class="w"> </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">gitlab-ce      ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;Gitlab CE&#39;          ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">gitlab  ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24   ] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packages.gitlab.com/gitlab/gitlab-ce/${distro_name}/ ${distro_codename} main&#39;</span><span class="w"> </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">clickhouse     ,description</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;ClickHouse&#39;         ,module</span><span class="p">:</span><span class="w"> </span><span class="nt">click   ,releases</span><span class="p">:</span><span class="w"> </span><span class="nt">[11,12,13,22,24,26] ,arch</span><span class="p">:</span><span class="w"> </span><span class="nt">[x86_64, aarch64] ,baseurl</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://packages.clickhouse.com/deb/ stable main&#39;</span><span class="nt">, china</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;https://repo.huaweicloud.com/clickhouse/deb/ stable main&#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">repo_packages</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">node-bootstrap, infra-package, infra-addons, node-package1, node-package2, node-package3, pgsql-utility, extra-modules ]</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">pgsql-main ]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_url_packages</span><span class="p">:</span><span class="w"> </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="c">#-----------------------------------------------------------------</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># INFRA_PACKAGE</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">infra_packages</span><span class="p">:</span><span class="w">                   </span><span class="c"># packages to be installed on infra nodes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">grafana,grafana-plugins,grafana-victorialogs-ds,grafana-victoriametrics-ds,victoria-metrics,victoria-logs,victoria-traces,vmutils,vlogscli,alertmanager</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">node-exporter,blackbox-exporter,nginx-exporter,pg-exporter,pev2,nginx,dnsmasq,ansible,etcd,python3-requests,redis,mcli,restic,certbot,python3-certbot-nginx</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"># NGINX</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">nginx_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">               </span><span class="c"># enable nginx on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">                </span><span class="c"># clean existing nginx config during init?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># enable nginx_exporter on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9113</span><span class="w">         </span><span class="c"># nginx_exporter listen port, 9113 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_sslmode</span><span class="p">:</span><span class="w"> </span><span class="l">enable            </span><span class="w"> </span><span class="c"># nginx ssl mode? disable,enable,enforce</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_cert_validity</span><span class="p">:</span><span class="w"> </span><span class="l">397d        </span><span class="w"> </span><span class="c"># nginx self-signed cert validity, 397d by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_home</span><span class="p">:</span><span class="w"> </span><span class="l">/www                 </span><span class="w"> </span><span class="c"># nginx content dir, `/www` by default (soft link to nginx_data)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data/nginx          </span><span class="w"> </span><span class="c"># nginx actual data dir, /data/nginx by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_users</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">admin </span><span class="p">:</span><span class="w"> </span><span class="l">pigsty }  </span><span class="w"> </span><span class="c"># nginx basic auth users: name and pass dict</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_port</span><span class="p">:</span><span class="w"> </span><span class="m">80</span><span class="w">                    </span><span class="c"># nginx listen port, 80 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nginx_ssl_port</span><span class="p">:</span><span class="w"> </span><span class="m">443</span><span class="w">               </span><span class="c"># nginx ssl listen port, 443 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">certbot_sign</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">               </span><span class="c"># sign nginx cert with certbot during setup?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">certbot_email</span><span class="p">:</span><span class="w"> </span><span class="l">your@email.com    </span><span class="w"> </span><span class="c"># certbot email address, used for free ssl</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">certbot_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">               </span><span class="c"># certbot extra options</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"># DNS</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">dns_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                 </span><span class="c"># setup dnsmasq on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dns_port</span><span class="p">:</span><span class="w"> </span><span class="m">53</span><span class="w">                      </span><span class="c"># dns server listen port, 53 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dns_records</span><span class="p">:</span><span class="w">                      </span><span class="c"># dynamic dns records resolved by dnsmasq</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;${admin_ip} i.pigsty&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;${admin_ip} m.pigsty supa.pigsty api.pigsty adm.pigsty cli.pigsty ddl.pigsty&#34;</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"># VICTORIA</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">vmetrics_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">            </span><span class="c"># enable victoria-metrics on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmetrics_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">             </span><span class="c"># whether clean existing victoria metrics data during init?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmetrics_port</span><span class="p">:</span><span class="w"> </span><span class="m">8428</span><span class="w">               </span><span class="c"># victoria-metrics listen port, 8428 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmetrics_scrape_interval</span><span class="p">:</span><span class="w"> </span><span class="l">10s    </span><span class="w"> </span><span class="c"># victoria global scrape interval, 10s by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmetrics_scrape_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">8s      </span><span class="w"> </span><span class="c"># victoria global scrape timeout, 8s by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmetrics_options</span><span class="p">:</span><span class="w"> </span><span class="p">&gt;-</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">      -retentionPeriod=15d
</span></span></span><span class="line"><span class="cl"><span class="sd">      -promscrape.fileSDCheckInterval=5s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vlogs_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">               </span><span class="c"># enable victoria-logs on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vlogs_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">                </span><span class="c"># clean victoria-logs data during init?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vlogs_port</span><span class="p">:</span><span class="w"> </span><span class="m">9428</span><span class="w">                  </span><span class="c"># victoria-logs listen port, 9428 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vlogs_options</span><span class="p">:</span><span class="w"> </span><span class="p">&gt;-</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">      -retentionPeriod=15d
</span></span></span><span class="line"><span class="cl"><span class="sd">      -retention.maxDiskSpaceUsageBytes=50GiB
</span></span></span><span class="line"><span class="cl"><span class="sd">      -insert.maxLineSizeBytes=1MB
</span></span></span><span class="line"><span class="cl"><span class="sd">      -search.maxQueryDuration=120s</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vtraces_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># enable victoria-traces on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vtraces_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">                </span><span class="c"># clean victoria-trace data during inti?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vtraces_port</span><span class="p">:</span><span class="w"> </span><span class="m">10428</span><span class="w">               </span><span class="c"># victoria-traces listen port, 10428 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vtraces_options</span><span class="p">:</span><span class="w"> </span><span class="p">&gt;-</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">      -retentionPeriod=15d
</span></span></span><span class="line"><span class="cl"><span class="sd">      -retention.maxDiskSpaceUsageBytes=50GiB</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmalert_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># enable vmalert on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmalert_port</span><span class="p">:</span><span class="w"> </span><span class="m">8880</span><span class="w">                </span><span class="c"># vmalert listen port, 8880 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vmalert_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">              </span><span class="c"># vmalert extra server options</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"># PROMETHEUS</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">blackbox_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">            </span><span class="c"># setup blackbox_exporter on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">blackbox_port</span><span class="p">:</span><span class="w"> </span><span class="m">9115</span><span class="w">               </span><span class="c"># blackbox_exporter listen port, 9115 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">blackbox_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">              </span><span class="c"># blackbox_exporter extra server options</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">alertmanager_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">        </span><span class="c"># setup alertmanager on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">alertmanager_port</span><span class="p">:</span><span class="w"> </span><span class="m">9059</span><span class="w">           </span><span class="c"># alertmanager listen port, 9059 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">alertmanager_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">          </span><span class="c"># alertmanager extra server options</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">exporter_metrics_path</span><span class="p">:</span><span class="w"> </span><span class="l">/metrics  </span><span class="w"> </span><span class="c"># exporter metric path, `/metrics` by default</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"># GRAFANA</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">grafana_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># enable grafana on this infra node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_port</span><span class="p">:</span><span class="w"> </span><span class="m">3000</span><span class="w">                </span><span class="c"># default listen port for grafana</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">              </span><span class="c"># clean grafana data during init?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_admin_username</span><span class="p">:</span><span class="w"> </span><span class="l">admin    </span><span class="w"> </span><span class="c"># grafana admin username, `admin` by default</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">pigsty   </span><span class="w"> </span><span class="c"># grafana admin password, `pigsty` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_auth_proxy</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">         </span><span class="c"># enable grafana auth proxy?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_pgurl</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                 </span><span class="c"># external postgres database url for grafana if given</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 class="c"># password for grafana meta pg datasource</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">#                         VARS: NODE                             #</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></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"># NODE_IDENTITY</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">#nodename:           # [INSTANCE] # node instance identity, use hostname if missing, optional</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">nodes   # [CLUSTER]</span><span class="w"> </span><span class="c"># node cluster identity, use &#39;nodes&#39; if missing, optional</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nodename_overwrite</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">          </span><span class="c"># overwrite node&#39;s hostname with nodename?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">nodename_exchange</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">          </span><span class="c"># exchange nodename among play hosts?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_id_from_pg</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># use postgres identity as node identity if applicable?</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"># NODE_DNS</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">node_write_etc_hosts</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">        </span><span class="c"># modify `/etc/hosts` on target node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_default_etc_hosts</span><span class="p">:</span><span class="w">           </span><span class="c"># static dns records in `/etc/hosts`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="s2">&#34;${admin_ip} i.pigsty&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_etc_hosts</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">                </span><span class="c"># extra static dns records in `/etc/hosts`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_dns_method</span><span class="p">:</span><span class="w"> </span><span class="l">add             </span><span class="w"> </span><span class="c"># how to handle dns servers: add,none,overwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_dns_servers</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;${admin_ip}&#39;</span><span class="p">]</span><span class="w"> </span><span class="c"># dynamic nameserver in `/etc/resolv.conf`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_dns_options</span><span class="p">:</span><span class="w">                 </span><span class="c"># dns resolv options in `/etc/resolv.conf`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">options single-request-reopen timeout:1</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"># NODE_PACKAGE</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">node_repo_modules</span><span class="p">:</span><span class="w"> </span><span class="l">local         </span><span class="w"> </span><span class="c"># upstream repo to be added on node, local by default</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 repo on node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_packages</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">openssh-server]  </span><span class="w"> </span><span class="c"># packages to be installed current nodes with latest version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_default_packages</span><span class="p">:</span><span class="w">            </span><span class="c"># default packages to be installed on all nodes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">lz4,unzip,bzip2,pv,jq,git,ncdu,make,patch,bash,lsof,wget,uuid,tuned,nvme-cli,numactl,sysstat,iotop,htop,rsync,tcpdump</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">python3,python3-pip,socat,lrzsz,net-tools,ipvsadm,telnet,ca-certificates,openssl,keepalived,etcd,haproxy,chrony,pig</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">zlib1g,acl,dnsutils,libreadline-dev,vim-tiny,node-exporter,openssh-server,openssh-client,vector</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_uv_env</span><span class="p">:</span><span class="w"> </span><span class="l">/data/venv          </span><span class="w"> </span><span class="c"># uv venv path, empty string to skip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_pip_packages</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">             </span><span class="c"># pip packages to install in uv venv</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"># NODE_SEC</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">node_selinux_mode</span><span class="p">:</span><span class="w"> </span><span class="l">permissive    </span><span class="w"> </span><span class="c"># 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">node_firewall_intranet</span><span class="p">:</span><span class="w">           </span><span class="c"># which intranet cidr considered as internal network</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">10.0.0.0</span><span class="l">/8</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">192.168.0.0</span><span class="l">/16</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">172.16.0.0</span><span class="l">/12</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_firewall_public_port</span><span class="p">:</span><span class="w">        </span><span class="c"># expose these ports to public network in (zone, strict) mode</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">22</span><span class="w">                            </span><span class="c"># enable ssh access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">80</span><span class="w">                            </span><span class="c"># enable http access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">443</span><span class="w">                           </span><span class="c"># enable https access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="m">5432</span><span class="w">                          </span><span class="c"># enable postgres access</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"># NODE_TUNE</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">node_disable_numa</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">          </span><span class="c"># disable node numa, reboot required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_disable_swap</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">          </span><span class="c"># disable node swap, use with caution</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_static_network</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">         </span><span class="c"># preserve dns resolver settings after reboot</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_disk_prefetch</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">         </span><span class="c"># setup disk prefetch on HDD to increase performance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_kernel_modules</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">softdog, ip_vs, ip_vs_rr, ip_vs_wrr, ip_vs_sh ]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_hugepage_count</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">            </span><span class="c"># number of 2MB hugepage, take precedence over ratio</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_hugepage_ratio</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">            </span><span class="c"># node mem hugepage ratio, 0 disable it by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_overcommit_ratio</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">          </span><span class="c"># node mem overcommit ratio, 0 disable it by default</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 tuned profile: none,oltp,olap,crit,tiny</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_sysctl_params</span><span class="p">:</span><span class="w">              </span><span class="c"># sysctl parameters in k:v format in addition to tuned</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">fs.nr_open</span><span class="p">:</span><span class="w"> </span><span class="m">8388608</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"># NODE_ADMIN</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">node_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data                 </span><span class="w"> </span><span class="c"># node main data directory, `/data` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">          </span><span class="c"># create a admin user on target node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_uid</span><span class="p">:</span><span class="w"> </span><span class="m">88</span><span class="w">                </span><span class="c"># uid and gid for node admin user</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_username</span><span class="p">:</span><span class="w"> </span><span class="l">dba         </span><span class="w"> </span><span class="c"># name of node admin user, `dba` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_sudo</span><span class="p">:</span><span class="w"> </span><span class="l">nopass          </span><span class="w"> </span><span class="c"># admin sudo privilege, all,nopass. nopass by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_ssh_exchange</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">     </span><span class="c"># exchange admin ssh key among node cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_pk_current</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">       </span><span class="c"># add current user&#39;s ssh pk to admin authorized_keys</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_admin_pk_list</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">            </span><span class="c"># ssh public keys to be added to admin user</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_aliases</span><span class="p">:</span><span class="w"> </span>{}<span class="w">                  </span><span class="c"># extra shell aliases to be added, k:v dict</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"># NODE_TIME</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">node_timezone</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                 </span><span class="c"># setup node timezone, empty string to skip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_ntp_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">            </span><span class="c"># enable chronyd time sync service?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_ntp_servers</span><span class="p">:</span><span class="w">                 </span><span class="c"># ntp servers in `/etc/chrony.conf`</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">pool pool.ntp.org iburst</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_crontab_overwrite</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># overwrite or append to `/etc/crontab`?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_crontab</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">]</span><span class="w">                 </span><span class="c"># crontab entries in `/etc/crontab`</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"># NODE_VIP</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">vip_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">                </span><span class="c"># enable vip on this node cluster?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># vip_address:         [IDENTITY] # node vip address in ipv4 format, required if vip is enabled</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># vip_vrid:            [IDENTITY] # required, integer, 1-254, should be unique among same VLAN</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_role</span><span class="p">:</span><span class="w"> </span><span class="l">backup                 </span><span class="w"> </span><span class="c"># optional, `master|backup`, backup by default, use as init role</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_preempt</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">                </span><span class="c"># optional, `true/false`, false by default, enable vip preemption</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_interface</span><span class="p">:</span><span class="w"> </span><span class="l">auto              </span><span class="w"> </span><span class="c"># node vip network interface to listen, `auto` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_dns_suffix</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                </span><span class="c"># node vip dns name suffix, empty string by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_auth_pass</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                 </span><span class="c"># empty to use &#39;&lt;cls&gt;-&lt;vrid&gt;&#39; as the default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vip_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9650</span><span class="w">           </span><span class="c"># keepalived exporter listen port, 9650 by default</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"># HAPROXY</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">haproxy_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># enable haproxy on this node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">              </span><span class="c"># cleanup all existing haproxy config?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_reload</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">              </span><span class="c"># reload haproxy after config?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_auth_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">        </span><span class="c"># enable authentication for haproxy admin page</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_admin_username</span><span class="p">:</span><span class="w"> </span><span class="l">admin    </span><span class="w"> </span><span class="c"># haproxy admin username, `admin` by default</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">pigsty   </span><span class="w"> </span><span class="c"># haproxy admin password, `pigsty` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9101</span><span class="w">       </span><span class="c"># haproxy admin/exporter port, 9101 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_client_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">24h      </span><span class="w"> </span><span class="c"># client side connection timeout, 24h by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_server_timeout</span><span class="p">:</span><span class="w"> </span><span class="l">24h      </span><span class="w"> </span><span class="c"># server side connection timeout, 24h by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">haproxy_services</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">              </span><span class="c"># list of haproxy service to be exposed on node</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"># NODE_EXPORTER</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">node_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">       </span><span class="c"># setup node_exporter on this node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9100</span><span class="w">          </span><span class="c"># node exporter listen port, 9100 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;--no-collector.softnet --no-collector.nvme --collector.tcpstat --collector.processes&#39;</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"># VECTOR</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">vector_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">              </span><span class="c"># enable vector log collector?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vector_clean</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">               </span><span class="c"># purge vector data dir during init?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vector_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data/vector        </span><span class="w"> </span><span class="c"># vector data dir, /data/vector by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vector_port</span><span class="p">:</span><span class="w"> </span><span class="m">9598</span><span class="w">                 </span><span class="c"># vector metrics port, 9598 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vector_read_from</span><span class="p">:</span><span class="w"> </span><span class="l">beginning      </span><span class="w"> </span><span class="c"># vector read from beginning or end</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">vector_log_endpoint</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">infra ]   </span><span class="w"> </span><span class="c"># if defined, sending vector log to this endpoint.</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">#                        VARS: DOCKER                            #</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">docker_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">             </span><span class="c"># enable docker on this node?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data/docker        </span><span class="w"> </span><span class="c"># docker data directory, /data/docker by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_storage_driver</span><span class="p">:</span><span class="w"> </span><span class="l">overlay2  </span><span class="w"> </span><span class="c"># docker storage driver, can be zfs, btrfs</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_cgroups_driver</span><span class="p">:</span><span class="w"> </span><span class="l">systemd   </span><span class="w"> </span><span class="c"># docker cgroup fs driver: cgroupfs,systemd</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_registry_mirrors</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">       </span><span class="c"># docker registry mirror list</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9323</span><span class="w">        </span><span class="c"># docker metrics exporter port, 9323 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_image</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">                  </span><span class="c"># docker image to be pulled after bootstrap</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">docker_image_cache</span><span class="p">:</span><span class="w"> </span><span class="l">/tmp/docker/*.tgz</span><span class="w"> </span><span class="c"># docker image cache glob pattern</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">#                         VARS: ETCD                             #</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">#etcd_seq: 1                      # etcd instance identifier, explicitly required</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"># etcd cluster &amp; group name, etcd by default</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"># prevent purging running etcd instance?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_data</span><span class="p">:</span><span class="w"> </span><span class="l">/data/etcd            </span><span class="w"> </span><span class="c"># etcd data directory, /data/etcd by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_port</span><span class="p">:</span><span class="w"> </span><span class="m">2379</span><span class="w">                   </span><span class="c"># etcd client port, 2379 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_peer_port</span><span class="p">:</span><span class="w"> </span><span class="m">2380</span><span class="w">              </span><span class="c"># etcd peer port, 2380 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_init</span><span class="p">:</span><span class="w"> </span><span class="l">new                   </span><span class="w"> </span><span class="c"># etcd initial cluster state, new or existing</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_election_timeout</span><span class="p">:</span><span class="w"> </span><span class="m">1000</span><span class="w">       </span><span class="c"># etcd election timeout, 1000ms by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_heartbeat_interval</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w">      </span><span class="c"># etcd heartbeat interval, 100ms by default</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 class="c"># etcd root password for RBAC, change it!</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">#                         VARS: MINIO                            #</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">#minio_seq: 1                     # minio instance identifier, REQUIRED</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#minio_cluster:                   # minio cluster identifier, REQUIRED (define in cluster vars)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_user</span><span class="p">:</span><span class="w"> </span><span class="l">minio                </span><span class="w"> </span><span class="c"># minio os user, `minio` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_https</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                 </span><span class="c"># use https for minio, true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_node</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${minio_cluster}-${minio_seq}.pigsty&#39;</span><span class="w"> </span><span class="c"># minio node name pattern</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_data</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;/data/minio&#39;</span><span class="w">         </span><span class="c"># minio data dir(s), use {x...y} to specify multi drivers</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#minio_volumes:                   # minio data volumes, override defaults if specified</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_domain</span><span class="p">:</span><span class="w"> </span><span class="l">sss.pigsty         </span><span class="w"> </span><span class="c"># minio external 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">minio_port</span><span class="p">:</span><span class="w"> </span><span class="m">9000</span><span class="w">                  </span><span class="c"># minio service port, 9000 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_admin_port</span><span class="p">:</span><span class="w"> </span><span class="m">9001</span><span class="w">            </span><span class="c"># minio console port, 9001 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_access_key</span><span class="p">:</span><span class="w"> </span><span class="l">minioadmin     </span><span class="w"> </span><span class="c"># root access key, `minioadmin` by default</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 class="c"># root secret key, `S3User.MinIO` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_extra_vars</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">              </span><span class="c"># extra environment variables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_provision</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># run minio provisioning tasks?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_alias</span><span class="p">:</span><span class="w"> </span><span class="l">sss                 </span><span class="w"> </span><span class="c"># alias name for local minio deployment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#minio_endpoint: https://sss.pigsty:9000 # if not specified, overwritten by defaults</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_buckets</span><span class="p">:</span><span class="w">                    </span><span class="c"># list of minio bucket to be created</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="l">pgsql }</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 ,versioning</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="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data }</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"># list of minio user to be created</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">S3User.Backup ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql }</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">s3user_meta ,secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.Meta   ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">meta  }</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">s3user_data ,secret_key</span><span class="p">:</span><span class="w"> </span><span class="nt">S3User.Data   ,policy</span><span class="p">:</span><span class="w"> </span><span class="l">data  }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_safeguard</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">            </span><span class="c"># prevent purging running minio instance?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_rm_data</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">               </span><span class="c"># purging minio data and config?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_rm_pkg</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">               </span><span class="c"># uninstall minio packages?</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">#                         VARS: REDIS                            #</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">#redis_cluster:        &lt;CLUSTER&gt; # redis cluster name, required identity parameter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#redis_node: 1            &lt;NODE&gt; # redis node sequence number, node int id required</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#redis_instances: {}      &lt;NODE&gt; # redis instances definition on this redis node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_fs_main</span><span class="p">:</span><span class="w"> </span><span class="l">/data/redis       </span><span class="w"> </span><span class="c"># redis main data directory, `/data/redis` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># install redis exporter on redis nodes?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9121</span><span class="w">         </span><span class="c"># redis exporter listen port, 9121 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">        </span><span class="c"># cli args and extra options for redis exporter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_type</span><span class="p">:</span><span class="w"> </span><span class="l">redis                </span><span class="w"> </span><span class="c"># redis implementation: redis or valkey</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_mode</span><span class="p">:</span><span class="w"> </span><span class="l">standalone           </span><span class="w"> </span><span class="c"># redis mode: standalone,cluster,sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_conf</span><span class="p">:</span><span class="w"> </span><span class="l">redis.conf           </span><span class="w"> </span><span class="c"># redis config template path, except sentinel</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_bind_address</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;0.0.0.0&#39;</span><span class="w">     </span><span class="c"># redis bind address, empty string will use host ip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_max_memory</span><span class="p">:</span><span class="w"> </span><span class="l">1GB            </span><span class="w"> </span><span class="c"># max memory used by each redis instance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_mem_policy</span><span class="p">:</span><span class="w"> </span><span class="l">allkeys-lru    </span><span class="w"> </span><span class="c"># redis memory eviction policy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                </span><span class="c"># redis password, empty string will disable password</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rdb_save</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;1200 1&#39;</span><span class="p">]</span><span class="w">        </span><span class="c"># redis rdb save directives, disable with empty list</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_aof_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">          </span><span class="c"># enable redis append only file?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rename_commands</span><span class="p">:</span><span class="w"> </span>{}<span class="w">         </span><span class="c"># rename redis dangerous commands</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_cluster_replicas</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">         </span><span class="c"># replica number for one master in redis cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_sentinel_monitor</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">        </span><span class="c"># sentinel master list, works on sentinel cluster only</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_safeguard</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">            </span><span class="c"># prevent purging running redis instance?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rm_data</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">               </span><span class="c"># remove redis data dir?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">redis_rm_pkg</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">               </span><span class="c"># uninstall selected engine &amp; redis-exporter packages?</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">#                         VARS: PGSQL                            #</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></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"># PG_IDENTITY</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">pg_mode</span><span class="p">:</span><span class="w"> </span><span class="l">pgsql          #CLUSTER </span><span class="w"> </span><span class="c"># pgsql cluster mode: pgsql,citus,mssql,mysql,ivory,pgtde,polar,gpsql,agens,oriole,pgedge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_cluster:           #CLUSTER  # pgsql cluster name, required identity parameter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_seq: 0             #INSTANCE # pgsql instance seq number, required identity parameter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_role: replica      #INSTANCE # pgsql role, required, could be primary,replica,offline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_instances: {}      #INSTANCE # define multiple pg instances on node in `{port:ins_vars}` format</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_upstream:          #INSTANCE # repl upstream ip addr for standby cluster or cascade replica</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_shard:             #CLUSTER  # pgsql shard name, optional identity for sharding clusters</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># pg_group: 0           #CLUSTER  # pgsql shard index number, optional identity for sharding clusters</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># gp_role: master       #CLUSTER  # greenplum role of this cluster, could be master or segment</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_offline_query</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="c">#INSTANCE # set to true to enable offline queries on this instance</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"># PG_BUSINESS</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"># postgres business object definition, overwrite in group vars</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 class="p">[]</span><span class="w">                      </span><span class="c"># postgres business users</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 class="p">[]</span><span class="w">                  </span><span class="c"># postgres business databases</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 class="p">[]</span><span class="w">                   </span><span class="c"># postgres business services</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_hba_rules</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">                  </span><span class="c"># business hba rules for postgres</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgb_hba_rules</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">                 </span><span class="c"># business hba rules for pgbouncer</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="p">[]</span><span class="w">                    </span><span class="c"># postgres crontab entries for dbsu</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># global credentials, overwrite in global vars</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dbsu_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">              </span><span class="c"># dbsu password, empty string means no dbsu password by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_replication_username</span><span class="p">:</span><span class="w"> </span><span class="l">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">DBUser.Replicator</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_admin_username</span><span class="p">:</span><span class="w"> </span><span class="l">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">DBUser.DBA</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_monitor_username</span><span class="p">:</span><span class="w"> </span><span class="l">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">DBUser.Monitor</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"># PG_INSTALL</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">pg_dbsu</span><span class="p">:</span><span class="w"> </span><span class="l">postgres                </span><span class="w"> </span><span class="c"># os dbsu name, postgres by default, better not change it</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dbsu_uid</span><span class="p">:</span><span class="w"> </span><span class="m">543</span><span class="w">                  </span><span class="c"># os dbsu uid and gid, 26 for default postgres users and groups</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dbsu_sudo</span><span class="p">:</span><span class="w"> </span><span class="l">limit              </span><span class="w"> </span><span class="c"># dbsu sudo privilege, none,limit,all,nopass. limit by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dbsu_home</span><span class="p">:</span><span class="w"> </span><span class="l">/var/lib/pgsql     </span><span class="w"> </span><span class="c"># postgresql home directory, `/var/lib/pgsql` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dbsu_ssh_exchange</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">        </span><span class="c"># exchange postgres dbsu ssh key among same pgsql cluster</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"># postgres major version to be installed, 18 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_bin_dir</span><span class="p">:</span><span class="w"> </span><span class="l">/usr/pgsql/bin       </span><span class="w"> </span><span class="c"># postgres binary dir, `/usr/pgsql/bin` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_log_dir</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/log/postgres     </span><span class="w"> </span><span class="c"># postgres log dir, `/pg/log/postgres` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_packages</span><span class="p">:</span><span class="w">                      </span><span class="c"># pg packages to be installed, alias can be used</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">pgsql-main pgsql-common</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 class="p">[]</span><span class="w">                 </span><span class="c"># pg extensions to be installed, alias can be used</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"># PG_BOOTSTRAP</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">pg_data</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/data                </span><span class="w"> </span><span class="c"># postgres data directory, `/pg/data` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_fs_main</span><span class="p">:</span><span class="w"> </span><span class="l">/data/postgres       </span><span class="w"> </span><span class="c"># postgres main data directory, `/data/postgres` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_fs_backup</span><span class="p">:</span><span class="w"> </span><span class="l">/data/backups      </span><span class="w"> </span><span class="c"># postgres backup data directory, `/data/backups` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_storage_type</span><span class="p">:</span><span class="w"> </span><span class="l">SSD             </span><span class="w"> </span><span class="c"># storage type for pg main data, SSD,HDD, SSD by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dummy_filesize</span><span class="p">:</span><span class="w"> </span><span class="l">64MiB         </span><span class="w"> </span><span class="c"># size of `/pg/dummy`, hold 64MB disk space for emergency use</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;0.0.0.0&#39;</span><span class="w">              </span><span class="c"># postgres/pgbouncer listen addresses, comma separated list</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_port</span><span class="p">:</span><span class="w"> </span><span class="m">5432</span><span class="w">                     </span><span class="c"># postgres listen port, 5432 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_localhost</span><span class="p">:</span><span class="w"> </span><span class="l">/var/run/postgresql</span><span class="w"> </span><span class="c"># postgres unix socket dir for localhost connection</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">             </span><span class="c"># if disabled, no postgres cluster will be created during init</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_mode</span><span class="p">:</span><span class="w"> </span><span class="l">default            </span><span class="w"> </span><span class="c"># patroni working mode: default,pause,remove</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_namespace</span><span class="p">:</span><span class="w"> </span><span class="l">/pg                </span><span class="w"> </span><span class="c"># top level key namespace in etcd, used by patroni &amp; vip</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_port</span><span class="p">:</span><span class="w"> </span><span class="m">8008</span><span class="w">                </span><span class="c"># patroni listen port, 8008 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_log_dir</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/log/patroni </span><span class="w"> </span><span class="c"># patroni log dir, `/pg/log/patroni` by default</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">false</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">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="c"># patroni watchdog mode: automatic,required,off. off by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">patroni_username</span><span class="p">:</span><span class="w"> </span><span class="l">postgres       </span><span class="w"> </span><span class="c"># patroni restapi username, `postgres` by default</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">Patroni.API    </span><span class="w"> </span><span class="c"># patroni restapi password, `Patroni.API` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_etcd_password</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">              </span><span class="c"># etcd password for this pg cluster, &#39;&#39; to use pg_cluster</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_primary_db</span><span class="p">:</span><span class="w"> </span><span class="l">postgres          </span><span class="w"> </span><span class="c"># primary database name, used by citus,etc... ,postgres by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_parameters</span><span class="p">:</span><span class="w"> </span>{}<span class="w">                 </span><span class="c"># extra parameters in postgresql.auto.conf</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_files</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span><span class="w">                      </span><span class="c"># extra files to be copied to postgres data directory (e.g. license)</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"># config template: oltp,olap,crit,tiny. `oltp.yml` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_max_conn</span><span class="p">:</span><span class="w"> </span><span class="l">auto                </span><span class="w"> </span><span class="c"># postgres max connections, `auto` will use recommended value</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_shared_buffer_ratio</span><span class="p">:</span><span class="w"> </span><span class="m">0.25</span><span class="w">      </span><span class="c"># postgres shared buffers ratio, 0.25 by default, 0.1~0.4</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_io_method</span><span class="p">:</span><span class="w"> </span><span class="l">worker             </span><span class="w"> </span><span class="c"># io method for postgres, auto,fsync,worker,io_uring, worker by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_rto</span><span class="p">:</span><span class="w"> </span><span class="l">norm                     </span><span class="w"> </span><span class="c"># shared rto mode for patroni &amp; haproxy: fast,norm,safe,wide</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_rto_plan</span><span class="p">:</span><span class="w">  </span><span class="c"># [ttl, loop, retry, start, margin, inter, fastinter, downinter, rise, fall]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">fast</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="m">20</span><span class="w">  </span><span class="p">,</span><span class="m">5</span><span class="w">  </span><span class="p">,</span><span class="m">5</span><span class="w">  </span><span class="p">,</span><span class="m">15</span><span class="w"> </span><span class="p">,</span><span class="m">5</span><span class="w">  </span><span class="p">,</span><span class="s1">&#39;1s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;0.5s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;1s&#39;</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">norm</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="m">30</span><span class="w">  </span><span class="p">,</span><span class="m">5</span><span class="w">  </span><span class="p">,</span><span class="m">10</span><span class="w"> </span><span class="p">,</span><span class="m">25</span><span class="w"> </span><span class="p">,</span><span class="m">5</span><span class="w">  </span><span class="p">,</span><span class="s1">&#39;2s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;1s&#39;</span><span class="w">   </span><span class="p">,</span><span class="s1">&#39;2s&#39;</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">safe</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="m">60</span><span class="w">  </span><span class="p">,</span><span class="m">10</span><span class="w"> </span><span class="p">,</span><span class="m">20</span><span class="w"> </span><span class="p">,</span><span class="m">45</span><span class="w"> </span><span class="p">,</span><span class="m">10</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;3s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;1.5s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;3s&#39;</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">wide</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="m">120</span><span class="w"> </span><span class="p">,</span><span class="m">20</span><span class="w"> </span><span class="p">,</span><span class="m">30</span><span class="w"> </span><span class="p">,</span><span class="m">95</span><span class="w"> </span><span class="p">,</span><span class="m">15</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;4s&#39;</span><span class="w"> </span><span class="p">,</span><span class="s1">&#39;2s&#39;</span><span class="w">   </span><span class="p">,</span><span class="s1">&#39;4s&#39;</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </span><span class="p">,</span><span class="m">3</span><span class="w"> </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_rpo</span><span class="p">:</span><span class="w"> </span><span class="m">1048576</span><span class="w">                   </span><span class="c"># recovery point objective in bytes, `1MiB` at most by default</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;pg_stat_statements, auto_explain&#39;</span><span class="w">  </span><span class="c"># preloaded libraries, `pg_stat_statements,auto_explain` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_delay</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">                       </span><span class="c"># replication apply delay for standby cluster leader</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_checksum</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                 </span><span class="c"># enable data checksum for postgres cluster?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_pwd_enc</span><span class="p">:</span><span class="w"> </span><span class="l">scram-sha-256        </span><span class="w"> </span><span class="c"># password encryption algorithm</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_encoding</span><span class="p">:</span><span class="w"> </span><span class="l">UTF8                </span><span class="w"> </span><span class="c"># database cluster encoding, `UTF8` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_locale</span><span class="p">:</span><span class="w"> </span><span class="l">C                     </span><span class="w"> </span><span class="c"># database cluster local, `C` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_lc_collate</span><span class="p">:</span><span class="w"> </span><span class="l">C                 </span><span class="w"> </span><span class="c"># database cluster collate, `C` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_lc_ctype</span><span class="p">:</span><span class="w"> </span><span class="l">C                   </span><span class="w"> </span><span class="c"># database character type, `C` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pgsodium_key: &#34;&#34;                 # pgsodium key, 64 hex digit, default to sha256(pg_cluster)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#pgsodium_getkey_script: &#34;&#34;       # pgsodium getkey script path, pgsodium_getkey by default</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"># PG_PROVISION</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">pg_provision</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                </span><span class="c"># provision postgres cluster after bootstrap</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_init</span><span class="p">:</span><span class="w"> </span><span class="l">pg-init                 </span><span class="w"> </span><span class="c"># provision init script for cluster template, `pg-init` by default</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  ,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  ,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  ,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, dbrole_readonly] ,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="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_privileges</span><span class="p">:</span><span class="w">            </span><span class="c"># default privileges when created by admin user</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT USAGE      ON SCHEMAS    TO  dbrole_readonly</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT SELECT     ON TABLES     TO  dbrole_readonly</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT SELECT     ON SEQUENCES  TO  dbrole_readonly</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT EXECUTE    ON FUNCTIONS  TO  dbrole_readonly</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT USAGE      ON SCHEMAS    TO  dbrole_offline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT SELECT     ON TABLES     TO  dbrole_offline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT SELECT     ON SEQUENCES  TO  dbrole_offline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT EXECUTE    ON FUNCTIONS  TO  dbrole_offline</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT INSERT     ON TABLES     TO  dbrole_readwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT UPDATE     ON TABLES     TO  dbrole_readwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT DELETE     ON TABLES     TO  dbrole_readwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT USAGE      ON SEQUENCES  TO  dbrole_readwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT UPDATE     ON SEQUENCES  TO  dbrole_readwrite</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT TRUNCATE   ON TABLES     TO  dbrole_admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT REFERENCES ON TABLES     TO  dbrole_admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT TRIGGER    ON TABLES     TO  dbrole_admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">GRANT CREATE     ON SCHEMAS    TO  dbrole_admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_schemas</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">monitor ]  </span><span class="w"> </span><span class="c"># default schemas to be created</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_extensions</span><span class="p">:</span><span class="w">            </span><span class="c"># default extensions to be created</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">pg_stat_statements ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pgstattuple        ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pg_buffercache     ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pageinspect        ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pg_prewarm         ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pg_visibility      ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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">pg_freespacemap    ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">monitor }</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_fdw       ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">file_fdw           ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">btree_gist         ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">btree_gin          ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">pg_trgm            ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">intagg             ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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">intarray           ,schema</span><span class="p">:</span><span class="w"> </span><span class="l">public  }</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="l">pg_repack }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_reload</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                   </span><span class="c"># reload postgres after hba changes</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 default 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="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="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="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">pwd   ,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="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">pwd   ,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="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">pwd   ,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="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="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">pwd   ,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="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">pwd   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;admin @ intranet nodes with pwd&#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="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">ssl   ,title</span><span class="p">:</span><span class="w"> </span><span class="nt">&#39;admin @ everywhere with ssl &amp; pwd&#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="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">pwd   ,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="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">pwd   ,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="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">pwd   ,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 default 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="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="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="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">pwd   ,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="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="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">pwd   ,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="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="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">pwd   ,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"># PG_BACKUP</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">pgbackrest_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">          </span><span class="c"># enable pgbackrest on pgsql host?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_log_dir</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/log/pgbackrest</span><span class="w"> </span><span class="c"># pgbackrest log dir, `/pg/log/pgbackrest` by default</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">local         </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 class="nt">pgbackrest_init_backup</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># take a full backup after pgbackrest is initialized?</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 backups 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">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_key</span><span class="p">:</span><span class="w"> </span><span class="l">pgbackrest           </span><span class="w"> </span><span class="c"># minio user access key for pgbackrest</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">S3User.Backup </span><span class="w"> </span><span class="c"># minio user secret key for pgbackrest</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">cipher_pass</span><span class="p">:</span><span class="w"> </span><span class="l">pgBackRest      </span><span class="w"> </span><span class="c"># AES encryption password, default is &#39;pgBackRest&#39;</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 the the 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 class="c">#-----------------------------------------------------------------</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># PG_ACCESS</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">pgbouncer_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">           </span><span class="c"># if disabled, pgbouncer will not be launched on pgsql host</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_port</span><span class="p">:</span><span class="w"> </span><span class="m">6432</span><span class="w">              </span><span class="c"># pgbouncer listen port, 6432 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_log_dir</span><span class="p">:</span><span class="w"> </span><span class="l">/pg/log/pgbouncer </span><span class="w"> </span><span class="c"># pgbouncer log dir, `/pg/log/pgbouncer` by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_auth_query</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">       </span><span class="c"># query postgres to retrieve unlisted business users?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_poolmode</span><span class="p">:</span><span class="w"> </span><span class="l">transaction  </span><span class="w"> </span><span class="c"># pooling mode: transaction,session,statement, transaction by default</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">disable       </span><span class="w"> </span><span class="c"># pgbouncer client ssl mode, disable by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_ignore_param</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">extra_float_digits, application_name, TimeZone, DateStyle, IntervalStyle, search_path ]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_weight</span><span class="p">:</span><span class="w"> </span><span class="m">100</span><span class="w">          </span><span class="c">#INSTANCE # relative load balance weight in service, 100 by default, 0-255</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_service_provider</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">           </span><span class="c"># dedicate haproxy node group name, or empty string for local nodes 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">pgbouncer</span><span class="w"> </span><span class="c"># default service destination if svc.dest=&#39;default&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_default_services</span><span class="p">:</span><span class="w">              </span><span class="c"># postgres default service definitions</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">primary ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">5433 ,dest</span><span class="p">:</span><span class="w"> </span><span class="nt">default  ,check</span><span class="p">:</span><span class="w"> </span><span class="nt">/primary   ,selector</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[]&#34;</span><span class="w"> </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">replica ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">5434 ,dest</span><span class="p">:</span><span class="w"> </span><span class="nt">default  ,check</span><span class="p">:</span><span class="w"> </span><span class="nt">/read-only ,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` || pg_role == `offline` ]&#34;</span><span class="w"> </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">default ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">5436 ,dest</span><span class="p">:</span><span class="w"> </span><span class="nt">postgres ,check</span><span class="p">:</span><span class="w"> </span><span class="nt">/primary   ,selector</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[]&#34;</span><span class="w"> </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">offline ,port</span><span class="p">:</span><span class="w"> </span><span class="nt">5438 ,dest</span><span class="p">:</span><span class="w"> </span><span class="nt">postgres ,check</span><span class="p">:</span><span class="w"> </span><span class="nt">/replica   ,selector</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;[? pg_role == `offline` || pg_offline_query ]&#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 == `replica` &amp;&amp; !pg_offline_query]&#34;</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">false</span><span class="w">             </span><span class="c"># enable a l2 vip for pgsql primary? false by default</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">127.0.0.1</span><span class="l">/24     </span><span class="w"> </span><span class="c"># vip address in `&lt;ipv4&gt;/&lt;mask&gt;` format, require if vip is enabled</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_vip_interface</span><span class="p">:</span><span class="w"> </span><span class="l">auto           </span><span class="w"> </span><span class="c"># vip network interface to listen, auto by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dns_suffix</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                 </span><span class="c"># pgsql dns suffix, &#39;&#39; by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_dns_target</span><span class="p">:</span><span class="w"> </span><span class="l">auto              </span><span class="w"> </span><span class="c"># auto, primary, vip, none, or ad hoc ip</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"># PG_MONITOR</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">pg_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">              </span><span class="c"># enable pg_exporter on pgsql hosts?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_config</span><span class="p">:</span><span class="w"> </span><span class="l">pg_exporter.yml   </span><span class="w"> </span><span class="c"># pg_exporter configuration file name</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_cache_ttls</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;1,10,60,300&#39;</span><span class="w">  </span><span class="c"># pg_exporter collector ttl stage in seconds, &#39;1,10,60,300&#39; by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9630</span><span class="w">                 </span><span class="c"># pg_exporter listen port, 9630 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_params</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;sslmode=disable&#39;</span><span class="w">  </span><span class="c"># extra url parameters for pg_exporter dsn</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_url</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                    </span><span class="c"># overwrite auto-generate pg dsn if specified</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_auto_discovery</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">       </span><span class="c"># enable auto database discovery? enabled by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_exclude_database</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;template0,template1,postgres&#39;</span><span class="w"> </span><span class="c"># csv of database that WILL NOT be monitored during auto-discovery</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_include_database</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">       </span><span class="c"># csv of database that WILL BE monitored during auto-discovery</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_connect_timeout</span><span class="p">:</span><span class="w"> </span><span class="m">200</span><span class="w">       </span><span class="c"># pg_exporter connect timeout in ms, 200 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">                </span><span class="c"># overwrite extra options for pg_exporter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">       </span><span class="c"># enable pgbouncer_exporter on pgsql hosts?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9631</span><span class="w">          </span><span class="c"># pgbouncer_exporter listen port, 9631 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_exporter_url</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">             </span><span class="c"># overwrite auto-generate pgbouncer dsn if specified</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbouncer_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="w">         </span><span class="c"># overwrite extra options for pgbouncer_exporter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_exporter_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">      </span><span class="c"># enable pgbackrest_exporter on pgsql hosts?</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_exporter_port</span><span class="p">:</span><span class="w"> </span><span class="m">9854</span><span class="w">         </span><span class="c"># pgbackrest_exporter listen port, 9854 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pgbackrest_exporter_options</span><span class="p">:</span><span class="w"> </span><span class="p">&gt;-</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">      --collect.interval=120
</span></span></span><span class="line"><span class="cl"><span class="sd">      --log.level=info</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"># PG_REMOVE</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">pg_safeguard</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">               </span><span class="c"># stop pg_remove running if pg_safeguard is enabled, false by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_rm_data</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                  </span><span class="c"># remove postgres data during remove? true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_rm_backup</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                </span><span class="c"># remove pgbackrest backup during primary remove? true by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_rm_pkg</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">                   </span><span class="c"># uninstall postgres packages during remove? true by default</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="nn">...</span><span class="w">
</span></span></span></code></pre></div>


--------

## 配置解读

`demo/debian` 模板是针对 Debian 和 Ubuntu 发行版优化的配置。

**支持的发行版**：
- Debian 12 (Bookworm)
- Debian 13 (Trixie)
- Ubuntu 22.04 LTS (Jammy)
- Ubuntu 24.04 LTS (Noble)
- Ubuntu 26.04 LTS (Resolute)

**关键特性**：
- 使用 PGDG APT 软件源
- 针对 APT 包管理器优化
- 支持 Debian/Ubuntu 特定的软件包名称

**适用场景**：
- 云服务器（Ubuntu 广泛使用）
- 容器环境（Debian 常用作基础镜像）
- 开发测试环境
