Files
proxy-station/README.md
YANG JIANKUAN 5326c572a2 feat: 合并边缘节点运维并完善 Surge 配置安全
迁入通用节点部署工具、离线交付页生成器和共用技能,隔离真实配置与交付产物。统一 Codex 与 Claude Code 开发约定,补充节点迁移与运维文档。

完善 FINAL、策略组引用、输入校验、Surge 字段编码与 AI DNS 例外保护,增加隔离测试和订阅验证工具。

验证:全量类型检查、44 项单测、前端构建、脚本语法、技能入口与凭据隔离检查均通过。
2026-10-03 23:19:59 +08:00

97 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Proxy Station
统一维护边缘 VPS 节点部署管理与自托管的代理节点、分流规则管理平台。在 Web 界面里管理多协议节点与策略组、规则,向 macOS、iOS、Android 三端下发托管订阅——客户端填一次 URL,之后配置自动更新。
```
节点 ──┐
策略组 ──┼──→ ProfileIR ──┬──→ Surge .conf
规则 ──┘ ├──→ ShadowRocket 节点订阅 + 规则配置
└──→ ClashMeta .yaml
```
## 能做什么
**边缘节点部署管理**——节点部署脚本、版本兼容参考、交付模板与离线汇总页生成器已合入本仓库,使用项目技能 `edge-node-multi-protocol` 维护 nginx、3x-ui/Xray、WARP 与可选 sing-box 线路。真实配置与交付记录位于 Git 忽略的 `edge-nodes/private/`;入口见 [边缘节点工作区](edge-nodes/README.md)。
**多协议节点管理**——VMess、Trojan、Shadowsocks、Hysteria2,支持粘贴分享链接批量导入(`vmess://`、`trojan://`、`ss://` 的 SIP002 与 Xray 两种写法、`hysteria2://`),也支持手动填写与导出。节点按站点分段展示。
**分流规则与策略组**——首次启动自动从 [ClashConnectRules/Surge](https://github.com/ClashConnectRules/Surge) 模板导入(26 个策略组 + 88 条规则,含广告拦截、AI 服务、流媒体、国内直连等)。规则可排序、改策略、启停、增删;策略组可启停并调整顺序,顺序即客户端里的排列顺序。外部规则集可在界面上实时预览内容。
**按客户端自动适配**——同一份数据生成三端配置,客户端不支持的协议在下发时自动屏蔽(例如 Surge 的 ss 类型没有 WebSocket 传输,SS over WS 节点会被排除),字段差异自动映射(cipher 命名、VMess AEAD、Hysteria2 混淆参数等)。
**按订阅分配节点**——每个订阅可以只开放部分节点,用于把不同线路分给不同设备或他人。
## 客户端支持
| 客户端 | 节点 | 策略组 | 规则 | 导入方式 |
|---|:--:|:--:|:--:|---|
| **Surge** (macOS) | ✅ | ✅ | ✅ | 一个 URL,托管配置自动更新(`#!MANAGED-CONFIG`) |
| **ClashMeta** (Android) | ✅ | ✅ | ✅ | 一个 URL,`RULE-SET` 自动映射为 rule-providers |
| **ShadowRocket** (iOS) | ✅ | ✅ | ✅ | **两个 URL**:节点订阅 + 规则配置,见下 |
ShadowRocket 的原生订阅格式只承载节点,因此拆成两步:先在「订阅」里添加节点链接(名称随意),再在「配置」里添加规则链接。策略组通过 `policy-regex-filter` 从 App 内全部节点里筛选。订阅页的 ⓘ 图标里有同样的说明。
> ClashMeta 侧无 Clash 版本的规则集,由本服务实时拉取 Surge 版并转换后提供,无需外部转换服务。
## 快速开始
```bash
pnpm install
pnpm dev # server :3000 + web :5173
```
打开 http://localhost:3000 (或开发时的 :5173),然后:
1. **节点** → 批量导入,粘贴分享链接。命名建议带地区词(如 `🇺🇸 US LA VMess Direct`),地区策略组靠节点名正则匹配
2. **订阅** → 新建订阅,勾选要开放的节点
3. 复制对应客户端的 URL 填进客户端
两端都监听 `0.0.0.0`,手机在同一局域网下用 `http://<你的内网IP>:5173` 即可访问管理界面,页面上显示的订阅 URL 会自动带上该地址。
## 部署
```bash
ADMIN_TOKEN=<随机长字符串> docker compose up -d
```
SQLite 落在 `./data` 卷。订阅 URL 由请求来源自动推断,无需配置基址。
**公网部署的两条硬要求**:设置 `ADMIN_TOKEN`(未设置时管理接口只放行 localhost 与局域网);用反向代理提供 **HTTPS**——订阅 token 就在 URL 里,明文传输会泄露。反代的 access log 建议对 `/sub/` 路径脱敏。
## 校验
```bash
# Clash 产物(最有价值的一条端到端验证)
curl -s "http://localhost:3000/sub/<token>/clash" > /tmp/c.yaml && mihomo -t -f /tmp/c.yaml
pnpm -r typecheck
pnpm test
```
Surge 与 ShadowRocket 需真机导入验收。
## 文档
| 文件 | 内容 |
|---|---|
| `edge-nodes/README.md` | 节点部署工作区、当前舰队、私有资料与工程迁移记录 |
| `.claude/skills/edge-node-multi-protocol/SKILL.md` | 节点部署、重建、维护与交付的共用技能 |
| `docs/SEEDING.md` | 从本仓库私有交付文档导入真实节点、命名建议 |
| `docs/ADDING-REGIONS.md` | 新增地区(香港、日本等)时的节点命名与策略组配套步骤 |
| `AGENTS.md` | Codex/Claude Code 共用的架构要点与开发约定 |
| `CLAUDE.md` | 导入 `AGENTS.md` 的 Claude Code 兼容入口 |
| `docs/AI-COLLABORATION.md` | 双工具加载方式、共用技能与协作维护方法 |
| `docs/DEPLOY.md` | LA 生产环境部署与验证 |
| `docs/SURGE-PRIVACY.md` | Surge AI 域名 DNS 分流与验证边界 |
| `docs/SURGE-AUDIT-2026-10-03.md` | macOS Surge 生产订阅体检、复现结果与修复建议 |
| `docs/SURGE-FIX-2026-10-03.md` | 体检问题修复、生产备份与实际订阅验证结果 |
| `docs/SURGE-CHANGES.md` | 节点、组、规则与 DNS 变更的 Surge 官方 CLI 验证流程 |
## 安全
数据库和节点私有工作区存有真实凭据。`data/`、`*.db`、`.env`、`edge-nodes/private/`、`config.env` 及其备份、`node-links/` 已在 `.gitignore` 中,**绝不入 git**;可入库的示例、测试、模板一律使用占位凭据。节点私有资料通过受控备份恢复,Docker 构建上下文排除节点工具与私有资料。订阅 token 可随时在「订阅」页禁用或删除。
## 技术栈
应用为 pnpm monorepo:`server/`(Hono + better-sqlite3 + Drizzle)+ `web/`(Vue 3 + Vite + Naive UI + Pinia)+ `shared/`(zod schema 与 DTO,前后端共用)。生产模式由 server 静态托管前端产物,单端口运行。节点部署管理使用独立 Bash/Python 工具,不加入应用运行包。