# app/mattermost

> Mattermost 应用模板，使用 Pigsty 托管 PostgreSQL + Docker 一键部署团队协作系统。

---

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

---

`app/mattermost` 配置模板用于部署 Mattermost，默认将应用与数据库放在同一节点，使用 Pigsty 提供 PostgreSQL、Nginx 与监控能力。


--------

## 配置概览

- 配置名称： `app/mattermost`
- 节点数量： 单节点（默认）
- 配置说明：Mattermost + PostgreSQL + Docker 的开箱即用模板。
- 适用系统：`el8`, `el9`, `el10`, `d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`, `aarch64`
- 相关配置：[`app/odoo`](/docs/conf/odoo/)、[`app/registry`](/docs/conf/registry/)、[`supabase`](/docs/conf/supabase/)

启用方式：

```bash
./configure -c app/mattermost
./deploy.yml
./docker.yml
./app.yml
```


--------

## 配置内容

源文件地址：[`pigsty/conf/app/mattermost.yml`](https://github.com/pgsty/pigsty/blob/main/conf/app/mattermost.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      :   mattermost.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   pigsty config for running 1-node mattermost app</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2026-02-04</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2026-02-04</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/app/mattermost</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="c"># tutorial: https://pigsty.io/docs/app/mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># how to use this template:</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">#  curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./bootstrap                    # prepare local repo &amp; ansible</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./configure -c app/mattermost  # use this mattermost config template</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># vi pigsty.yml                  # IMPORTANT: CHANGE CREDENTIALS!!</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./deploy.yml                   # install pigsty &amp; pgsql</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./docker.yml                   # install docker &amp; docker-compose</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># ./app.yml                      # install mattermost</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"># Design Notes:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># - Mattermost data/config/logs/plugins/bleve-indexes are persisted under /data/mattermost (host paths).</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># - If you enable JuiceFS (PGFS), /data/mattermost becomes a mountpoint backed by PostgreSQL.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   This is optional and must be prepared with ./juice.yml before ./app.yml.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># - Storing file data in PostgreSQL increases DB size, WAL, and IO load; monitor bloat and backup cost.</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="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"># the mattermost application</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">mattermost</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="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">app</span><span class="p">:</span><span class="w"> </span><span class="l">mattermost  </span><span class="w"> </span><span class="c"># specify app name to be installed (in the apps)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">apps</span><span class="p">:</span><span class="w">             </span><span class="c"># define all applications</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">mattermost</span><span class="p">:</span><span class="w">     </span><span class="c"># app name, should have corresponding ~/pigsty/app/mattermost folder</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">file</span><span class="p">:</span><span class="w">         </span><span class="c"># data directory 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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost                ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/config         ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/data           ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/logs           ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/plugins        ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/client/plugins ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</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">path</span><span class="p">:</span><span class="w"> </span><span class="nt">/data/mattermost/bleve-indexes  ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,group</span><span class="p">:</span><span class="w"> </span><span class="nt">2000 ,mode</span><span class="p">:</span><span class="w"> </span><span class="m">0755</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">conf</span><span class="p">:</span><span class="w">         </span><span class="c"># override /opt/mattermost/.env config file</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DOMAIN</span><span class="p">:</span><span class="w"> </span><span class="l">mm.pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">APP_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">8065</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">TZ</span><span class="p">:</span><span class="w"> </span><span class="l">UTC</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 connection string</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">POSTGRES_URL</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;postgres://dbuser_mattermost:DBUser.Mattermost@10.10.10.10:5432/mattermost?sslmode=disable&amp;connect_timeout=10&#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"># image version</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_IMAGE</span><span class="p">:</span><span class="w"> </span><span class="l">mattermost-team-edition</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_IMAGE_TAG</span><span class="p">:</span><span class="w"> </span><span class="l">latest</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"># data directories</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_CONFIG_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/config</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_DATA_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_LOGS_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/logs</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_PLUGINS_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/plugins</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_CLIENT_PLUGINS_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/client/plugins</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MATTERMOST_BLEVE_INDEXES_PATH</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/bleve-indexes</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">MM_BLEVESETTINGS_INDEXDIR</span><span class="p">:</span><span class="w"> </span><span class="l">/data/mattermost/bleve-indexes</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"># the mattermost database</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg-mattermost</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-mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_users</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_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 ] ,createdb</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">admin user for mattermost }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_databases</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">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="w"> </span><span class="nt">user</span><span class="p">:</span><span class="w"> </span><span class="nt">dbuser_mattermost ,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">172.17.0.0/16  ,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 mattermost access from local docker network&#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">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 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="s1">&#39;00 01 * * * /pg/bin/pg-backup full&#39;</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="c"># make a full backup every 1am</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">infra</span><span class="p">:</span><span class="w"> </span>{<span class="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 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 class="c">#minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">vars</span><span class="p">:</span><span class="w">                               </span><span class="c"># global variables</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l">v4.5.0                  </span><span class="w"> </span><span class="c"># pigsty version string</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">admin_ip</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">             </span><span class="c"># admin node ip address</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">region</span><span class="p">:</span><span class="w"> </span><span class="l">default                  </span><span class="w"> </span><span class="c"># upstream mirror region: default|china|europe</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">node_tune</span><span class="p">:</span><span class="w"> </span><span class="l">oltp                  </span><span class="w"> </span><span class="c"># node tuning specs: oltp,olap,tiny,crit</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg_conf</span><span class="p">:</span><span class="w"> </span><span class="l">oltp.yml                </span><span class="w"> </span><span class="c"># pgsql tuning specs: {oltp,olap,tiny,crit}.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="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 app group</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#docker_registry_mirrors: [&#34;https://docker.1panel.live&#34;,&#34;https://docker.1ms.run&#34;,&#34;https://docker.xuanyuan.me&#34;,&#34;https://registry-1.docker.io&#34;]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></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 &amp; pull docker images</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.*,*.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:  127.0.0.1:12345 # add your proxy env here for downloading packages or pull images</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="c">#https_proxy: 127.0.0.1:12345 # usually the proxy is format as 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:   127.0.0.1:12345</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># Optional: PGFS with JuiceFS (store Mattermost file data in PostgreSQL)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># 1) Uncomment and adjust the block below</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># 2) Run: ./juice.yml -l &lt;host&gt;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c"># 3) Ensure /data/mattermost is mounted before ./app.yml</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">#juice_cache: /data/juice</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#juice_instances:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#  pgfs:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    path  : /data/mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    meta  : postgres://dbuser_mattermost:DBUser.Mattermost@10.10.10.10:5432/mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    data  : --storage postgres --bucket 10.10.10.10:5432/mattermost --access-key dbuser_mattermost --secret-key DBUser.Mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    port  : 9567</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    owner : 2000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    group : 2000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="c">#    mode  : &#39;0755&#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">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></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">mattermost</span><span class="p">:</span><span class="w">                      </span><span class="c"># nginx server config for mattermost</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">domain</span><span class="p">:</span><span class="w"> </span><span class="l">mm.pigsty             </span><span class="w"> </span><span class="c"># REPLACE WITH YOUR OWN DOMAIN!</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">endpoint</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;${admin_ip}:8065&#34;</span><span class="w">   </span><span class="c"># mattermost service endpoint: IP:PORT</span><span class="w">
</span></span></span><span class="line"><span class="cl"><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="c"># add websocket support</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">certbot</span><span class="p">:</span><span class="w"> </span><span class="l">mm.pigsty            </span><span class="w"> </span><span class="c"># certbot cert name, apply with `make cert`</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_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</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">node,infra,pgsql</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></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>


--------

## 配置解读

`app/mattermost` 模板定义了三个关键部分：

- `mattermost` 组：应用主机与 `apps.mattermost` 参数，包含 `.env` 覆写与数据目录声明。
- `pg-mattermost` 组：独立 PostgreSQL 集群、数据库与应用账号。
- `infra`/`etcd` 组：Pigsty 基础设施依赖。

关键特征：

- 默认开启 `docker_enabled: true`，并通过 `./docker.yml` 完成容器运行时准备。
- Nginx 门户默认暴露 `mm.pigsty`（`infra_portal.mattermost`），支持 WebSocket。
- 预置本地 Docker 网段 HBA 规则（`172.17.0.0/16`）供应用访问数据库。
- 可选启用 JuiceFS（注释块）将 `/data/mattermost` 挂载到 PostgreSQL 后端存储。

注意事项：

- 请在部署前修改数据库口令、域名与应用密码等敏感信息。
- 若开放公网访问，建议配合 HTTPS、ACL 与防火墙规则。
