Help us shape the future of Go! Take the 2026 Go Developer Survey

subandnew-api

command module
v1.3.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: AGPL-3.0 Imports: 37 Imported by: 0

README

SubAndNew API Control Plane

SubAndNew API Logo

统一纳管多个 New API、HUICHUAN-AI 与 Sub2API 实例

本仓库由 HUICHUAN-AI 二次开发而来,现已收缩为独立的多实例控制平面。业务请求仍由各个数据平面实例处理;本项目负责实例纳管、健康巡检、能力识别、受控运维、权限和审计。

详细设计与执行状态见 多实例统一管理二开方案。

邮箱批量导入、独立操作员和截图审核的使用及私有存储配置见 邮箱管理部署说明。

当前能力

  • 纳管多个 New API、HUICHUAN-AI、Sub2API 和通用 HTTP 健康端点。
  • 保存实例名称、类型、环境、标签、管理模式和巡检策略。
  • 使用 AES-256-GCM 加密远端管理凭据,接口和审计日志不返回明文。
  • 通过 SSRF 防护 Connector 限制私网、回环、重定向和 DNS 重绑定风险。
  • 定时巡检实例健康、版本、延迟、能力和资源摘要。
  • 支持 observe、operate、enforce 管理模式。
  • 支持操作预览后执行、幂等键、实例级任务锁和审计记录。
  • 首批受控动作:刷新资源、测试资源、启用或停用资源。
  • 支持版本化配置模板、实例绑定、漂移检测、差异预览、定向应用、应用后校验和失败补偿。
  • New API/HUICHUAN-AI 配置采用逐项写入;Sub2API 采用白名单部分对象写入,远端完整配置不落库。
  • Root/管理员按细粒度 RBAC 权限访问实例中心。
  • React 管理端提供实例列表、筛选、新增、编辑、凭据轮换和实例详情。

已移除模块

控制平面不再承载本地 AI 网关和商业化门户。当前二开已删除或关闭:

  • Classic 前端、Electron 客户端和 Capture Proxy。
  • Dataset Capture、NERV、排行榜、公开定价页和 Playground。
  • 本地渠道、转发、视频等运行时路由及其后台 worker。
  • Token、钱包、充值、订阅、兑换码、倍率、计费和使用日志等前后端实现。
  • LOG_DB、ClickHouse、本地用量数据库和请求体磁盘缓存。
  • 普通用户注册、账号绑定、删除账号及 API Access Token 鉴权。

控制平面账号只用于身份与权限管理,API 管理接口只接受登录会话,不兼容旧 User.AccessToken。旧数据库中的商业化表、列和配置不会在升级时自动删除或重新解释。

升级旧数据库时不会自动删除历史业务表。历史数据必须由管理员在备份后显式归档或清理。

旧数据归档与清理

维护命令不会启动 Web 服务,也不会执行自动迁移:

# 查看旧表、旧 users 列及数据库指纹
subandnew-api legacy-data inventory --output legacy-inventory.json

# 流式归档并生成列结构、逐表内容哈希与 SHA-256 校验文件
subandnew-api legacy-data archive --output legacy-archive.json

# 默认只预演;输出中会给出 execute 所需的数据库指纹
subandnew-api legacy-data purge --archive legacy-archive.json

# 校验归档完整性后显式清理
subandnew-api legacy-data purge --archive legacy-archive.json \
  --execute --confirm <database-fingerprint>

purge 会重新计算逐表和旧用户列内容哈希,数据在归档后发生任何变化都会拒绝清理。工具仅识别代码中明确列出的 HUICHUAN 历史表;插件表或其他未知表会单独报告并阻断归档与清理,不会因为“不属于控制平面”而被推断为可删除。管理员、权限、审计、任务和实例管理数据不会进入清理范围。

破坏性 purge --execute 当前仅支持 SQLite。MySQL/PostgreSQL 可执行清单和归档,但必须由 DBA 根据归档列结构审核并执行迁移,工具不会在这两类数据库上尝试跨方言 DDL。

