平台

自托管

同一个镜像既可以在您的主机上运行,也可以在我们的主机上运行。本页是运维者视角:要设置什么,前面放什么,以及如何在没有任何数据离开大楼的情况下保持运行。

布局

  • 一个 Python 进程在单个事件循环中运行聊天监听器、调度器和带仪表板的 API。
  • 容器只监听回环接口;反向代理(Nginx 或 Caddy)终结 TLS 并转发给它。
  • 状态存放在一个数据目录中:SQLite 数据库、上传文件、GeoIP 数据、生成的密钥和模型权重。多主机部署请将 DATABASE_URL 指向 Postgres;只增不改的迁移集在两者上都能运行。
  • 聊天服务器(Synapse 或其他 Matrix 主服务器)可以在任何可达的位置。

环境

MATRIX_HOMESERVER, MATRIX_USER_ID, MATRIX_ACCESS_TOKEN机器人账户
MATRIX_STANDUP_ROOM_ID默认日报房间
MATRIX_ADMIN_TOKEN用于配置和查询的主服务器管理令牌;仅在环境中,绝不持久化
SECRET_KEY一个 64 字符以上的随机字符串,用于签署仪表板会话
DATABASE_URL默认为 sqlite,或一个 Postgres URL
BOOTSTRAP_ADMIN_MATRIX_ID第一位管理员,启动时提升权限
AI_PROVIDER 及提供商密钥参见“AI 提供商”
INTEGRATION_VAULT_KEY加密已存储集成凭据的密钥
TZ, MAX_BODY_BYTES, AI_REASONING_MODEL可选

反向代理

  • 转发 X-Forwarded-For 和 X-Forwarded-Proto;缺少后者时,产品无法区分 HTTP 和 HTTPS,会跳过 HSTS 头。
  • 为代理的响应启用压缩和 HTTP/2;仪表板冷加载时会拉取数十个资源。
  • 绝不压缩或缓冲事件流端点;实时更新是服务器推送事件。
  • 按 IP 限速是代理的职责;产品自己限制验证码请求和登录。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
gzip_proxied any;
http2 on;

安全头与限制

每个响应都携带 nosniff、禁止嵌入框架、无来源引用策略、限制性权限策略、TLS 上的两年 HSTS 和内容安全策略。请求体默认上限 5 MiB。每个输入在处理器运行前都按模式校验;聊天 ID 在任何主服务器调用前都经正则检查;出站 HTTP 固定为主服务器和配置的提供商主机。

运维

  • 升级:拉取、重建、重启。迁移在启动时运行并跳过已存在的部分。
  • 每晚备份数据目录;Postgres 使用 pg_dump。
  • 健康:一个快速的无需认证的存活端点用于容器检查,一个仅限管理员的详细端点提供运行时长、数据库大小和提供商状态。
  • GeoIP:每周运行刷新脚本(无需密钥的 db-ip Lite,或使用免费密钥的 MaxMind);数据卷中的副本在重启时自动加载,无需配置。
  • 调度器支撑整个工作日:每五分钟采样在岗状态,每十五分钟检查缺勤,每晚汇总和物化评分,摘要和报告按各自节奏运行。
docker compose up -d --build
docker exec inroots sqlite3 /app/data/standup.db ".backup /tmp/backup.db"
GEO_DATA_DIR=/app/data/geo scripts/update_geoip.sh

物理隔离

使用自托管的 Matrix 服务器、以 Ollama 作为提供商、主机上的本地 IP 数据库、关闭语音回复且不启用任何集成,产品完全不需要互联网。没有遥测,没有使用信标,没有向外呼叫的崩溃报告;除非您配置了目标,否则零字节外流。