BLOG

手册

2026/04/28 9 min read BLOG 编程规范 手册

好,我帮你直接整理成一份可以直接放仓库用的 README(带目录 + 文内跳转 + 架构图),结构已经优化过,适合长期维护 👇


📄 README.md(完整版)

# 📚 Token Pool & Codex 调试体系
 
---
 
## 📖 目录
 
- [一、核心结论](#核心结论)
- [二、系统架构](#系统架构)
- [三、本地 vs 云端](#本地-vs-云端)
- [四、端口说明](#端口说明)
- [五、Nginx 转发机制](#nginx-转发机制)
- [六、Codex 本地调试本质](#codex-本地调试本质)
- [七、常见问题(重要)](#常见问题重要)
- [八、调试最佳实践](#调试最佳实践)
- [九、总结](#总结)
 
---
 
## 🧠 核心结论
 
```text
本地端口 ≠ 云端端口
它们是两套完全独立的运行实例

👉 不是一个服务两个入口
👉 而是两个环境:

  • 本地(开发环境)

  • 云端(生产环境)


🏗 系统架构

[Codex 本地 Agent]

        │ HTTP(base_url 可切换)

[Token Pool(本地 or 云端)]


[上游模型]

🧩 本地 vs 云端


🟢 本地 Token Pool(开发)

http://127.0.0.1:3100  → master
http://127.0.0.1:3301  → worker(API)

http://127.0.0.1:3100

特点:

  • 本机运行

  • 可调试 / 可修改代码

  • 会 crash / restart


🔵 云端 Token Pool(生产)

https://key.tengokukk.com/openai/v1

特点:

  • 部署在服务器(170.x.x.x)

  • nginx + systemd 管理

  • 稳定运行


🔥 为什么会“混乱”

Codex → 云端
你调试 → 本地

👉 结果:

  • 本地挂了但还能用

  • 修了但没效果


🧭 如何判断当前用的是哪一套

✅ 方法 1:看 base_url

https://key.tengokukk.com  → 云端
http://127.0.0.1:3301      → 本地

✅ 方法 2:接口测试

curl http://127.0.0.1:3301/openai/v1/models
curl https://key.tengokukk.com/openai/v1/models

✅ 方法 3:关闭本地

kill node

👉 如果还能用 → 说明在用云端


⚙️ 端口说明

端口 用途
127.0.0.1 本机回环地址
3100 Token Pool master
3301 Token Pool worker
80 HTTP
443 HTTPS

🌐 Nginx 转发机制

用户请求

https://key.tengokukk.com

Nginx (443)

Token Pool (Node)

Provider

👉 本质:

Nginx = 反向代理

🧠 Codex 本地调试本质

✔ Codex 本地 Agent

  • 本地运行

  • 可执行命令(shell / 文件)

  • 管理上下文

  • 不属于 Token Pool


✔ Token Pool

  • 只是 API 网关

  • 不负责本地执行


🧩 核心关系

Codex ≠ Token Pool
Codex 使用 Token Pool

⚠️ 常见问题(重要)

❌ 错误用法

本地 debug + 云端调用

👉 会导致:

  • 判断错误

  • 修复无效

  • 排查困难


✅ 正确方式

🟢 方式 A(推荐)

Codex → 本地 Token Pool

🔵 方式 B

Codex → 云端 Token Pool

🧭 调试最佳实践

先确认环境(本地 / 云端)
再看端口(3100 / 3301)
再看请求路径
最后看日志

🎯 总结

你看到两个端口,不是一个系统有两个入口
而是你同时在使用“本地实例”和“云端实例”

🚀 扩展方向

  • 自动环境切换(local / prod)

  • Codex + Token Pool 自动调度

  • crash 根因分析系统

  • provider 智能优化


---

# ✅ 这个版本已经帮你做好了

✔ 目录  
✔ 文内跳转(全部可点)  
✔ 架构图(ASCII)  
✔ 层级清晰(适合团队)  
✔ 可直接放 GitHub  

---

# 🚀 如果你要再进阶一点

我可以帮你再升级一版:

👉 加 **Mermaid 架构图(更专业)**  
👉 自动生成 **API 调用流程图**  
👉 或做一个 **开发 / 生产切换指南**

直接说 👍

很好,这三个问题是从“本地开发”到“能给别人用”的关键,我给你一套从原理 → 实现 → 实战的完整讲解👇


🧠 一、为什么别人访问不了你本地?


🎯 核心原因

127.0.0.1 = 只在你自己电脑内部有效

🧩 举个真实例子

你访问:

http://127.0.0.1:3301

👉 实际发生:

请求 → 直接回到你自己电脑 → 不走互联网

❌ 别人访问会发生什么?

别人访问:

http://你的IP:3301

但:

👉 你的电脑通常:

  • 没开放公网端口

  • 在路由器/NAT后面

  • 被防火墙拦住


🔥 所以结论

本地服务默认是“私有的”,只能自己访问

🌐 二、怎么把本地服务变成公网?

有三种主流方式👇


🟢 方案 1:内网穿透(最简单)

👉 推荐新手用


常见工具:

  • ngrok

  • frp

  • cloudflare tunnel


🎯 原理

你电脑 → 连接一个公网服务器 → 生成一个公网地址

🧪 示例(ngrok)

ngrok http 3301

输出:

https://abc123.ngrok.io

👉 现在别人访问:

https://abc123.ngrok.io

👉 就能访问你本地服务了


🧠 本质

你主动“打洞”连接外网服务器

🔵 方案 2:服务器中转(生产常用)

👉 你现在用的就是这个


架构

公网用户

Nginx(服务器)

Token Pool(服务器)

👉 本地不参与


优点

  • 稳定

  • 可控

  • 安全


🟡 方案 3:直接开放端口(不推荐)


需要:

  • 公网 IP

  • 路由器端口转发

  • 关闭防火墙限制


风险:

❌ 非常不安全
❌ 容易被扫描攻击

🧠 推荐结论

开发 → 内网穿透
生产 → 云服务器 + nginx

⚙️ 三、nginx / 端口转发怎么打通?


🧱 nginx 是干嘛的?

Nginx = 流量入口(反向代理)

🧩 基本结构

用户请求

https://你的域名

Nginx

Node服务(127.0.0.1:3301)

✍️ 最简单 nginx 配置

server {
    listen 80;
    server_name yourdomain.com;
 
    location / {
        proxy_pass http://127.0.0.1:3301;
 
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

🔥 如果是 HTTPS(你现在的)

server {
    listen 443 ssl;
    server_name key.tengokukk.com;
 
    ssl_certificate /path/fullchain.pem;
    ssl_certificate_key /path/privkey.pem;
 
    location / {
        proxy_pass http://127.0.0.1:3301;
    }
}

🧠 nginx 做了什么?

公网请求 → 转发到本地 Node 服务

🔌 四、端口转发(补充理解)


📌 路由器端口转发

公网IP:80

路由器

你的电脑:3301

👉 但这个:

❌ 家用网络复杂
❌ IP 会变
❌ 不稳定


🧠 五、你当前项目的真实结构(结合你)


🔵 云端(你现在用的)

https://key.tengokukk.com

Nginx (443)

127.0.0.1:3301(服务器上的 Node)

🟢 本地(你调试)

http://127.0.0.1:3301

👉 两者完全独立


🎯 六、最实用总结


❓ 为什么别人访问不了你本地?

因为 127.0.0.1 只代表“他自己”

❓ 怎么变公网?

✔ 内网穿透(开发)
✔ 云服务器(生产)

❓ nginx 在干嘛?

把公网请求转发给本地服务

🧠 最后一张总图(建议记住)

开发模式:
你 → 127.0.0.1:3301
 
内网穿透:
你 → ngrok → 你电脑
 
生产模式:
用户 → nginx → Node服务

🚀 如果你下一步想更狠一点

我可以帮你:

👉 手把手搭一个:

  • 本地 Token Pool → ngrok 公网访问

  • 或你自己的 nginx + 域名部署

甚至:

👉 把你现在这个 Token Pool 做成真正 SaaS 👍

这个问题问得很好,而且是你现在整个系统(本地 → 云端 → nginx)里最关键的一块基础认知

我给你讲清楚,不讲虚的👇


🧠 一句话理解

域名 = 给服务器起的“好记的名字”

👉 用来代替难记的 IP 地址


🧩 举个最直观的例子

没有域名:

https://170.12.34.56

有域名:

https://key.tengokukk.com

👉 明显:

  • 域名 ✔ 好记

  • IP ❌ 很难记


🔥 域名真正的作用(不止是好看)


① 📛 人类可读(最基础)

IP → 给机器看的
域名 → 给人看的

② 🌐 通过 DNS 找到服务器

当你访问:

https://key.tengokukk.com

实际过程:

域名 → DNS 查询 → IP 地址 → 连接服务器

👉 就像:

通讯录名字 → 查电话 → 打过去

③ 🔒 支持 HTTPS(非常重要)

没有域名:

❌ 很难用 HTTPS
❌ 浏览器会警告

有域名:

✔ 可以申请 SSL 证书(https)
✔ 数据加密
✔ 浏览器信任

👉 你现在这个:

https://key.tengokukk.com

就是:

域名 + SSL = 安全访问

④ 🚪 配合 nginx 做“统一入口”

用户 → 域名 → nginx → Node服务

👉 作用:

  • 不暴露真实端口(3301)

  • 可以转发多个服务

  • 可以做权限控制


⑤ 🧭 支持多服务分发(高级)

同一个服务器:

api.xxx.com     → API服务
admin.xxx.com   → 后台
key.xxx.com     → Token Pool

👉 一个 IP → 多个系统


⑥ 📈 可扩展 / 可迁移

你换服务器:

旧IP → 新IP

👉 只需要改:

域名解析(DNS)

用户完全无感


🧠 回到你现在这个项目


🔵 云端访问

https://key.tengokukk.com/openai/v1

👉 实际发生:

域名 → IP(170.x.x.x)
→ nginx
→ 127.0.0.1:3301
→ Token Pool

🟢 本地访问

http://127.0.0.1:3301

👉 没有域名:

  • 只能你自己用

  • 不能 HTTPS

  • 不能公网访问


🧨 如果没有域名会怎样?

❌ 只能用 IP
❌ 不方便
❌ HTTPS 很麻烦
❌ 不专业
❌ 无法做多服务分发

🎯 最关键一句总结

域名 = 用户访问入口 + 安全基础 + 系统扩展能力

🧠 再给你一个工程级理解(重要)

你现在的系统其实是:

域名(key.tengokukk.com)

Nginx(入口网关)

Token Pool(3301)

Provider

👉 域名就是:

👉 整个系统的“入口门牌号”


🚀 如果你下一步想继续深入

我可以帮你搞这些👇

👉 域名是怎么注册的(阿里云 / Cloudflare)
👉 DNS 是怎么配置的(A记录 / CNAME)
👉 怎么给你这个项目绑定域名
👉 怎么自动申请 HTTPS(Let’s Encrypt)

甚至:

👉 手把手帮你把本地 Token Pool 变成一个公网域名服务 👍