从旧 HUICHUAN-AI 二进制迁移时需先手工部署一次 SubAndNew API;在线升级器仅识别 subandnew-api-* 资产和 .subandnew-update 状态目录,不保留旧产品名的 helper/资产兼容分支。完成首次部署后,后续版本可使用内置在线升级。

快速开始

1. 克隆
git clone https://github.com/01121531/subandnew-api.git
cd subandnew-api
2. 配置密钥

生成 32 字节随机值并编码为标准 Base64:

openssl rand -base64 32

至少配置:

SESSION_SECRET=replace-with-a-random-session-secret
MANAGED_INSTANCE_SECRET_KEY=replace-with-the-base64-value
MANAGED_INSTANCE_SECRET_KEY_VERSION=v1
ASSISTANT_SECRET_KEY=replace-with-a-separate-base64-value
ASSISTANT_SECRET_CURRENT_KEY_VERSION=v1
MANAGED_USAGE_EXPORT_DIR=./exports/usage-records

未配置 MANAGED_INSTANCE_SECRET_KEY 时,可以浏览不含密钥的实例信息,但系统会拒绝写入远端凭据。

3. 本地开发
docker compose -f docker-compose.dev.yml up -d --build
cd web/default
bun install
bun run dev

首次打开后按安装向导创建 Root 用户,然后进入 /instances。

生产镜像发布到 ghcr.io/01121531/subandnew-api:latest。

4. 源码构建
cd web/default
bun install
bun run build
cd ../..
go build ./...

关键环境变量

变量 说明
PORT 后端监听端口,默认 3000
SQL_DSN PostgreSQL/MySQL 连接字符串;未设置时使用 SQLite
SQLITE_PATH SQLite 文件路径
REDIS_CONN_STRING 可选 Redis 连接
MAILBOX_TEMP_CVV_MODE 临时 CVV 模式:redis 使用专用易失 Redis,single_node 使用兼容的进程内存,disabled 关闭
MAILBOX_TEMP_CVV_REDIS_CONN_STRING 临时 CVV 专用 Redis;必须关闭 RDB (save "") 和 AOF (appendonly no),应用会在启用前校验
SESSION_SECRET 登录会话签名密钥
TRUSTED_PROXIES 可选反向代理 IP/CIDR 白名单;未设置时默认信任本机代理和 Cloudflare 官方网段,设置后完全覆盖默认值
MANAGED_INSTANCE_SECRET_KEY 32 字节标准 Base64 主密钥
MANAGED_INSTANCE_SECRET_KEY_VERSION 当前凭据密钥版本
MAILBOX_ATTACHMENT_DIR 邮箱截图私有持久化目录,默认 ./data/mailbox-attachments;多节点须共享,禁止公开静态访问
MANAGED_INSTANCE_PROBE_MAX_CONCURRENCY 巡检全局并发上限,默认 8
MANAGED_INSTANCE_OPERATION_MAX_CONCURRENCY 受控操作全局并发上限,默认 4
MANAGED_INSTANCE_OPERATION_MAX_PER_HOST 同一远端主机的操作并发上限,默认 2
MANAGED_INSTANCE_BATCH_MAX_CONCURRENCY 同一批次的操作并发上限,默认 2
MANAGED_INSTANCE_ALLOWED_CIDRS 允许实例和 AI 模型连接访问的额外 CIDR;默认阻断私网、回环与特殊用途网络
MANAGED_INSTANCE_ALLOWED_HOSTS 可选目标主机白名单,支持 *.example.com;启用微信时需包含 ilinkai.weixin.qq.com 和实际使用的官方 *.weixin.qq.com 区域主机
MANAGED_INSTANCE_ALLOWED_PORTS 可选目标端口白名单,例如 443,8443
MANAGED_USAGE_EXPORT_DIR 使用记录后台导出的持久化目录,默认 ./exports/usage-records;Docker 建议设为 /data/exports/usage-records
ASSISTANT_SECRET_KEY AI 助手独立的 32 字节标准 Base64 密钥,用于模型密钥、微信凭据和对话内容加密;未设置时从 MANAGED_INSTANCE_SECRET_KEY 做用途隔离派生
ASSISTANT_SECRET_KEYS 可选版本化密钥环,JSON 格式;轮换期间保留旧版本以便解密历史数据
ASSISTANT_SECRET_CURRENT_KEY_VERSION AI 助手当前写入密钥版本,默认 v1
ASSISTANT_WORKER_ENABLED 是否在 master 节点启动微信长轮询与消息 worker,默认 true

