Extract memind_adm admin server, add local dev tooling, and remove image-generation.

Split platform admin and ops APIs into standalone admin-server.mjs with network guards; simplify billing to RMB token pricing, refactor user auth, and add rsync deploy plus local-test scripts and docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name
2026-06-17 16:39:39 -07:00
parent ab0718938e
commit b0f5d6a51c
98 changed files with 5394 additions and 3010 deletions
+34 -45
View File
@@ -1,23 +1,32 @@
# TKMind H5 环境变量(复制为 .env 后按需修改)
#
# 本地开发(默认只做本地,不自动发布生产):
# 1. pnpm dev # 热更新 (http://127.0.0.1:5173)
# 2. pnpm run test:local # 生产构建本地跑 (http://127.0.0.1:8081)
# 3. pnpm run test:fruit-john-e2e # john 水果主题:预览图 + 可点击链接 + 我的空间
# 4. node scripts/mindspace-rebuild-thumbnails.mjs # 批量重建预览图(可选)
#
# 发布生产:仅当明确要求「发布生产」时再执行:
# pnpm run deploy:105 或 pnpm run deploy:prod 或 ./rsync_to_server.sh
# 105 配置见 deploy/h5-105.env.example
# 本地开发(127.0.0.1 + 端口,见 docs/local-dev.md
# pnpm dev
# MindSpace: http://127.0.0.1:5173/?preview=mindspace
#
# 后端代理(server.mjs / vite dev proxy 共用)
TKMIND_API_TARGET=https://127.0.0.1:18006
TKMIND_SERVER__SECRET_KEY=local-dev-secret
H5_PORT=8081
# Agent 生成链接用(本地开发建议 8081;生产再改为 https://goo.tkmind.cn
H5_PUBLIC_BASE_URL=http://127.0.0.1:8081
# MindSpace 与 Plaza 跨子域共享登录(如 g2.tkmind.cn + plaza.tkmind.cn
# H5_COOKIE_DOMAIN=.tkmind.cn
H5_PUBLIC_BASE_URL=http://127.0.0.1:5173
# ===== memind_adm(独立后台服务)=====
# 平台超管 /admin-api/* 与广场运营 /api/ops/v1/* 已从公网服务拆出,独立进程运行。
# 登录仍在主域完成;后台凭 H5_COOKIE_DOMAIN=.tkmind.cn 共享的会话 Cookie 鉴权(生产务必设置)。
ADMIN_PORT=8082
ADMIN_HOST=127.0.0.1
ADMIN_PUBLIC_HOST=gadm.tkmind.cn
# 本进程挂载哪些控制台(可拆分架构):admin=平台超管, ops=广场运营。
# 默认两者合一;将来拆成两个进程时,A 实例设 admin、B 实例设 ops,路由代码无需改动。
# ADMIN_CONSOLES=admin,ops
# 每控制台独立网络护栏(逗号分隔;留空=放开。支持精确 IP 与 CIDR)。
# 超管面建议收得最紧(仅内网/VPN),广场运营可放宽给审核团队网段。
# ADMIN_API_ALLOWED_HOSTS=gadm.tkmind.cn
# ADMIN_API_IP_ALLOWLIST=10.0.0.0/8,127.0.0.1
# OPS_API_ALLOWED_HOSTS=gadm.tkmind.cn
# OPS_API_IP_ALLOWLIST=
# 多用户系统(MySQL 配置后启用;未配置时回退到 H5_ACCESS_PASSWORD
DATABASE_URL=mysql://boot:password@localhost:3306/tkmind
@@ -32,37 +41,36 @@ H5_ADMIN_PASSWORD=change-me-admin
# LLM Key 数据库加密(可选;默认派生自 TKMIND_SERVER__SECRET_KEY
# H5_SETTINGS_ENCRYPTION_KEY=change-me-encryption-key
# 启动时自动导入 Relay(若不存在同名配置)
# H5_RELAY_BOOTSTRAP_NAME=Relay Buyer Ollama
# H5_RELAY_BOOTSTRAP_NAME=Local Goose Relay DeepSeek
# H5_RELAY_BOOTSTRAP_URL=http://127.0.0.1:18300/relay/buyer/v1/chat/completions
# H5_RELAY_BOOTSTRAP_API_KEY=your-bearer-token
# H5_RELAY_BOOTSTRAP_MODEL=qwen2.5:3b
# H5_RELAY_BOOTSTRAP_MODELS=qwen2.5:3b,llama3.2:1b
# H5_RELAY_BOOTSTRAP_PROVIDER=ollama
# H5_RELAY_BOOTSTRAP_MODEL=deepseek-chat
# H5_RELAY_BOOTSTRAP_MODELS=deepseek-chat,deepseek-reasoner
# H5_RELAY_BOOTSTRAP_PROVIDER=deepseek
# 一键对齐本地 goosed + Goose Desktop relaynode scripts/fix-local-goose-relay.mjs
# 本地 Ollama fallbackDeepSeek 额度不足,或 andu Relay 500agent 请求体含 tools 超过 ~8.5KB)时自动切换
# Local Ollama fallback — creditsExhausted or relay 500 (nginx body limit with tool payloads).
# H5_LOCAL_LLM_FALLBACK=0
# H5_LOCAL_LLM_URL=http://127.0.0.1:11434/v1/chat/completions
# H5_LOCAL_LLM_MODEL=qwen2.5-coder:7b
# H5_LOCAL_LLM_MODEL=qwen2.5:3b
# H5_LOCAL_LLM_API_KEY=ollama
# H5_LOCAL_LLM_NAME=Local Ollama 7B
H5_ACCESS_PASSWORD=change-me
# 计费(Phase 2,金额单位均为人民币分)
# 默认DeepSeek V4 Flash 公开价 × 1(随 H5_USD_CNY_RATE 换算);可用下方变量覆盖
# 默认按 Token 单价扣费(人民币结算);勿开启美元成本换算除非明确需要
# H5_USE_BACKEND_COST=0
# H5_USD_CNY_RATE=7.2
# 汇率 7.2 时默认约:输入 0.101 分/1k(¥0.00101/1k)、输出 0.202 分/1k(¥0.00202/1k
# H5_BILL_INPUT_CENTS_PER_1K=0.101
# H5_BILL_OUTPUT_CENTS_PER_1K=0.202
# H5_BILL_INPUT_CENTS_PER_1K=2 # 输入 Token2 分/1k(¥0.02/1k
# H5_BILL_OUTPUT_CENTS_PER_1K=6 # 输出 Token6 分/1k(¥0.06/1k
# H5_MIN_BILL_CENTS=1
# 仅调试:H5_USE_BACKEND_COST=1 + H5_USD_CNY_RATE=7.2(上游 USD × 汇率 → 人民币分)
# 用户自助充值(微信支付)
# H5_RECHARGE_TIERS_CENTS=500,1000,3000,5000,10000,20000
# H5_MIN_RECHARGE_CENTS=500
# H5_RECHARGE_ORDER_TTL_MS=180000
# H5_RECHARGE_MAX_PENDING=5
# H5_RECHARGE_ORDER_TTL_MS=900000
# H5_RECHARGE_MAX_PENDING=3
# H5_RECHARGE_DAILY_LIMIT_CENTS=200000
# H5_WECHAT_PAY_ENABLED=1
# H5_WECHAT_APP_ID=wx...
@@ -112,17 +120,6 @@ H5_ACCESS_PASSWORD=change-me
# H5_ASR_MAX_BYTES=5242880
# H5_ASR_TIMEOUT_MS=45000
# AI 图片生成(image-designer 技能;OpenAI 兼容 /v1/images/generations
# H5_IMAGE_GEN_ENABLED=1
# H5_IMAGE_GEN_API_URL=https://api.openai.com/v1/images/generations
# H5_IMAGE_GEN_API_KEY=sk-...
# H5_IMAGE_GEN_MODEL=dall-e-3
# H5_IMAGE_GEN_DEFAULT_SIZE=1024x1024
# H5_IMAGE_GEN_DEFAULT_STYLE=vivid
# H5_IMAGE_GEN_DEFAULT_QUALITY=standard
# H5_IMAGE_GEN_BILL_CENTS=30
# 未配置 H5_IMAGE_GEN_API_* 时,回退使用管理后台已选 LLM 的 API Key(需支持 images/generations
# 前端构建时注入(Vite,需 VITE_ 前缀)
# 工作目录:新建会话时使用,必填
VITE_TKMIND_WORKING_DIR=/Users/john/PycharmProjects/tkmind
@@ -139,15 +136,7 @@ VITE_TKMIND_WORKING_DIR=/Users/john/PycharmProjects/tkmind
# Plaza 发现广场(本机为主,105 已停用)
# PLAZA_AUTO_APPROVE=true
# 文档:docs/plaza-local.md
# 首次:sudo pnpm setup:plaza-dns # 仅纯本地 HTTPS 时需要;走 Tunnel 请用 setup:plaza-dns:remove
# 日常:pnpm dev:plaza | 浏览器:pnpm open:plaza | 诊断:pnpm check:plaza
# 公网 plaza.tkmind.cn 经 Cloudflare Tunnel → 本机 :3001(需 dev:plaza 常驻)
# PLAZA_LOCAL_HOST=plaza.tkmind.cn
# PLAZA_PUBLIC_BASE=https://plaza.tkmind.cn
# VITE_PLAZA_BASE=https://plaza.tkmind.cn
# CLOUDFLARE_TUNNEL_CONFIG=/Users/john/Project/ollama/cloudflare/config.yml
# CLOUDFLARE_TUNNEL_NAME=ollama-tkmind
# 文档:docs/plaza-local.md | 本地:http://127.0.0.1:3001/plaza
# MindSpace(默认启用;子功能需按需开启)
# MINDSPACE_ENABLED=false