Skip to content

Deployment

KS-OTO edited this page Sep 21, 2026 · 1 revision

部署

server/app.ts 是平台无关的:只依赖 Web Fetch API 与 Web Crypto,不使用 node:crypto。 因此任何提供「单一 HTTP 入口 + 环境变量注入」的平台都能承载它。

四种部署方式,按省事程度排序。


一、Cloudflare Workers

单命令部署(构建 + 上传一次完成):

bun run deploy            # = bun run build && wrangler deploy
  • 静态资源:Workers Assets 托管 dist/(SPA 回退已配置在 wrangler.toml)。
  • API:worker/index.ts 复用 server/app.ts(平台无关 + Web Crypto 签名)。
  • 密钥:wrangler secret put DEEPSEEK_API_KEY 等逐项配置; 本地调试用 .dev.vars(参考 .dev.vars.example,与 .env 同集合同顺序)。
  • 多账号:变量同样按 _N 后缀命名(如 DEEPSEEK_API_KEY_2)。

二、EdgeOne Makers

仓库已含 Makers 适配层,在控制台把函数目录指向 cloud-functions/ 即可:

  • cloud-functions/api/[[default]].js —— /api/* 全捕获,动态 import('../../server/app.ts') 复用同一份 createAppHandler;依赖链加载失败时返回结构化 FN_IMPORT_FAILED (而不是裸崩成 5xx HTML)。
  • cloud-functions/api/diag.js —— 零依赖自诊断。访问 /api/diag 可区分 「函数系统故障」与「依赖链加载失败」,并列出运行时已知的环境变量名 (Key/Secret 类只显示 <set>),用于确认线上变量是否注入成功。
  • edgeone.json 配置云函数超时与区域(maxDuration: 60,广州 / 新加坡)。
  • 环境变量在 Makers 控制台 EnvVars 配置,经 context.env 注入;同样支持 _N 多账号。

部署后第一件事:打开 /api/diag 确认变量注入成功。变量没注入时页面只会显示「未配置」, 和「没配」长得一模一样。

三、Vercel 等 Node 宿主

server/app.ts 平台无关,只要有「单一 HTTP 入口 + 环境变量注入」都可以承载, api/ 下的适配层照着 cloud-functions/api/[[default]].js 改写即可。

平台面板配置变量的两条硬约束

配置前请先读 Cookie 怎么填。

  • 值不能含空格/换行/制表符 —— 所以百炼 Cookie 只粘 ticket 的值,别粘整段 Cookie 头; 必须用整段的(模力方舟会话 Cookie)先 encodeURIComponent。
  • 面板不做 $ 变量展开 —— 直接粘原值,不要加 \$(那是本地 .env 才需要的写法)。

另外两点容易踩

  • 改完变量必须重新部署才生效:Vercel / Workers 的部署产物在构建期固化配置, 改面板上的值不会影响已经在跑的实例,要触发一次新部署(或在面板点 Redeploy)。

  • 用 CLI 配置时别用 echo:echo 会附带回车换行,正是面板拒绝的「换行符」。 服务端会把值 trim() 掉,因此写入的换行不会损坏查询,但面板会直接拒绝这一笔。

    # ✅ printf 不带换行
    printf '%s' '<login_aliyunid_ticket 的值>' | vercel env add ALIYUN_TOKENPLAN_COOKIE production
    # ❌ echo 会写入尾部 \n
    echo '<值>' | vercel env add ALIYUN_TOKENPLAN_COOKIE production

排查线上「会话已失效」

报错会附带当前配置值的长度,与浏览器中复制的值比对:

  • 偏短 → 本地 .env 里的字面 $ 未转义,被变量展开吃掉了字符;
  • 长度一致但仍失败 → 大概率是会话真过期,重新复制即可。

长度一致也可能是「值被改成了另一个长度相同的旧值」。要确认是不是新值,比对哈希。

四、自托管(本机 / 内网服务器)

bun run build          # 构建前端到 dist/
bun run server         # Bun 服务:同一端口提供 API 与静态页面

打开 http://127.0.0.1:8787。

HOST / PORT 可覆盖监听地址与端口(默认 127.0.0.1:8787)。


部署后的检查清单

检查项 怎么做
变量注入成功 打开 /api/status(或 EdgeOne 上的 /api/diag),看各家 configured 是否为 true
上游真能读到数 打开 /api/usage,看各家切片里有没有 error / code
已加访问控制 本项目没有内建鉴权,见下
站点名 / Logo 生效 改完变量后重启服务(不是重新构建)

⚠️ 上线前必读

部署到公网后,任何知道地址的人都能看到你所有账号的余额与用量 —— 本项目没有内建的用户体系与访问控制。生产使用时请在反向代理层加认证 (Cloudflare Access / Basic Auth / IP 白名单),或者干脆只在内网部署。

详见 安全模型。

Clone this wiki locally