实例连接和 AI 模型端点默认拒绝私网、回环及特殊用途 IP,并在每次连接前重新校验 DNS 结果;仅允许最多 5 次同源重定向。确需访问内网实例或本地模型时,必须通过上述 CIDR、主机和端口白名单显式放行。

微信 AI 助手

Root 用户可从侧栏进入 /assistant:先配置一个启用的 OpenAI-compatible 主模型,再扫码连接具备 iLink/OpenBot 准入的微信账号。用户在该页面生成 5 分钟、单次使用的绑定码,并在微信中发送 /绑定 XXXX-XXXX 完成身份绑定。

首版助手提供只读查询:实例清单与健康状态、Dashboard 汇总和实时指标。工具调用会在执行前重新校验当前用户状态、角色、细粒度权限和实例范围;微信凭据、模型密钥、context token、收发消息及短期对话记忆均加密存储。默认保留最近 12 条对话消息,发送 /清空上下文 可立即删除。

生产部署建议使用 PostgreSQL。只有 master 节点运行 assistant worker,每个微信账号另有数据库租约;inbox/outbox 均持久化并带幂等键。推荐配置独立的 ASSISTANT_SECRET_KEY(S);未配置时会从 MANAGED_INSTANCE_SECRET_KEY 做用途隔离派生。两者均未配置时,涉及秘密的管理操作会被拒绝且 worker 不启动。

权限

权限 用途
managed_instance.view 查看实例和脱敏状态
managed_instance.create 新增实例和写入凭据
managed_instance.update 修改连接、策略和标签
managed_instance.delete 删除纳管关系
managed_instance.operate 执行单实例远端操作
managed_instance.batch_operate 执行批量操作
managed_instance.secret_rotate 轮换或撤销凭据
managed_instance.audit 查看详细审计信息
managed_template.view 查看配置模板、绑定、漂移和差异
managed_template.apply 管理模板、绑定并执行配置应用,仅 Root 默认拥有
assistant.access 允许用户生成绑定码并通过微信使用只读助手
assistant.manage 管理模型、微信通道与绑定,默认仅 Root 拥有
assistant.audit 查看助手运行与工具审计,管理员默认拥有

验证

go test ./... -count=1
go vet ./...
cd web/default
bun run typecheck
bun run build

实施状态

  • 已完成:实例模型、凭据加密、RBAC、适配器、SSRF 防护、巡检、实例中心、详情页、单实例及批量受控操作。
  • 已完成:配置模板与版本化 Schema、漂移检测、差异预览、两阶段配置应用、应用后验证和失败补偿。
  • 已完成:旧业务数据清单、流式归档、校验、预演和双确认显式清理工具。
  • 已完成:本地 Relay、Channel、代理池、Token、计费、订阅、注册、旧通知/状态集成及商业化配置的代码删除;新安装只创建控制平面表。
  • 可选后续:Phase 4 联邦路由。该能力不属于当前控制平面默认范围。

上游与许可

项目保留原 HUICHUAN-AI 的 AGPL-3.0 许可和版权声明。衍生项目的修改、部署和分发应继续遵守 LICENSE 与 NOTICE。

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL