theo670668/cf-aggregator
0
cf-vless-lite
按需更新型本地/云端聚合器:周期性抓取 Emilia proxyip 候选,仅在更新期间临时启动 engine 做真实链路实测(落地 IPv4 + 出口国家非 CN + 延迟门控),完成即停止,产出订阅(base64 / 明文)与状态。
取代旧 cf-vless-sub 的 HF 部署:环境变量直接沿用同名语义(ACCOUNTS / HOST / UUID / REGIONS / PERREGION / NODECOUNT / MAXMS / SCHEDULEMIN / HTTPPORT / ENGINEBIN / TOKEN)。
运行形态
serve:常驻轻量调度(默认每 60 分钟一轮,SCHEDULE_MIN可配)+ 只读订阅服务(默认:7860)。engine 只在每一轮更新内启动/停止,其余时间零常驻。update [--force]:手动立即更新一轮(--force全量重测并重抓上游)。status:当前节点 / 黑名单 / 上次运行统计。gen-ips:抓取本机视角优选 IP(可填CONNECT_ADDRS)。
更新流程
抓 Emilia(jsdelivr+raw 双源 + 缓存 TTL 30min)
→ REGIONS 候选筛选(每地区配额 = PER_REGION,默认 3,总量上限可配)
→ 生成临时 engine 配置(每候选一个 socks inbound + VLESS outbound 指向账号,
path 携带 proxyip=候选;本地调试可经 SOCKS_PROXY 出站)
→ 启动 engine → 并发实测回声站(api.ip.sb 主 + fallback)
→ 判定:出口必须 IPv4;出口国家 CN 直接拒收(根治 google.cn/m 跳转);
延迟 > MAX_MS 不收(0=不限);地区配额按实测出口国家计数
→ fill 重试:不足缺口半数自动延时补一轮(最多 2 轮)
→ 停止 engine(finally 兜底)→ 发布订阅(links.txt / links.base64 / state.json)HTTP 接口(只读订阅服务,恒不启动 engine)
环境变量(全部可配,config.json 同义)
账号默认不提交仓库(HF Secrets 提供);本地可用 config.json 或环境变量。
数据与缓存(DATA_DIR)
写文件原子替换,读者始终看到完整内容。
本地开发
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt # 清华镜像
.venv/bin/python main.py update --force # 需可访问账号(或 SOCKS_PROXY 经代理)
.venv/bin/python main.py serve # 常驻 + 订阅 :7860
.venv/bin/python -m unittest discover -s test # 10 用例测试
核心判定规则等 10 个单元测试(不依赖外网):Emilia 解析 / 地区筛选 / 回声站解析 / CN 拒收 / 配额限制 / 慢节点跳过 / engine 配置结构 / 链接编码 / tag 排序。
