跳到主要内容

UnDercontrol · 自部署

配置参考

先用下面的生成器搭出一份可用配置,再到完整参考里查任何一项。每个配置项都有三种设置方式,优先级从高到低:CLI flag › 环境变量 › 内置默认值。工作目录下的 .env 文件会被自动加载。

事实来源:go-backend/internal/config/config.go——本页始终与它保持同步。

启动所需的最少配置

  • HOST_DOMAIN —— http://localhost:3000 或你的公网 URL
  • JWT_SECRET —— 任意随机字符串(默认值是公开已知的)
  • ADMIN_EMAIL —— 仅 Pro/Max 需要;Personal tier 不需要更多配置

配错时服务不会带病运行——会直接退出并打印 STARTUP FAILED 块,指明要修的变量。配对时日志末尾会显示 --> Open <url> to get started

生成你的配置

选择部署形态,右侧的命令、compose 文件和启动预览会实时更新。

版本

数据库

Pro/Max 功能

文件存储

Pro/Max 功能

AI 功能

HOST_DOMAIN

浏览器访问实例所用的 URL——下方的失败预览展示了它缺失或非法时的启动结果。

JWT_SECRET

已为你生成随机值——

docker run -d --name undercontrol \
  -p 3000:8080 \
  -e HOST_DOMAIN=http://localhost:3000 \
  -e JWT_SECRET=37ba2f642e6393ecbb1f91fe94df3d303a50f4bc49ab8619 \
  -v undercontrol-data:/app/data \
  lintao0o0/undercontrol:latest

启动预览——成功

docker logs undercontrol

启动预览——配置错误

HOST_DOMAIN missing

完整参考

点击变量名即可复制。

核心服务

必填

客户端访问本实例的外部基础 URL——协议 + 主机,无尾部斜杠(如 https://ud.example.com,或映射 -p 3000:8080 时的 http://localhost:3000)。用于生成文件上传/下载链接,必须是浏览器实际使用的地址。缺失或格式非法 → 服务拒绝启动。

默认Flag--host-domain

服务监听端口。在 all-in-one 镜像中这是容器内部端口——用 -p <host>:8080 映射。端口被占用时会快速失败并给出明确报错。

默认8080Flag--port

developmentproduction。production 会切换 HTTP 框架到 release 模式(减少请求日志)。all-in-one 镜像预置为 production

默认developmentFlag--environment

日志级别:debuginfowarnerror。日志为结构化 JSON;无论什么级别,人类可读的启动 banner 都会打印。

默认infoFlag--log-level

SQL 语句日志:silenterrorwarninfo(记录每条查询——仅调试用)。

默认silentFlag--sql-log-level

存放所有本地状态的目录:SQLite 数据库和本地存储的上传文件。Docker 中为 /app/data——在此挂载卷;备份该目录即备份整个实例。

默认./dataFlag--data-path

账号与认证

务必设置——默认值公开

用于签发登录 token 的密钥。默认值是公开已知的占位符——知道它的人可以伪造会话。任何非一次性的实例都必须设置一个足够长的随机值。

默认your-secret-keyFlag--jwt-secret

访问 token 的有效期(分钟)。会话会自动刷新,实际影响是被盗 token 的存活时长。

默认60Flag--jwt-expiration-minutes
必填Pro / Max

初始管理员账号的登录用户名,首次启动时创建。Pro/Max 缺少它会拒绝启动——Personal tier 忽略此项。

默认Flag--admin-email
Pro / Max

初始管理员密码,仅在管理员账号首次创建时生效。首次登录后请修改(默认密码在用时启动 banner 会提醒)。

默认admin123Flag--admin-password
Personal首次启动前设置

唯一用户 personal@undercontrol.local 的密码(登录名本身不可修改)。Start 自动登录始终读取该变量,但存储的密码只在首次启动时写入——只改一边会导致自动登录失效。请在首次启动前设置,或保持两边一致。

默认personal123Flag--personal-tier-password
Pro / Max

一次性迁移开关。用 Personal tier 创建的数据库启动 Pro/Max 服务会被安全检查拒绝;设为 true(配合 ADMIN_EMAIL / ADMIN_PASSWORD)可把全部数据转移到新管理员账号并移除 personal 用户。

默认falseFlag--migrate-from-personal

许可证Personal tier 不需要以下任何配置

Pro / Max

解锁 Pro/Max 功能(多用户、PostgreSQL、S3、管理后台)的许可证 token。也可从 UNDERCONTROL_LICENSE、工作目录的 license.txt/etc/undercontrol/license.txt 读取——先命中者生效。

默认Flag--license-token
Pro / Max

与许可证 token 配套签发的 host secret。

默认Flag--license-host-secret

用于签发许可证。自部署实例请留空。

默认Flag--license-private-key

数据库默认 SQLite——PostgreSQL 为 Pro/Max 功能

sqlitepostgres。SQLite 位于 UD_DATA_PATH 内,对大多数个人/家庭实例已经足够;PostgreSQL 需要 Pro/Max 许可证。

默认sqliteFlag--database-type

完整的 PostgreSQL 连接串。设置后会覆盖下面所有单项 POSTGRES_* 变量。

默认Flag--database-url
/ PORT / USER / PASSWORD / DATABASE / SSL_MODE

不想用一条 URL 时的单项连接参数:POSTGRES_HOSTlocalhost)、POSTGRES_PORT5432)、POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_DATABASEundercontrol)、POSTGRES_SSL_MODEdisable)。

