# app/dify

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

---

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

---

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

更多细节，请参考 **[Dify 部署教程](/docs/app/dify/)**


--------

## 配置概览

- 配置名称： `app/dify`
- 节点数量： 单节点
- 配置说明：使用 Pigsty 托管的 PostgreSQL 部署 Dify
- 适用系统：`el8`, `el9`, `el10`, `d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`, `aarch64`
- 相关配置：[`meta`](/docs/conf/meta/)

启用方式：

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


--------

## 配置内容

源文件地址：[`pigsty/conf/app/dify.yml`](https://github.com/pgsty/pigsty/blob/main/conf/app/dify.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      :   dify.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   pigsty config for running 1-node dify app</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2025-02-24</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Mtime     :   2026-07-09</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Docs      :   https://pigsty.io/docs/app/dify</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="c"># Last Verified Dify Version: v1.15.0 on 2026-07-09</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># tutorial: https://pigsty.io/docs/app/dify</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/dify   # use this dify 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 dify with docker-compose</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"># To replace domain name:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c">#   sed -ie &#39;s/dify.pigsty/dify.pigsty.cc/g&#39; pigsty.yml</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"># the dify application</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></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">dify  </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">dify</span><span class="p">:</span><span class="w">     </span><span class="c"># app name, should have corresponding ~/pigsty/app/dify 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/dify ,state</span><span class="p">:</span><span class="w"> </span><span class="nt">directory ,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/dify/.env config file</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"># change domain, mirror, proxy, secret key</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">NGINX_SERVER_NAME</span><span class="p">:</span><span class="w"> </span><span class="l">dify.pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># A secret key for signing and encryption, gen with `openssl rand -base64 42` (CHANGE PASSWORD!)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">SECRET_KEY</span><span class="p">:</span><span class="w"> </span><span class="l">sk-somerandomkey</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># expose DIFY nginx service with port 5001 by default</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DIFY_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">5001</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># where to store dify files? the default is ./volume, we&#39;ll use another volume created above</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DIFY_DATA</span><span class="p">:</span><span class="w"> </span><span class="l">/data/dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># enable the upstream websocket sidecar, while keeping PostgreSQL/pgvector external</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">COMPOSE_PROFILES</span><span class="p">:</span><span class="w"> </span><span class="l">collaboration</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">NEXT_PUBLIC_SOCKET_URL</span><span class="p">:</span><span class="w"> </span><span class="l">ws://dify.pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">TRIGGER_URL</span><span class="p">:</span><span class="w"> </span><span class="l">http://dify.pigsty</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">ENDPOINT_URL_TEMPLATE</span><span class="p">:</span><span class="w"> </span><span class="l">http://dify.pigsty/e/{hook_id}</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"># proxy and mirror settings</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#PIP_MIRROR_URL: https://pypi.tuna.tsinghua.edu.cn/simple</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#SANDBOX_HTTP_PROXY: http://10.10.10.10:12345</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#SANDBOX_HTTPS_PROXY: http://10.10.10.10: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"># database credentials</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_TYPE</span><span class="p">:</span><span class="w"> </span><span class="l">postgresql</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_USERNAME</span><span class="p">:</span><span class="w"> </span><span class="l">dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">difyai123456</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_HOST</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">5432</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">DB_SSL_MODE</span><span class="p">:</span><span class="w"> </span><span class="l">disable</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">VECTOR_STORE</span><span class="p">:</span><span class="w"> </span><span class="l">pgvector</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_HOST</span><span class="p">:</span><span class="w"> </span><span class="m">10.10.10.10</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_PORT</span><span class="p">:</span><span class="w"> </span><span class="m">5432</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_USER</span><span class="p">:</span><span class="w"> </span><span class="l">dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">difyai123456</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_DATABASE</span><span class="p">:</span><span class="w"> </span><span class="l">dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_MIN_CONNECTION</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">PGVECTOR_MAX_CONNECTION</span><span class="p">:</span><span class="w"> </span><span class="m">10</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 MinIO/S3 storage, disabled by default to avoid touching backup MinIO</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#STORAGE_TYPE: s3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_ENDPOINT: http://10.10.10.10:9000</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_BUCKET_NAME: dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_ACCESS_KEY: dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_SECRET_KEY: S3User.Dify</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_REGION: us-east-1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_ADDRESS_STYLE: path</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">pg-meta</span><span class="p">:</span><span class="w">
</span></span></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_extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">pgvector ]</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">dify ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">difyai123456 ,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 ] ,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">dify superuser }</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">dify        ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dify ,extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span>{<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">vector } ] ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">dify main database  }</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">dify_plugin ,owner</span><span class="p">:</span><span class="w"> </span><span class="nt">dify ,comment</span><span class="p">:</span><span class="w"> </span><span class="l">dify plugin daemon 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">dify ,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.16.0.0/12  ,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 dify access from local docker networks&#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></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="nt">infra_portal</span><span class="p">:</span><span class="w">                     </span><span class="c"># domain names and upstream servers</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="c">#minio :  { domain: m.pigsty    ,endpoint: &#34;${admin_ip}:9001&#34; ,scheme: https ,websocket: true }</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="c"># nginx server config for dify</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">dify.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;10.10.10.10:5001&#34;</span><span class="w">   </span><span class="c"># dify 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">dify.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="c"># Dify v1.15.0 is patched in app/dify/patches for PostgreSQL 18&#39;s built-in uuidv7().</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/dify` 模板提供了 Dify AI 应用开发平台的一键部署方案，当前模板已按 Dify v1.15.0 验证。

**Dify 是什么**：
- 开源的 LLM 应用开发平台
- 支持 RAG、Agent、Workflow 等 AI 应用模式
- 提供可视化的 Prompt 编排和应用构建界面
- 支持多种 LLM 后端（OpenAI、Claude、本地模型等）

**关键特性**：
- 使用 Pigsty 管理的 PostgreSQL 替代 Dify 自带的数据库
- 使用 pgvector 作为向量存储（替代 Weaviate/Qdrant）
- 启用 `collaboration` Compose Profile 与 WebSocket 边车
- 支持 HTTPS 和自定义域名
- 数据持久化到独立目录 `/data/dify`

**访问方式**：

```bash
# 直接访问 Dify Web 界面
http://<IP>:5001

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

**适用场景**：
- 企业内部 AI 应用开发平台
- RAG 知识库问答系统
- LLM 驱动的自动化工作流
- AI Agent 开发与部署

**注意事项**：
- 必须修改 `SECRET_KEY`，使用 `openssl rand -base64 42` 生成
- 需要配置 LLM API 密钥（如 OpenAI API Key）
- Docker 网络需要能访问 PostgreSQL（模板已为本机 Docker 网段配置 `172.16.0.0/12` HBA 规则）
- 建议配置代理以加速 Python 包下载
