PentAGI v2.2.0 配置参数详解

PentAGI v2.2.0 的 .env 配置参数详解:加载机制与优先级、13 家 LLM Provider、Embedding、搜索引擎、Docker 沙箱安全参数、监听与认证、数据库、代理超时、Agent 监督逐类讲解,附生产配置模板与 6 条实测排障,2026-10-23 溯源与实测。

PentAGI安全测试LLM2026/10/23

PentAGI v2.2.0 配置参数详解

目标:面向已完成 PentAGI Compose 部署的运维与安全工程师,逐类讲清 .env 配置文件中各参数的作用、默认值与生产建议。本文参数说明全部溯源自 PentAGI v2.2.0 源码(.env.example、backend/docs/config.md),关键行为均在本机 v2.2.0 实例上实测验证,溯源与实测日期为 2026-10-23。

一、环境信息

项目值
软件版本PentAGI v2.2.0(2026-10-05 发布,官方 Releases 与官网双源确认)
实测镜像vxcontrol/pentagi:2.2.0(Docker Hub,2026-10-05 推送)
部署方式Docker Compose(4 服务:pentagi / pgvector / pgexporter / scraper),部署过程见本专栏《PentAGI Docker Compose 部署指南》
参数溯源文件源码 .env.example(623 行)、backend/docs/config.md(2236 行)、backend/pkg/config/config.go
溯源与实测日期2026-10-23

参数体量实测:v2.2.0 的 .env.example 共含 345 个变量赋值行,其中约 133 行属于可选的 Graphiti / Neo4j / Langfuse 可观测栈,PentAGI 主栈核心配置约 200 个。本文覆盖主栈全部功能类别,可选栈仅讲与主栈衔接的入口参数。

合规提示:PentAGI 是面向授权渗透测试场景的自动化工具。所有配置示例仅用于自有环境或已获书面授权的测试目标,文中参数不涉及任何攻击结果的编造。

二、前置条件

  • 已按《PentAGI Docker Compose 部署指南》完成部署,实例可正常登录 Web 控制台;
  • 部署目录下存在从源码复制的 .env 文件(由 docker-compose.yml 的 env_file 机制注入容器);
  • 具备查看容器日志的权限(docker compose logs),本文多处用启动日志验证配置生效。

三、参数查看与修改方式

3.1 配置加载机制(源码实查)

PentAGI 后端启动时按以下顺序装配配置(backend/pkg/config/config.go 的 NewConfig()):

  1. godotenv.Load() 读取工作目录下的 .env 文件,写入进程环境变量——不覆盖已存在的变量;
  2. github.com/caarlos0/env/v10 按 struct tag 将环境变量解析进 Config 结构体,未设置且无默认值的字段保持零值;
  3. 各 provider 注册时做凭据门槛检查(pkg/providers/registry.go 的 Enabled 函数):某家 LLM 的 API Key 为空,该 provider 直接不注册,不会导致启动失败,只是控制台可用 provider 变少。

由此得出两条关键推论,均已实测验证:

  • shell 环境变量优先于 .env 文件:godotenv 不覆盖已有变量,若执行 docker compose up 的 shell 里已导出同名变量(如 SERVER_HOST),它会压过 .env 中的值。实测曾因此导致容器监听在容器内 loopback 上、宿主机 curl 返回 000(排障过程见第七节与部署篇第六节)。
  • .env 改完必须重建容器:配置在进程启动时一次性读取,修改 .env 后需 docker compose up -d 重建使配置生效,仅 restart 不会重新读文件。

3.2 修改与验证流程(实测命令)

$ vi .env                                          # 编辑参数
$ docker compose config | grep SERVER_HOST         # 渲染 compose 最终值,确认没有 shell 变量覆盖
    SERVER_HOST: 0.0.0.0
$ docker compose up -d                             # 重建生效
$ docker compose logs --tail 50 pentagi            # 观察启动日志确认监听地址与 provider 注册

3.3 Web 控制台可改项与环境变量的边界(源码 config.md 实查)

Web 控制台 Settings 页可管理:Provider 配置档案(每个代理角色用哪个模型)、Prompt 模板、PentAGI API Token。但以下类别仍以环境变量为唯一事实来源:LLM 凭据与端点、搜索引擎凭据、Langfuse/Graphiti 等第三方集成、MCP 服务管理。改这些必须走 .env + 重建。