Flag--postgres-host, --postgres-port, …
/ MAX_IDLE_CONNS / CONN_MAX_LIFETIME / CONN_MAX_IDLE_TIME

连接池调优,默认值适合小型实例:最大连接 25、最大空闲 5、连接存活 300 秒、空闲超时 60 秒。

Flag--postgres-max-open-conns, …

文件与存储默认本地磁盘——S3 为 Pro/Max 功能

上传大小上限(字节)。

默认10485760 (10 MB)Flag--max-file-size
Pro / Max

把上传文件存到 S3 兼容对象存储(AWS S3、Cloudflare R2、MinIO),替代本地数据目录。启动 banner 会显示当前生效的存储模式。

默认falseFlag--s3-enabled
/ REGION / BUCKET / ACCESS_KEY_ID / SECRET_ACCESS_KEY / FORCE_PATH_STYLE

S3_ENABLED=true 后均为必填:endpoint URL、region(R2 可用 auto)、bucket、凭据。S3_FORCE_PATH_STYLE(默认 true)适合 MinIO 及多数非 AWS 提供商。

Flag--s3-endpoint, --s3-bucket, …

AI 与视觉全部可选——不配 key 时 AI 功能保持关闭

启用 AI 功能(图片转任务、票据识别、聊天)的 API key。兼容任何 OpenAI 风格的 endpoint——配合 OPENAI_BASE_URL 可接 Azure、GitHub Models 或本地模型服务。

默认Flag--openai-api-key
/ BASE_URL / MAX_TOKENS / TEMPERATURE / ORG_ID

模型与 endpoint 调优:模型名(gpt-3.5-turbo)、base URL(https://api.openai.com/v1)、响应上限(1000 tokens)、temperature(0.7)、可选 organization ID。

Flag--openai-model, --openai-base-url, …
/ AI_STARTUP_FRONTEND_ACTIVE

上面配置的系统级 AI 服务是否在后端默认激活 / 是否提供给前端。用户仍可在应用内使用自己的 AI 服务。

默认false / falseFlag--ai-startup-backend-active, …
/ AZURE_VISION_URL

使用 Azure 而非 OpenAI 兼容视觉模型做图像分析时的 Azure 凭据。

默认Flag--azure-vision-key, --azure-vision-url
/ OCR_AUTHORIZATION / OCR_TIMEOUT

票据/文档文字提取的外部 OCR 服务:endpoint(http://127.0.0.1:8000/ocr)、认证 token、超时秒数(30)。

Flag--ocr-endpoint, …

网络与前端

允许从浏览器调用 API 的来源列表(逗号分隔)。仅当前端与后端不同源时需要——all-in-one 镜像前后端同源,默认值即可。

默认http://localhost:3000,http://localhost:12000,http://localhost:8080Flag--cors-allowed-origins

在浏览器之外(如桌面应用)生成分享链接时的指向。all-in-one 部署请设为与 HOST_DOMAIN 相同的公网 URL。

默认http://localhost:12000Flag--frontend-url

服务端通知(如备份结果)的 Slack incoming-webhook。

默认Flag--slack-webhook-url

后台任务

定时任务总开关(清理、备份、计划任务处理)。除非另跑独立 worker 实例,否则保持开启。

默认trueFlag--cron-enabled
/ VISITOR_RETENTION_DAYS / VISITOR_CLEANUP_SCHEDULE

过期访客(演示)账号及其数据的自动清理:默认开启,保留 3 天,每天零点运行(0 0 * * *,cron 语法)。

Flag--visitor-cleanup-enabled, …

可观测性面向需要外送日志/追踪的运维者

通过 OpenTelemetry(OTLP)导出 trace、指标和日志。默认关闭;日志始终会输出到 stdout。

默认falseFlag--otel-enabled
/ _HEADERS / TRACES / METRICS / LOGS / SERVICE_NAME

标准 OTLP 导出配置:共享 endpoint(OTEL_EXPORTER_OTLP_ENDPOINT)、认证头(OTEL_EXPORTER_OTLP_HEADERS)、按信号覆盖(OTEL_TRACES_ENDPOINT / OTEL_METRICS_ENDPOINT / OTEL_LOGS_ENDPOINT),以及上报的服务名(OTEL_SERVICE_NAME)。

Flag--otel-endpoint, …

进阶一般用不到

/ EVENT_BUS_QUEUE_SIZE

内部事件总线规模:后台 worker 数(4)与队列容量(1000)。只有异常繁忙的实例才值得调整。

Flag--event-bus-workers, --event-bus-queue-size

由 Onboarding Experience Owner 维护。config.go 中任何变量的新增、改名或默认值变化,都会在同一任务里同步到本页——发现不一致请当作 bug 反馈。另见自部署指南