dwgx@blog:~$dwgx
> cd ../posts

skiapi-frontend:NewAPI/SKIAPI 网关的前端控制台

// created

skiapi-frontend 是给我自己的 SKIAPI 部署写的纯前端控制台, 后端用 NewAPI 兼容接口。技术栈 React 19 + Vite + MUI v7, 单页应用, 走 /api/v1 跟后端通信。只管前端, 认证、计费、路由、密钥这些靠后端兜底。渠道、用户、令牌、日志、计费、兑换码、模型路由、系统设置全在浏览器里管。

渠道是重点。上游支持五十多种, OpenAI、Azure、Claude、Gemini/Vertex、DeepSeek、xAI、Ollama、OpenRouter、通义、智谱、Moonshot, 还有 Midjourney、Suno 这类。每种都带测试对话框, 点一下就知道通不通, 不用翻后端日志猜哪条挂了。

用户分普通、管理员、超管三级。支付接了支付宝、微信、Stripe、Creem、Waffo。浏览器内做了 Playground 和 Chat, 配好模型当场就能试。还塞了个带工具调用的 AI 助手 (src/components/common/AiAssistant.jsx), 管后台随手问它。i18next 七种语言, 默认简中, 日语是特意留的, 人在神户。

容错这块是线上一点点磨出来的。浏览器插件往 DOM 乱插东西会把 React 搞崩, 加了 DOM 补丁挡一下; 发新版旧 chunk 加载失败, 做了重试; 起不来就靠启动看门狗 fallback 到 /legacy/; API 层还做了请求去重。

开发老一套, npm installnpm run dev, dev server 默认把 /api/v1 代理到 http://127.0.0.1:3001, 换后端设 VITE_PROXY_TARGET。上线走 scripts/deploy.py, 构建、打包、SSH 传、切静态目录、reload nginx 一条龙, 发完跑 smoke test。版本号还挂 0.0.0 没正经发版, 但一直在我真实部署上跑。