四、参数总览

类别代表变量作用
核心运行时DEBUG DATA_DIR TENANT_ID ASK_USER调试、持久化目录、多实例命名空间、操作确认
LLM ProviderOPEN_AI_KEY LLM_SERVER_URL 等 13 家大模型接入(凭据为空即不启用该家)
EmbeddingEMBEDDING_URL EMBEDDING_MODEL EMBEDDING_PROVIDER向量嵌入(知识库语义检索)
搜索引擎DUCKDUCKGO_ENABLED SEARXNG_URL TAVILY_API_KEY 等 9 类代理信息检索工具的数据源
Docker 沙箱DOCKER_HOST DOCKER_INSIDE DOCKER_NETWORK沙箱容器如何创建、隔离与联通
服务监听与安全PENTAGI_LISTEN_PORT SERVER_HOST PUBLIC_URL COOKIE_SIGNING_SALT监听地址端口、CORS、Cookie 签名、OAuth
数据库PENTAGI_POSTGRES_PASSWORD DATABASE_MAX_OPEN_CONNSpgvector 连接与连接池
Web ScraperSCRAPER_PUBLIC_URL SCRAPER_PRIVATE_URL网页浏览/截图服务的内外部地址
代理与超时PROXY_URL HTTP_CLIENT_TIMEOUT EXTERNAL_SSL_CA_PATH出站代理、外部调用超时、自签 CA
Agent 监督EXECUTION_MONITOR_ENABLED MAX_GENERAL_AGENT_TOOL_CALLS工具调用循环检测与上限
摘要与助手SUMMARIZER_USE_QA ASSISTANT_USE_AGENTS长对话压缩策略
可观测LANGFUSE_BASE_URL OTEL_HOST追踪上报地址

五、核心参数分类详解

5.1 核心运行时

变量默认值说明
DEBUGfalse调试模式,输出更详细日志并启用开发特性
DATA_DIR./data(容器内解析为 /opt/pentagi/data)持久化数据目录:flow 文件缓存、截图、installation_id 等
TENANT_ID空多实例共享外部资源时的命名空间前缀,须匹配 ^[a-z][a-z0-9_]{0,31}$,非法值直接拒绝启动。空值即单实例,行为不变
DOCKER_PORTS_BASE0(即 28000)每个 flow 沙箱发布宿主端口的起始值,单实例占用 [base, base+2000)
ASK_USERfalse开启后代理执行敏感操作前需用户在界面确认
INSTALLATION_ID / LICENSE_KEY空与 PentAGI Cloud API 通讯的安装标识与许可密钥,自用可留空
UPDATE_STRATEGYpreview更新通道:preview / stable / nightly,无法识别的值回退 preview
UPDATE_CHECK_INTERVAL3h服务器向 Cloud API 上报自身状态的间隔,0 关闭上报
UPDATE_SERVER_HOST / SUPPORT_SERVER_HOSTupdate.pentagi.com / support.pentagi.comCloud API 端点,格式为 host[:port] 不带 scheme,写 http:// 前缀会被拒绝

TENANT_ID 生效时自动命名空间的范围:PostgreSQL 会创建同名 schema、沙箱容器名变为 <tenant>-pentagi-terminal-<flow>、Graphiti 分组变为 <tenant>-flow-<id>、Cookie/JWT 密钥加入租户因子(一个实例签发的会话在另一个实例上失效)。不自动命名空间的:DATA_DIR、DOCKER_NETWORK、各监听端口——多实例部署必须手工错开。

5.2 LLM Provider(13 家)

每家 provider 只需配置凭据即可启用,凭据为空则不注册(见 3.1 凭据门槛)。v2.2.0 支持的 13 家及默认端点(源码 .env.example 实查):

