# demo/demo

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

---

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

---

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

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


--------

## 配置概览

- 配置名称： `demo/demo`
- 节点数量： 单节点
- 配置说明：Pigsty 公开演示站点配置
- 适用系统：`el8`, `el9`, `el10`, `d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`
- 相关配置：[`meta`](/docs/conf/meta/)，[`rich`](/docs/conf/rich/)

启用方式：

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


--------

## 主要特性

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

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


--------

## 配置内容

源文件地址：[`pigsty/conf/demo/demo.yml`](https://github.com/pgsty/pigsty/blob/main/conf/demo/demo.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      :   demo.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   Pigsty Public Demo Configuration</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2020-05-22</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2025-12-12</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/conf/demo</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="nt">all</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">children</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="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></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">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></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">nodename</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty.cc      </span><span class="w"> </span><span class="c"># overwrite the default hostname</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">false</span><span class="w">    </span><span class="c"># do not use the pg identity as hostname</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">true</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_registry_mirrors</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;https://mirror.ccs.tencentyun.com&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;https://docker.1ms.run&#34;</span><span class="p">]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="c"># ./pgsql-monitor.yml -l infra     # monitor &#39;external&#39; PostgreSQL instance</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_exporters</span><span class="p">:</span><span class="w">             </span><span class="c"># treat local postgres as RDS for demonstration purpose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">20001</span><span class="p">:</span><span class="w"> </span>{<span class="w"> </span><span class="nt">pg_cluster</span><span class="p">:</span><span class="w"> </span><span class="nt">pg-foo, pg_seq</span><span class="p">:</span><span class="w"> </span><span class="nt">1, pg_host</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#20002: { pg_cluster: pg-bar, pg_seq: 1, pg_host: 10.10.10.11 , pg_port: 5432 }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#20003: { pg_cluster: pg-bar, pg_seq: 2, pg_host: 10.10.10.12 , pg_exporter_url: &#39;postgres://dbuser_monitor:DBUser.Monitor@10.10.10.12:5432/postgres?sslmode=disable&#39; }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#20004: { pg_cluster: pg-bar, pg_seq: 3, pg_host: 10.10.10.13 , pg_monitor_username: dbuser_monitor, pg_monitor_password: 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"># 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"># postgres example cluster: pg-meta</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="l">primary } }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">pg-meta</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_users</span><span class="p">:</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_meta       ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Meta       ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty admin user }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="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="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_grafana    ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Grafana    ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for grafana database    }</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_bytebase   ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Bytebase   ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for bytebase database   }</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_kong       ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Kong       ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for kong api gateway    }</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_gitea      ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Gitea      ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for gitea service       }</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_wiki       ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Wiki       ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for wiki.js service     }</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_noco       ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Noco       ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">admin user for nocodb service      }</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_odoo       ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Odoo       ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="nt">admin user for odoo service ,createdb</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">#,superuser: true}</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_mattermost ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.MatterMost ,pgbouncer</span><span class="p">:</span><span class="w"> </span><span class="nt">true ,roles</span><span class="p">:</span><span class="w"> </span><span class="nt">[dbrole_admin]    ,comment</span><span class="p">:</span><span class="w"> </span><span class="nt">admin user for mattermost ,createdb</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_databases</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">meta ,baseline</span><span class="p">:</span><span class="w"> </span><span class="nt">cmdb.sql ,comment</span><span class="p">:</span><span class="w"> </span><span class="nt">pigsty meta database ,schemas</span><span class="p">:</span><span class="w"> </span><span class="nt">[pigsty] ,extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>{<span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">vector},{name: postgis},{name: timescaledb}]}</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">grafana  ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_grafana  ,revokeconn</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">grafana primary database  }</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">bytebase ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_bytebase ,revokeconn</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">bytebase primary database }</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">kong     ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_kong     ,revokeconn</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">kong api gateway database }</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">gitea    ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_gitea    ,revokeconn</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">gitea meta database }</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">wiki     ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_wiki     ,revokeconn</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">wiki meta database  }</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">noco     ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_noco     ,revokeconn</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">nocodb database     }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c">#- {name: odoo     ,owner: dbuser_odoo     ,revokeconn: true ,comment: odoo main database  }</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">mattermost ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_mattermost ,revokeconn</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">mattermost main database }</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 class="nt">pg_libs</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;timescaledb,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="nt">pg_extensions</span><span class="p">:</span><span class="w"> </span><span class="c"># 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 class="l">timescaledb timescaledb_toolkit pg_timeseries periods temporal_tables emaj table_version pg_cron pg_task pg_later pg_background</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">postgis pgrouting pointcloud pg_h3 q3c ogr_fdw geoip pg_polyline pg_geohash</span><span class="w"> </span><span class="c">#mobilitydb</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pgvector vchord pgvectorscale pg_vectorize pg_similarity smlar pg_summarize pg_tiktoken pg4ml</span><span class="w"> </span><span class="c">#pgml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_search pgroonga pg_bigm zhparser pg_bestmatch vchord_bm25 hunspell</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">citus pg_duckdb pg_mooncake duckdb_fdw pg_parquet pg_fkpart pg_partman plproxy #pg_strom</span><span class="w"> </span><span class="c">#hydra</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">age hll rum pg_graphql pg_jsonschema jsquery pg_hint_plan hypopg index_advisor pg_plan_filter imgsmlr pg_ivm pg_incremental pgmq pgq pg_cardano omnigres</span><span class="w"> </span><span class="c">#rdkit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_tle plv8 pllua plprql pldebugger plpgsql_check plprofiler plsh pljava #plr #pgtap #faker</span><span class="w"> </span><span class="c">#dbt2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_prefix pg_semver pgunit pgpdf pglite_fusion md5hash asn1oid pg_roaringbitmap pgfaceting pgsphere pg_country pg_xenophile pg_currency pgcollection pgmp numeral pg_rational pguint pg_uint128 hashtypes ip4r pg_uri pg_emailaddr pg_acl timestamp9 chkpass #pg_duration #debversion</span><span class="w"> </span><span class="c">#pg_rrule</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_gzip pg_bzip pg_zstd pg_http pg_net pg_curl pgjq pgjwt pg_smtp_client pg_html5_email_address url_encode pgsql_tweaks pg_extra_time pgpcre icu_ext pgqr pg_protobuf pg_envvar floatfile pg_readme ddl_historization data_historization pg_schedoc pg_hashlib pg_xxhash shacrypt cryptint pg_ecdsa pgsparql</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_idkit pg_uuidv7 permuteseq pg_hashids sequential_uuids topn quantile lower_quantile count_distinct omnisketch ddsketch vasco pgxicor tdigest first_last_agg extra_window_functions floatvec aggs_for_vecs aggs_for_arrays pg_arraymath pg_math pg_random pg_base36 pg_base62 pg_base58 pg_financial</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_repack pg_squeeze pg_dirtyread pgfincore pg_cooldown pg_ddlx pg_prioritize pg_checksums pg_readonly pg_upless pg_permissions pgautofailover pg_catcheck preprepare pgcozy pg_orphaned pg_crash pg_cheat_funcs pg_fio pg_savior safeupdate pg_drop_events table_log #pgagent</span><span class="w"> </span><span class="c">#pgpool</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pg_profile pg_tracing pg_show_plans pg_stat_kcache pg_stat_monitor pg_qualstats pg_store_plans pg_track_settings pg_wait_sampling system_stats pg_meta pgnodemx pg_sqlog bgw_replstatus pgmeminfo toastinfo pg_explain_ui pg_relusage pagevis powa</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">passwordcheck_cracklib supautils pgsodium pg_vault pg_session_jwt pg_anon pgsmcrypto pgaudit pgauditlogtofile pg_auth_mon credcheck pgcryptokey pg_jobmon logerrors login_hook set_user pg_snakeoil pgextwlist pg_auditor sslutils pg_noset</span><span class="w"> </span><span class="c">#pg_tde</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">wrappers multicorn odbc_fdw jdbc_fdw mysql_fdw tds_fdw sqlite_fdw pgbouncer_fdw mongo_fdw redis_fdw pg_redis_pubsub kafka_fdw hdfs_fdw firebird_fdw aws_s3 log_fdw #oracle_fdw</span><span class="w"> </span><span class="c">#db2_fdw</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">documentdb orafce pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pgmemcache</span><span class="w"> </span><span class="c">#pg_dbms_job</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- <span class="l">pglogical pglogical_ticker pgl_ddl_deploy pg_failover_slots db_migrator wal2json wal2mongo decoderbufs decoder_raw mimeo pg_fact_loader pg_bulkload</span><span class="w"> </span><span class="c">#repmgr</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-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="nt">&#39;10.10.10.10 6379&#39; }, 6381</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="c"># Kafka 4.x dynamic KRaft: combined broker/controller on the demo node</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">kf-main</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">kafka_seq</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span>}<span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">vars</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">kafka_cluster</span><span class="p">:</span><span class="w"> </span><span class="l">kf-main</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="nt">vars</span><span class="p">:</span><span class="w">                               </span><span class="c"># global variables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l">v4.5.0                  </span><span class="w"> </span><span class="c"># pigsty version string</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">admin_ip</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">             </span><span class="c"># admin node ip address</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">region</span><span class="p">:</span><span class="w"> </span><span class="l">china                    </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></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">cc           </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="nt">pigsty.cc      ,path</span><span class="p">:</span><span class="w">     </span><span class="s2">&#34;/www/pigsty.cc&#34;</span><span class="w">   </span><span class="nt">,cert</span><span class="p">:</span><span class="w"> </span><span class="nt">/etc/cert/pigsty.cc.crt ,key</span><span class="p">:</span><span class="w"> </span><span class="l">/etc/cert/pigsty.cc.key }</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">domain</span><span class="p">:</span><span class="w"> </span><span class="nt">m.pigsty.cc    ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;${admin_ip}:9001&#34;</span><span class="w"> </span><span class="nt">,scheme</span><span class="p">:</span><span class="w"> </span><span class="nt">https ,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">postgrest    </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="nt">api.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8884&#34;</span><span class="w">   </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pgadmin      </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="nt">adm.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8885&#34;</span><span class="w">   </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">pgweb        </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="nt">cli.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8886&#34;</span><span class="w">   </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">bytebase     </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="nt">ddl.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8887&#34;</span><span class="w">   </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">jupyter      </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="nt">lab.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8888&#34;</span><span class="nt">, websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">gitea        </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="nt">git.pigsty.cc  ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8889&#34;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">wiki         </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="nt">wiki.pigsty.cc ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:9002&#34;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">noco         </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="nt">noco.pigsty.cc ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:9003&#34;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">supa         </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="nt">supa.pigsty.cc ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.10:8000&#34;</span><span class="w"> </span><span class="nt">,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">dify         </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="nt">dify.pigsty.cc ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.10:8001&#34;</span><span class="w"> </span><span class="nt">,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">odoo         </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="nt">odoo.pigsty.cc ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8069&#34;</span><span class="w">   </span><span class="nt">,websocket</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">mm           </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="nt">mm.pigsty.cc   ,endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;10.10.10.10:8065&#34;</span><span class="w"> </span><span class="nt">,websocket</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="c"># scp -r ~/pgsty/cc/cert/*       pj:/etc/cert/       # copy https certs</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># scp -r ~/dev/pigsty.cc/public  pj:/www/pigsty.cc   # copy pigsty.cc website</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="nt">node_etc_hosts</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;${admin_ip} i.pigsty sss.pigsty&#34;</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">node_timezone</span><span class="p">:</span><span class="w"> </span><span class="l">Asia/Hong_Kong</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></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">pool cn.pool.ntp.org iburst</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="l">pool ${admin_ip} iburst      </span><span class="w"> </span><span class="c"># assume non-admin nodes does not have internet access</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">false</span><span class="w">         </span><span class="c"># do not take backups since this is disposable demo env</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># keep 3GiB metrics data at most on demo env</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">      -retention.maxDiskSpaceUsageBytes=3GiB</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"># install all postgresql18 extensions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_version</span><span class="p">:</span><span class="w"> </span><span class="m">18</span><span class="w">                    </span><span class="c"># default postgres version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">repo_extra_packages</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">pg18-core ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl ,kafka-stack ,java-runtime]</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="l">pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl ]</span><span class="w"> </span><span class="c">#,pg18-olap]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># PASSWORD : https://pigsty.io/docs/setup/security/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#----------------------------------------------#</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_admin_password</span><span class="p">:</span><span class="w"> </span><span class="l">pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">grafana_view_password</span><span class="p">:</span><span class="w"> </span><span class="l">DBUser.Viewer</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="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_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 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">patroni_password</span><span class="p">:</span><span class="w"> </span><span class="l">Patroni.API</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></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">minio_secret_key</span><span class="p">:</span><span class="w"> </span><span class="l">S3User.MinIO</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">etcd_root_password</span><span class="p">:</span><span class="w"> </span><span class="l">Etcd.Root</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">...</span><span class="w">
</span></span></span></code></pre></div>


--------

## 配置解读

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

**关键特性**：
- 配置 HTTPS 证书和自定义域名
- 安装所有可用的 PostgreSQL 扩展
- 集成 Redis、Kafka 等组件
- 配置 Docker 镜像加速

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

**注意事项**：
- 需要准备 SSL 证书文件
- 需要配置 DNS 解析
- 部分扩展在 ARM64 架构不可用
