# app/insforge

> 使用 Pigsty 托管的 PostgreSQL 部署 InsForge 后端即服务平台

---

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

---

`app/insforge` 配置模板用于部署 InsForge OSS，并使用 Pigsty 托管的 PostgreSQL 作为外部数据库。

更多细节请参考：**[InsForge 部署教程](/docs/app/insforge/)**


--------

## 配置概览

- 配置名称： `app/insforge`
- 节点数量：单节点
- 配置说明：部署 InsForge App、PostgREST、Deno Runtime，并创建所需 PostgreSQL 用户、角色、数据库与扩展
- 适用系统：`el8`, `el9`, `el10`, `d12`, `d13`, `u22`, `u24`, `u26`
- 适用架构：`x86_64`, `aarch64`
- 相关配置：[`meta`](/docs/conf/meta/)、[`supabase`](/docs/conf/supabase/)

启用方式：

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


--------

## 配置内容

源文件地址：[`pigsty/conf/app/insforge.yml`](https://github.com/pgsty/pigsty/blob/main/conf/app/insforge.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      :   insforge.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Desc      :   pigsty config for running 1-node insforge app</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Ctime     :   2026-03-10</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/insforge</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"># InsForge: Open-source Backend-as-a-Service for AI coding agents</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># GitHub: https://github.com/InsForge/InsForge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c"># Last Verified InsForge Version: v2.2.6 on 2026-07-09</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"># 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/insforge  # use this insforge 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 insforge 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/isf.pigsty/isf.yourdomain.com/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 insforge application</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">insforge</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">insforge  </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">insforge</span><span class="p">:</span><span class="w">     </span><span class="c"># app name, should have corresponding ~/pigsty/app/insforge folder</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/insforge/.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"># secrets (CHANGE THESE!)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">JWT_SECRET</span><span class="p">:</span><span class="w"> </span><span class="l">your-secret-key-here-must-be-32-char-or-above</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">ENCRYPTION_KEY</span><span class="p">:</span><span class="w"> </span><span class="l">your-encryption-key-here-must-be-32-char-or-above</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">ROOT_ADMIN_USERNAME</span><span class="p">:</span><span class="w"> </span><span class="l">admin@example.com</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">ROOT_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="c"># legacy aliases for older InsForge images</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">ADMIN_EMAIL</span><span class="p">:</span><span class="w"> </span><span class="l">admin@example.com</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">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></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># database credentials (must match pg_users below)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">POSTGRES_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">POSTGRES_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">POSTGRES_DB</span><span class="p">:</span><span class="w"> </span><span class="l">insforge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">POSTGRES_USER</span><span class="p">:</span><span class="w"> </span><span class="l">dbuser_insforge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="nt">POSTGRES_PASSWORD</span><span class="p">:</span><span class="w"> </span><span class="l">DBUser.Insforge</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: image overrides, useful when ghcr.io is slow or blocked</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#INSFORGE_IMAGE: ghcr.io/insforge/insforge-oss:v2.2.6</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DENO_RUNTIME_IMAGE: ghcr.io/insforge/deno-runtime: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"># optional: LLM model gateway via OpenRouter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#OPENROUTER_API_KEY: sk-or-xxxxx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#MAX_COMPLETION_TOKENS: 16384</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: MCP / Cloud API access</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#ACCESS_API_KEY: ik_xxxxx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#ACCESS_ANON_KEY: anon_xxxxx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#CLOUD_API_HOST: https://api.insforge.dev</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: object storage / CDN</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_ACCESS_KEY_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_SECRET_ACCESS_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_REGION:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_S3_BUCKET:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_ACCESS_KEY_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_SECRET_ACCESS_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_ENDPOINT_URL:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#S3_FORCE_PATH_STYLE: true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_CONFIG_BUCKET:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_CONFIG_REGION:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_CLOUDFRONT_URL:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_CLOUDFRONT_KEY_PAIR_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#AWS_CLOUDFRONT_PRIVATE_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#MAX_FILE_SIZE:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#MAX_JSON_BODY_SIZE: 100mb</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#MAX_URLENCODED_BODY_SIZE: 10mb</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: Deno edge functions</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DENO_DEPLOY_TOKEN:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DENO_DEPLOY_ORG_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#FUNCTIONS_DOMAIN:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># legacy aliases for older InsForge images</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DENO_SUBHOSTING_TOKEN:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DENO_SUBHOSTING_ORG_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"># optional: site deployment / compute</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#VERCEL_TOKEN:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#VERCEL_TEAM_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#VERCEL_PROJECT_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#FLY_API_TOKEN:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#FLY_ORG:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#COMPUTE_DOMAIN:</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: payments</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#STRIPE_TEST_SECRET_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#STRIPE_LIVE_SECRET_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#RAZORPAY_TEST_KEY_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#RAZORPAY_TEST_KEY_SECRET:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#RAZORPAY_LIVE_KEY_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#RAZORPAY_LIVE_KEY_SECRET:</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: managed / hybrid cloud metadata</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#DEPLOYMENT_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#PROJECT_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#APP_KEY:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#INSFORGE_TELEMETRY_DISABLED: 1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c"># optional: OAuth providers</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#GOOGLE_CLIENT_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#GOOGLE_CLIENT_SECRET:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#GITHUB_CLIENT_ID:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">              </span><span class="c">#GITHUB_CLIENT_SECRET:</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_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_insforge ,password</span><span class="p">:</span><span class="w"> </span><span class="nt">DBUser.Insforge ,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="s1">&#39;insforge superuser&#39;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">anon            ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,comment</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;insforge anonymous role for PostgREST&#39;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">authenticated   ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,comment</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;insforge authenticated role&#39;</span><span class="w"> </span>}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span>- {<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="nt">project_admin   ,login</span><span class="p">:</span><span class="w"> </span><span class="nt">false ,bypassrls</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="s1">&#39;insforge project admin with RLS bypass&#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_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="l">insforge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">owner</span><span class="p">:</span><span class="w"> </span><span class="l">dbuser_insforge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">baseline</span><span class="p">:</span><span class="w"> </span><span class="l">insforge.sql</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">pgcrypto, http, pg_cron]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="l">InsForge BaaS database</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_libs</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;pg_cron, pg_stat_statements, auto_explain&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_parameters</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">cron.database_name</span><span class="p">:</span><span class="w"> </span><span class="l">insforge</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">app.encryption_key</span><span class="p">:</span><span class="w"> </span><span class="l">your-encryption-key-here-must-be-32-char-or-above</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">insforge.policy_grant_role</span><span class="p">:</span><span class="w"> </span><span class="l">project_admin</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">insforge.policy_grant_tables</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;storage.objects,realtime.channels,realtime.messages,payments.stripe_checkout_sessions,payments.stripe_customer_portal_sessions,payments.razorpay_orders,payments.razorpay_subscriptions&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">insforge.internal_schemas</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;ai,auth,compute,deployments,email,functions,memory,payments,realtime,schedules,storage,system&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">pg_extensions</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="l">pg_cron, pg_http ]</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_insforge ,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 insforge 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="nt">insforge</span><span class="p">:</span><span class="w">                       </span><span class="c"># nginx server config for insforge</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">isf.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:7130&#34;</span><span class="w">  </span><span class="c"># insforge API+dashboard 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">isf.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/insforge` 模板默认部署：

- InsForge 主服务：`ghcr.io/insforge/insforge-oss:v2.2.6`，端口 `7130`
- PostgREST：`postgrest/postgrest:v12.2.12`，端口 `5430`
- Deno Runtime：端口 `7133`
- PostgreSQL 数据库：`insforge`
- 扩展：`pgcrypto`、`http`、`pg_cron`
- PostgreSQL 18，并为 `project_admin` 开启 `BYPASSRLS`
- 本机 Docker 网段 HBA：`172.16.0.0/12`
- Nginx 入口：`isf.pigsty` -> `10.10.10.10:7130`

**访问方式**：

```bash
http://<IP>:7130
http://isf.pigsty
```

默认管理员账号为 `admin@example.com` / `pigsty`。生产环境必须修改 `JWT_SECRET`、`ENCRYPTION_KEY`、`ROOT_ADMIN_PASSWORD` 与数据库密码；这些值还要与 `pg_parameters` 中的加密及授权设置保持一致。