Provider关键变量默认端点
OpenAIOPEN_AI_KEYhttps://api.openai.com/v1
AnthropicANTHROPIC_API_KEY(另支持 ANTHROPIC_IDENTITY_TOKEN_FILE 等 6 个工作负载身份联合变量,仅密钥为空时生效)https://api.anthropic.com/v1
Google GeminiGEMINI_API_KEYhttps://generativelanguage.googleapis.com
AWS BedrockBEDROCK_REGION(默认 us-east-1)+ 凭据三选一:BEDROCK_DEFAULT_AUTH(最高优先)→ BEDROCK_BEARER_TOKEN → BEDROCK_ACCESS_KEY_ID+BEDROCK_SECRET_ACCESS_KEY可用 BEDROCK_SERVER_URL 指向 VPC 端点
DeepSeekDEEPSEEK_API_KEYhttps://api.deepseek.com
GLM(智谱)GLM_API_KEY;国内端点可改 https://open.bigmodel.cn/api/paas/v4https://api.z.ai/api/paas/v4
Kimi(月之暗面)KIMI_API_KEY;国内端点 https://api.moonshot.cn/v1https://api.moonshot.ai/v1
Qwen / DashScopeQWEN_API_KEY;国内端点 https://dashscope.aliyuncs.com/compatible-mode/v1https://dashscope-us.aliyuncs.com/compatible-mode/v1
MiniMaxMINIMAX_API_KEYhttps://api.minimax.io/v1
MistralMISTRAL_API_KEYhttps://api.mistral.ai/v1
xAI (Grok)XAI_API_KEYhttps://api.x.ai/v1
OllamaOLLAMA_SERVER_URL(本地如 http://ollama-server:11434 或云 https://ollama.com + OLLAMA_SERVER_API_KEY)空
Custom(自定义 OpenAI 兼容端点)LLM_SERVER_URL LLM_SERVER_KEY LLM_SERVER_MODEL空

Custom provider 补充说明:

  • LLM_SERVER_PROVIDER:模型名前缀,接 LiteLLM 网关时按需设置(如 openai/gpt-4o 形态);DeepSeek/GLM/Kimi/Qwen/MiniMax/Mistral/xAI 七家的 *_PROVIDER 变量同理;
  • LLM_SERVER_API_TYPE 置 azure 或 azure_ad 可对接 Azure OpenAI 部署,此时 LLM_SERVER_API_VERSION(默认 2024-10-21)才生效;
  • LLM_SERVER_PRESERVE_REASONING(默认 false):开启后在多轮对话中回传 reasoning_content,部分推理模型(文档举例 Moonshot)缺它会在工具调用轮次报错;
  • LLM_FALLBACK_PROVIDER:主 provider 调用失败时用哪一家重试,空为关闭。

实测记录(LLM 接入方式):实验环境无真实 LLM API Key,本批次用 LLM_SERVER_PROVIDER=custom 接入自建的 OpenAI 兼容 mock 端点完成全链路验证——LLM_SERVER_URL=http://mock-openai:9000/v1、LLM_SERVER_KEY=sk-mock-0000、LLM_SERVER_MODEL=mock-llm。启动后 provider 正常注册,创建 flow 时 PentAGI 先向端点发一次探测调用采样 tool call ID 模板(mock 返回带 tool_calls 的响应后探测通过),随后成功创建沙箱容器。mock 不支持的部分(真实模型对话质量)不在本文讨论范围。

5.3 Embedding(向量嵌入)

变量默认值说明
EMBEDDING_PROVIDERopenai可选 openai / ollama / mistral / jina / huggingface
EMBEDDING_URL / EMBEDDING_KEY / EMBEDDING_MODEL空未设置时回退用对应 LLM provider 的端点与密钥(openai provider 回退 OPEN_AI_SERVER_URL/OPEN_AI_KEY)
EMBEDDING_BATCH_SIZE512批量嵌入大小,影响内存与吞吐
EMBEDDING_MAX_TEXT_BYTES8192单文档送入嵌入模型的字节上限,超限截断重内容字段(原始全文仍保留在库)
EMBEDDING_STRIP_NEW_LINEStrue嵌入前去换行,官方说明可提升质量

实测记录:LLM_SERVER_* 指向 mock 端点、未配 EMBEDDING_* 时,启动日志出现 embedder 初始化报错;将 EMBEDDING_URL/KEY 指向同一 mock 端点(/v1/embeddings 路径)、EMBEDDING_MODEL=mock-embed、EMBEDDING_PROVIDER=openai 后报错消失(日志 grep 不再命中)。结论:custom LLM provider 场景必须显式配齐 EMBEDDING 四件套,不能指望回退逻辑(回退目标是 OpenAI 官方端点与密钥,custom 场景均为空)。

5.4 搜索引擎(9 类)

引擎关键变量默认说明
DuckDuckGoDUCKDUCKGO_ENABLEDtrue免 Key;可配 DUCKDUCKGO_REGION(如 cn-zh)、DUCKDUCKGO_SAFESEARCH(off/moderate/strict)、DUCKDUCKGO_TIME_RANGE(d/w/m/y)
SploitusSPLOITUS_ENABLEDtrue漏洞利用/CVE 检索,免 Key,安全研究专用
GoogleGOOGLE_API_KEY + GOOGLE_CX_KEY空Custom Search JSON API,需两个凭据都配;GOOGLE_LR_KEY 默认 lang_en
TraversaalTRAVERSAAL_API_KEY空—
TavilyTAVILY_API_KEY空—
FirecrawlFIRECRAWL_API_KEY空FIRECRAWL_API_URL 默认云 API https://api.firecrawl.dev,可指向自建实例
PerplexityPERPLEXITY_API_KEY空PERPLEXITY_MODEL 默认 sonar;PERPLEXITY_CONTEXT_SIZE 默认 low
SearXNGSEARXNG_URL空自建元搜索引擎,填实例基地址即可,免商业 Key
内置分析引擎WEB_SEARCH_INTERNAL_ENABLEDfalse无付费 API 的兜底:搜索引擎找链接 → scraper 抓页 → summarizer 归纳,默认关(成本考量)

SearXNG 其余参数:SEARXNG_CATEGORIES(默认 general)、SEARXNG_LANGUAGE、SEARXNG_SAFESEARCH(默认 0,0/1/2 三档)、SEARXNG_TIME_RANGE、SEARXNG_TIMEOUT。注意:SEARXNG_URL 只填地址,SearXNG 实例本身需另行部署(官方 Compose 栈不含它)。

实测记录:实验环境关闭了外网搜索(DUCKDUCKGO_ENABLED=false),Sploitus 保持默认,flow 创建与沙箱运行不受影响——搜索引擎只在代理执行检索类工具时才会被调用。

5.5 Docker 沙箱(安全关键项)

变量默认值说明
DOCKER_HOST / DOCKER_TLS_VERIFY / DOCKER_CERT_PATH空PentAGI 自身用哪套凭据连 Docker daemon 创建沙箱;空则用本机 socket
DOCKER_INSIDEfalse是否给沙箱容器挂载 Docker 访问能力(Docker-in-Docker)。高危开关,见下方安全说明
DOCKER_INSIDE_HOST / DOCKER_INSIDE_TLS_VERIFY / DOCKER_INSIDE_CERT_PATH空仅 DOCKER_INSIDE=true 时生效:沙箱内可访问的另一个 daemon 端点(与宿主 daemon 分离才算通过启动策略检查)
DOCKER_INSIDE_POLICY_TESTSfalse开启后启动时跑一次沙箱隔离自检(daemon 必须与 PentAGI 自身分离、必须拒绝宿主逃逸请求),失败则沙箱功能整体关闭,服务照常启动
DOCKER_NETWORK空沙箱加入的 Docker 网络;特殊值 host 让沙箱直接共享宿主网络栈(做原始包收发类测试才需要,隔离性最差)
DOCKER_PUBLIC_IP0.0.0.0沙箱端口发布绑定的宿主 IP
DOCKER_DEFAULT_IMAGEdebian:latest请求镜像不可用时的兜底镜像
DOCKER_DEFAULT_IMAGE_FOR_PENTESTvxcontrol/kali-linux渗透任务默认沙箱镜像
DOCKER_ALLOWED_IMAGES空允许模型选择的镜像白名单(逗号分隔),空为不限制
DOCKER_IMAGE_SELECTION_MODEllmllm 由模型挑镜像,fixed 强制用渗透镜像
DOCKER_NET_ADMINcompose 默认 true给主容器 NET_ADMIN 能力(网络测试类工具需要)
TERMINAL_TOOL_TIMEOUT1200终端工具默认超时(秒),作用于代理请求 timeout=0 或负值的场景;合法区间 1–10800(3 小时),越界值收敛到上限

安全警告(源码 .env.example 原文,对应官方 issue #337):DOCKER_INSIDE=true 会把宿主 Docker socket 挂进每个沙箱,沙箱内进程获得不受限的 Docker API——可被提示注入利用逃逸到宿主。确需 DinD 时,官方建议用 DOCKER_INSIDE_HOST 指向独立的低权限 daemon(如 docker-socket-proxy),而非直挂裸 socket。

5.6 服务监听与安全

Compose 层监听变量(决定宿主机端口映射):

变量默认值说明
PENTAGI_LISTEN_IP127.0.0.1宿主侧绑定 IP。实测默认只绑定本机回环,远程访问需改 0.0.0.0 并配合防火墙/反代
PENTAGI_LISTEN_PORT8443宿主侧端口;实测改 8150 后 docker compose ps 显示 127.0.0.1:8150->8443/tcp
PGVECTOR_LISTEN_IP / PGVECTOR_LISTEN_PORT127.0.0.1 / 5432数据库对外端口,无远程访问需求建议保持回环
SCRAPER_LISTEN_IP / SCRAPER_LISTEN_PORT127.0.0.1 / 9443scraper 对外端口
POSTGRES_EXPORTER_LISTEN_PORT空(compose 未设则不映射)指标端口

容器内服务器变量(SERVER_*,.env.example 显式置 SERVER_PORT=8443、SERVER_HOST=0.0.0.0、SERVER_USE_SSL=true):

变量结构默认值说明
SERVER_HOST / SERVER_PORT0.0.0.0 / 8080进程监听地址(注意与上面的 PENTAGI_LISTEN_* 是两层:一个在容器内,一个在宿主映射)
SERVER_USE_SSL / SERVER_SSL_CRT / SERVER_SSL_KEYfalse / 空 / 空服务端 TLS;compose 默认走容器内自签证书(PENTAGI_SSL_DIR 挂载目录)
TRUSTED_PROXIES空信任其 X-Forwarded-For 的反代地址/网段(逗号分隔)。反代后留空的后果:所有请求都被算作代理 IP,登录限速变成全体用户共享一个额度
STATIC_URL / STATIC_DIR空 / ./fe设 STATIC_URL 即进入反代模式(前端静态资源由外部 URL 提供),否则从本地目录伺服
CORS_ORIGINS*允许的跨域来源;.env.example 建议显式设为部署地址。配置了具体来源(非 *)时自动允许携带凭据
PUBLIC_URL空对外访问基地址,OAuth 回调由它拼出:${PUBLIC_URL}/api/v1/auth/login-callback。GitHub/Google 控制台里的回调地址必须与之一字不差
COOKIE_SIGNING_SALT空会话 Cookie 签名盐,必须改掉示例值;多实例部署时它还参与密钥派生
OAUTH_GOOGLE_CLIENT_ID/SECRET、OAUTH_GITHUB_CLIENT_ID/SECRET空对应 OAuth 两家的凭据,四项配齐且 PUBLIC_URL 可解析后自动启用

实测记录:PUBLIC_URL=https://127.0.0.1:8150、CORS_ORIGINS=https://127.0.0.1:8150、COOKIE_SIGNING_SALT 换为自定义随机串后,本机 HTTPS 登录、GraphQL 请求均正常。COOKIE_SIGNING_SALT 同时参与 Bearer JWT 密钥派生——改盐后所有旧会话与 API Token 全部失效,需重新登录。

5.7 数据库(pgvector)

变量默认值说明
PENTAGI_POSTGRES_USER / PENTAGI_POSTGRES_PASSWORD / PENTAGI_POSTGRES_DBpostgres / postgres / pentagidb栈内 pgvector 凭据;官方注释明确要求改掉默认密码
DATABASE_URL由上面三项拼出(compose 内部)完整 DSN,接外部 PostgreSQL(含 PgBouncer/Supabase)时直接设置
DATABASE_MAX_OPEN_CONNS / DATABASE_MAX_IDLE_CONNS25 / 5sqlc+GORM 共享连接池上限
DATABASE_VECTOR_MAX_CONNS10pgvector 向量检索专用连接池上限
DATABASE_EXTENSIONS_SCHEMApublic仅 TENANT_ID 非空时生效;Supabase 等把扩展装在 extensions schema 的库需设为 extensions

实测记录:PENTAGI_POSTGRES_PASSWORD 改为强密码后栈正常起库,26 张业务表自动迁移完成。密码注意强密码策略(见 7.3)。

5.8 Web Scraper

变量默认值说明
SCRAPER_PUBLIC_URL空生成给浏览器访问的地址(如截图回链)
SCRAPER_PRIVATE_URLhttps://someuser:somepass@scraper/后端内部访问 scraper 的地址(容器网络内服务名 + Basic Auth 凭据);Podman rootless 场景官方注释改为 http://scraper:3000/
LOCAL_SCRAPER_USERNAME / LOCAL_SCRAPER_PASSWORDsomeuser / somepassscraper 服务自己的 Basic Auth 凭据,生产应改掉
LOCAL_SCRAPER_MAX_CONCURRENT_SESSIONS10并发浏览会话上限

两个 URL 职责不同:后端→scraper 走 SCRAPER_PRIVATE_URL(容器网络名直连),最终返回给用户点击的链接用 SCRAPER_PUBLIC_URL(需浏览器可达)。公网部署时后者要配成对外域名。

5.9 网络代理与超时

变量默认值说明
PROXY_URL空后端所有出站 HTTP(LLM、embedding、搜索、更新检查,含本地端点)统一走此代理;沙箱容器、scraper、Graphiti 不走
EXTERNAL_SSL_CA_PATH空访问自签证书 LLM 端点时挂自定义 CA
EXTERNAL_SSL_INSECUREfalse跳过外部连接证书校验,官方明确仅限受控环境
HTTP_CLIENT_TIMEOUT600外部 API 调用超时(秒),0 为不限时(生产不建议)

实测提醒:PROXY_URL 的注释明确写了"local endpoints included"——设置后连容器网络内的本地端点也会被代理。本批次 mock 端点实测时保持 PROXY_URL 为空;生产环境若同时用代理和内网 LLM 网关,需确认代理对内网地址直连放行。

5.10 Agent 监督与执行上限

变量默认值说明
EXECUTION_MONITOR_ENABLEDfalse执行监视器(mentor 复审):同一工具连续调用或总调用达到阈值时唤醒 adviser 代理纠偏
EXECUTION_MONITOR_SAME_TOOL_LIMIT5同一工具连续调用阈值
EXECUTION_MONITOR_TOTAL_TOOL_LIMIT10距上次复审的总工具调用阈值
MAX_GENERAL_AGENT_TOOL_CALLS100通用代理(Assistant/Primary/Pentester/Coder/Installer)单链工具调用上限
MAX_LIMITED_AGENT_TOOL_CALLS20受限代理(Searcher/Enricher/Reporter 等)上限
AGENT_PLANNING_STEP_ENABLEDfalse专家代理开工前先由 planner 生成 3–7 步执行计划

5.11 Summarizer 与 Assistant(长对话压缩)

变量默认值说明
SUMMARIZER_PRESERVE_LASTtrue摘要时保留最后一条消息
SUMMARIZER_USE_QAtrue用问答对格式组织摘要
SUMMARIZER_LAST_SEC_BYTES / SUMMARIZER_MAX_BP_BYTES / SUMMARIZER_MAX_QA_SECTIONS / SUMMARIZER_MAX_QA_BYTES / SUMMARIZER_KEEP_QA_SECTIONS官方内置值摘要体积约束(近段字节数、背景段字节数、QA 段数/字节、保留段数)
ASSISTANT_USE_AGENTS空助手对话是否允许调用专职代理
ASSISTANT_SUMMARIZER_*同上助手通道独立的摘要参数

5.12 可观测集成入口

变量说明
LANGFUSE_BASE_URL / LANGFUSE_PROJECT_ID / LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY指向 Langfuse 实例;留空即关闭上报。Langfuse 栈本体由独立 compose 文件(docker-compose-langfuse.yml)另行部署
OTEL_HOSTOpenTelemetry Collector 地址,配合可选 observability 栈

六、生产配置模板

以下为无真实 OpenAI Key、用自定义 OpenAI 兼容网关(如 LiteLLM/自建推理网关)时的最小可用模板,实测基于本批次 v2.2.0 部署:

# --- 镜像(锁定版本,勿用 latest)---
PENTAGI_IMAGE=vxcontrol/pentagi:2.2.0

# --- LLM:自定义 OpenAI 兼容端点 ---
LLM_SERVER_URL=http://litellm:4000/v1
LLM_SERVER_KEY=sk-your-gateway-key
LLM_SERVER_MODEL=gpt-4o
LLM_SERVER_PROVIDER=custom
# custom 场景必须显式配置 embedding(回退目标是 OpenAI 官方,网关场景无效)
EMBEDDING_PROVIDER=openai
EMBEDDING_URL=http://litellm:4000/v1
EMBEDDING_KEY=sk-your-gateway-key
EMBEDDING_MODEL=text-embedding-3-small

# --- 搜索:全部免 Key 或关闭 ---
DUCKDUCKGO_ENABLED=true
SEARXNG_URL=http://searxng:8080        # 可选:自建元搜索

# --- 安全:三处必改 ---
PENTAGI_POSTGRES_PASSWORD=<强密码,见 7.3 策略>
COOKIE_SIGNING_SALT=<openssl rand -hex 24 生成>
LOCAL_SCRAPER_PASSWORD=<强密码>

# --- 地址 ---
PUBLIC_URL=https://pentagi.example.com
CORS_ORIGINS=https://pentagi.example.com
PENTAGI_LISTEN_IP=0.0.0.0               # 需要非本机访问时
TRUSTED_PROXIES=10.0.0.0/8              # 有反代时填代理网段

# --- 明确不启用的能力 ---
DOCKER_INSIDE=false                     # 无 DinD 需求保持关闭
PROXY_URL=                              # 出网可控环境留空

七、常见问题(含本批次实测排障)

7.1 改了 .env 不生效 / 容器监听在错误地址

实测根因:执行 docker compose up 的 shell 中残留全局环境变量 SERVER_HOST=127.0.0.1,按 3.1 的加载机制压过了 .env 的 SERVER_HOST=0.0.0.0,容器内进程只监听容器 loopback,宿主机 curl 返回 000。定位:docker compose config | grep SERVER_HOST 看渲染后的最终值;解决:清理 shell 变量或显式 SERVER_HOST=0.0.0.0 docker compose up -d,日志随后出现 listening on 0.0.0.0:8443。

7.2 custom LLM provider 启动报 embedder 错误

见 5.3 实测记录:LLM_SERVER_* 配好但 EMBEDDING_* 留空时,启动日志出现 embedder 初始化报错;将 EMBEDDING_URL/KEY/MODEL/PROVIDER 显式指向同一 OpenAI 兼容端点后消失。

7.3 数据库/登录密码被拒

PentAGI 有内置密码策略(源码 backend/pkg/password/policy.go):至少 16 字符,或至少 8 字符且同时含大写、小写、数字、特殊字符(限 !@#$&*)。实测 q1w2e3r4 被拒(InvalidPassword),q1W2e3R4! 通过。该策略作用于 Web 首次注册改密;数据库口令同样建议达标。

7.4 找不到 termi_db 参数

v2.2.0 的 .env.example 中不存在 termi_db 参数(全文 grep 实证,仅 TERMINAL_TOOL_TIMEOUT 含相近词根)。若在旧资料中见到该名称,对应能力在 v2.2.0 中由 PENTAGI_POSTGRES_* 三件套与 DATABASE_URL 承担。

7.5 部署后外网访问不了

两层检查:宿主映射层 PENTAGI_LISTEN_IP(默认 127.0.0.1,只允许本机访问)与容器内监听层 SERVER_HOST(应为 0.0.0.0)。docker compose ps 看映射列:显示 127.0.0.1:8443->8443/tcp 即宿主侧只绑了回环。远程开放时建议配反代 + TRUSTED_PROXIES,避免直接暴露 8443。

7.6 配置代理后内网 LLM 网关也走代理

PROXY_URL 按官方注释作用于所有后端出站调用且不排除内网地址(见 5.9)。若代理不放行内网网段,需要在代理侧配置直连规则,或评估改为在容器层配置 HTTP_PROXY/NO_PROXY(注意两者作用面不同,PROXY_URL 只影响 PentAGI 后端进程)。

八、参考链接