# MateClaw 环境变量配置 # 复制此文件为 .env 并填写实际值:cp .env.example .env # # LLM API Key(DashScope、OpenAI 等)无需在此配置,启动后在管理界面「模型管理」中添加。 # # ⚠️ 所有标注「必填」的项若没配置,`docker compose up` 会直接失败退出,避免把默认/示例值带到生产环境。 # ==================== 数据库(Docker 模式必填) ==================== # # ⚠️ Docker 栈已切换到 PostgreSQL 16(此前为 MySQL)。老部署升级前请先读 # docker-compose.yml 顶部的迁移说明:旧 mysql_data 卷不会被读取,需要先 # mysqldump 再用 pgloader 等工具导入,或钉在切换前的 tag 上继续用 MySQL。 DB_HOST=localhost DB_PORT=5432 DB_NAME=mateclaw # 应用连接账号(最小权限角色,由 docker/postgres/init/10-app-role.sh 首次 # 初始化时自动创建,仅拥有 mateclaw schema,不是超级用户)。 DB_USERNAME=mateclaw # ⚠️ 必填且请改成强密码(至少 16 位,含大小写+数字+符号)。 # docker-compose.yml 会通过 ${DB_PASSWORD:?} 强制要求此项。 DB_PASSWORD=change-me-strong-user-password # ⚠️ PostgreSQL 引导超级账号,仅用于容器内初始化和运维。 # 请改成与 DB_PASSWORD 不同的强密码。 DB_ADMIN_USERNAME=mateclaw_admin DB_ADMIN_PASSWORD=change-me-strong-admin-password # ==================== 搜索(可选) ==================== # WebSearch 工具的云端搜索 API(可选,二选一或都不配;不配可用 SearXNG sidecar)。 SERPER_API_KEY= TAVILY_API_KEY= # ==================== 安全(强烈建议覆盖) ==================== # JWT 签名密钥。若留空,服务器会用内置默认值并在启动日志里 WARN。 # 生产部署必须设置,至少 32 位随机字符串:openssl rand -base64 48 JWT_SECRET= # CORS 白名单(逗号分隔,如 https://mateclaw.example.com,https://admin.example.com)。 # 若留空,服务器会允许所有 origin 并在启动日志里 WARN。生产部署务必设置。 MATECLAW_CORS_ALLOWED_ORIGINS= # 公开访问基址(如 https://mateclaw.example.com)。用于把智能体生成文件的下载 # 链接拼成绝对地址,便于在 Web 之外(IM 消息、复制链接、外部下载)直接打开。 # 留空时回退到当前请求的 host,再退回相对路径。反代后部署建议显式设置。 MATECLAW_PUBLIC_BASE_URL= # 是否公开 Swagger UI / OpenAPI 文档(/swagger-ui.html、/v3/api-docs)。 # 生产数据库 profile(mysql/kingbase/postgres)默认 false —— 匿名无法浏览全部 # 端点结构,需全局管理员(ROLE_ADMIN)。仅在内网/预发临时调试时设为 true。 MATECLAW_OPENAPI_EXPOSE_UI= # SearXNG 会话密钥(容器内部用,留空会用开发默认值)。生产部署请设成 32+ 位随机串。 # openssl rand -hex 32 SEARXNG_SECRET= # ==================== 浏览器工具(可选) ==================== # # Docker 镜像已经把 Chromium 打进去了,默认零配置可用。 # 只有在下述场景才需要 override: # # 1) 把浏览器独立部署成 sidecar 容器,通过 CDP 连接: # MATECLAW_BROWSER_CDP_URL=http://chrome-sidecar:9222 # # 2) 指定非 Playwright 打包的浏览器(例如宿主机上已装的 Chrome): # MATECLAW_BROWSER_CHROME_PATH=/usr/bin/google-chrome-stable # # 3) 强制使用 Playwright channel(chrome / msedge / chrome-beta …): # MATECLAW_BROWSER_CHANNEL=chrome MATECLAW_BROWSER_CDP_URL= MATECLAW_BROWSER_CHROME_PATH= MATECLAW_BROWSER_CHANNEL= # ==================== 局域网 部署放开(可选,默认 false 严格模式) ==================== # 浏览器 SSRF 防护:放行本地回环和私有 IP(127.0.0.1 / 10.x / 192.168.x / # 172.16-31.x / IPv6 fc00::/7 等),公网部署务必保持 false,否则 SSRF 防护失效 PLAYWRIGHT_ALLOW_PRIVATE_NETWORK=false # 浏览器忽略 HTTPS 证书错误(自签证书 / IP 直连 HTTPS 场景) # 公网部署务必保持 false,否则中间人攻击可绕过证书校验 PLAYWRIGHT_IGNORE_HTTPS_ERRORS=false # Playwright 单次操作超时(秒),慢链路 / 大页面可调高 PLAYWRIGHT_DEFAULT_TIMEOUT_SECONDS=30 # Playwright 导航超时(秒),慢网络可调高 PLAYWRIGHT_NAVIGATION_TIMEOUT_SECONDS=30 # snapshot 文本截断长度,超出会返回 truncated:true 提示 LLM 用 selector 缩小范围 PLAYWRIGHT_SNAPSHOT_MAX_LENGTH=20000 # ==================== OpenAI OAuth(Docker,可选) ==================== # # OpenAI ChatGPT OAuth 使用 Codex CLI 的 public client + PKCE / device code, # 不需要自定义 client secret。 # # 默认留空即可。后端会根据访问 Host 自动选择: # - localhost / 127.0.0.1 / ::1 → LOCAL(PKCE 回调) # - IP / 域名 / 反向代理访问 → DEVICE_CODE(无缝远程授权) # # 本机 Docker 若希望像桌面版一样直接通过宿主机浏览器完成 # http://localhost:1455/auth/callback 回调,可显式开启 LOCAL,并让容器内 # 临时回调服务监听 0.0.0.0,以便通过 `1455:1455` 端口映射被宿主机访问到: # MATECLAW_OAUTH_OPENAI_DEPLOYMENT_MODE=local # MATECLAW_OAUTH_OPENAI_CALLBACK_BIND_HOST=0.0.0.0 # # 强制模式调试时也可设为:local / device_code / manual_paste MATECLAW_OAUTH_OPENAI_DEPLOYMENT_MODE= MATECLAW_OAUTH_OPENAI_CALLBACK_BIND_HOST= # ==================== Wiki 知识库目录白名单(Docker 模式,可选)==================== # # Docker 生产部署开启了路径安全校验(fail-closed)。 # 知识库使用「目录扫描」功能时,扫描路径必须在此白名单内,否则返回 400 错误。 # 多个路径用英文逗号分隔;留空则禁止所有目录扫描。 # # 示例:MATE_WIKI_ALLOWED_SOURCE_ROOTS=/data/wiki,/opt/docs # # 同时在 docker-compose.yml 的 volumes 里把宿主机目录挂进容器,例如: # volumes: # - /your/host/path:/data/wiki MATE_WIKI_ALLOWED_SOURCE_ROOTS= # ── Wiki 知识源自动同步(变更监测)总开关 ──────────────────────── # 定时扫描各知识库的源目录、自动消化新文件。默认关闭,运维主动开启。 # AND 语义:全局这个开关开 *且* 某知识库自己的「自动同步」开关也开, # 该库才会被定时扫描;手动「立即扫描」不受此开关影响。 # 间隔单位毫秒,默认 5 分钟(目前为全局,暂不支持按库配置)。 MATE_WIKI_WATCHER_ENABLED=false MATE_WIKI_WATCHER_INTERVAL_MS=300000 # ── Skill 工作区目录 ───────────────────────────────────────────── # 已安装的 skill、运行时积累的 LESSONS.md、skill 运行产物都落在这个目录。 # 默认(容器内)已指向 /app/data/skills,由 docker-compose 的 server_data 卷 # 持久化,容器重启不丢,无需额外挂卷。一般无需修改。 # 内置 skill 由 JAR classpath 每次启动现场释放,挂空卷也不会丢内置文件。 # 仅当你想把 skill 目录放到别处(如独立的 bind mount)时才覆盖此项, # 并记得在 docker-compose.yml 的 volumes 里把对应宿主机目录挂进容器。 MATECLAW_SKILL_WORKSPACE_ROOT= # ── Skill ZIP 上传大小上限(MB,可选)──────────────────────────── # 技能包上传/市场安装的应用层上限,默认单文件 1MB、整包 50MB。 # 解包时整包缓存在内存里,整包上限调多大,单次安装峰值内存就可能吃多大。 # 同时注意 Spring 层 spring.servlet.multipart 的上限(默认 100MB/200MB)。 MATECLAW_SKILL_UPLOAD_MAX_ENTRY_SIZE_MB= MATECLAW_SKILL_UPLOAD_MAX_TOTAL_SIZE_MB= # ── Python pip 镜像源(可选)────────────────────────────────────── # skill 里 Python 脚本缺包时 pip install 走的源。默认用 PyPI 官方源。 # pip 原生读 PIP_INDEX_URL / PIP_TRUSTED_HOST 环境变量,容器内自动继承。 # HTTP 源会自动从 URL 推导 PIP_TRUSTED_HOST;自签 HTTPS 需手动填。 # 互联网加速: https://pypi.tuna.tsinghua.edu.cn/simple # 局域网私有源: http://192.168.1.100:8080/simple(trusted-host 自动推导) #PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple #PIP_TRUSTED_HOST= # ── 桌面版补充(非 Docker,宿主机直接跑 Java)───────────────────── # 桌面版不继承上面的 Docker 变量。用 Spring 配置注入 Python 子进程; # 也可直接设系统环境变量 PIP_INDEX_URL / PIP_TRUSTED_HOST(覆盖更全)。 #MATECLAW_PIP_INDEX_URL= #MATECLAW_PIP_TRUSTED_HOST= # ── Maven 镜像(国内加速)───────────────────────────────────────── # 在中国大陆构建时取消注释,将 Aliyun 仓库优先级提前,大幅提速 mvn 拉包。 # 空值(默认)使用 US Maven Central → Google CDN → Aliyun 的顺序。 #MAVEN_FLAGS=-Paliyun-first