# GoProxy > **智能代理池系统** — 基于 Go 的轻量级、自适应代理池服务,支持免费代理自动抓取 + 付费订阅导入 [![Docker Hub](https://img.shields.io/docker/v/isboyjc/goproxy?label=Docker%20Hub&logo=docker)](https://hub.docker.com/r/isboyjc/goproxy) [![GitHub Container Registry](https://img.shields.io/badge/GHCR-latest-blue?logo=github)](https://github.com/isboyjc/GoProxy/pkgs/container/goproxy) [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE) [![Go Version](https://img.shields.io/badge/Go-1.25-00ADD8?logo=go)](https://go.dev/) GoProxy 从公开代理源自动抓取 HTTP/SOCKS5 代理,同时支持导入 Clash/V2ray 付费订阅,通过出口 IP + 地理位置 + 延迟三重验证后统一入池,对外提供 HTTP 和 SOCKS5 双协议代理服务。 **GitHub**:[github.com/isboyjc/GoProxy](https://github.com/isboyjc/GoProxy) ![](https://cdn.amux.ai/data/1322149f78ab57adb821ce731c11a9e944504649.png) ## 核心特性 ### 双池架构 - **免费代理池** — 自动从 20+ 公开源抓取,质量分级(S/A/B/C),智能补充与替换 - **订阅代理池** — 导入 Clash/V2ray 订阅,通过 sing-box 自动转换加密协议(vmess/vless/trojan/ss/hysteria2/anytls 等)为本地 SOCKS5 代理 - **5 种使用模式** — 混合·订阅优先 / 混合·免费优先 / 混合·平等 / 仅订阅 / 仅免费,WebUI 随时切换 ### 智能池子管理 - **固定容量 + 动态状态** — Healthy → Warning → Critical → Emergency 四级自适应 - **严格准入** — 出口 IP + 地理位置 + 延迟验证,HTTP 代理额外验证 HTTPS CONNECT 隧道 - **自动优化** — 按需抓取(Emergency/Refill/Optimize 三模式),定时替换慢代理 - **故障自愈** — 请求失败自动切换代理重试(最多 3 次),用户无感知 ### 订阅管理 - **格式自动识别** — Clash YAML / V2ray 链接 / Base64 / 纯文本,无需手动选格式 - **sing-box 内置** — Docker 镜像自带 sing-box,加密协议节点自动转为本地 SOCKS5 - **软删除机制** — 订阅代理失败不删除只禁用,定时探测唤醒恢复 - **访客贡献** — 未登录用户可贡献订阅 URL/文件,管理员统一管理 - **自动清理** — 连续 7 天无可用节点的订阅自动移除 ### 多端口多协议 | 端口 | 协议 | 模式 | 适用场景 | |------|------|------|---------| | 7777 | HTTP | 随机轮换 | 爬虫、数据采集、IP 多样性 | | 7776 | HTTP | 最低延迟 | 长连接、流媒体、稳定优先 | | 7779 | SOCKS5 | 随机轮换 | 浏览器、SSH、游戏 | | 7780 | SOCKS5 | 最低延迟 | 稳定应用、固定连接 | | 7778 | HTTP | WebUI | 管理面板(双角色权限) | ### WebUI 仪表盘 - 免费池 / 订阅池分离展示,实时状态监控 - 订阅管理:添加 URL / 上传文件 / 刷新 / 暂停 / 删除 - 系统设置:5 种代理模式切换、池子参数、地理过滤 - 双角色权限:访客只读 + 管理员完全控制 - 中英文切换 ## 快速开始 ### Docker 部署(推荐) ```bash # 一键启动(自动拉取最新镜像) docker compose up -d # 访问 WebUI # http://localhost:7778(默认密码:goproxy) ``` 自定义配置: ```bash cp .env.example .env vim .env # 修改密码、认证、地理过滤等 docker compose up -d ``` ### 本地运行 ```bash # 需要 Go 1.25 + CGO(依赖 go-sqlite3) go run . # 或编译后运行 go build -o proxygo . && ./proxygo ``` > 如需订阅导入功能,本地需安装 [sing-box](https://sing-box.sagernet.org/):`brew install sing-box` ## 使用代理 ### HTTP 代理 ```bash # 随机轮换(IP 多样性) curl -x http://localhost:7777 https://httpbin.org/ip # 最低延迟(稳定优先) curl -x http://localhost:7776 https://httpbin.org/ip # 环境变量方式 export http_proxy=http://localhost:7777 export https_proxy=http://localhost:7777 ``` ### SOCKS5 代理 ```bash # 随机轮换 curl --socks5 localhost:7779 https://httpbin.org/ip # 最低延迟 curl --socks5 localhost:7780 https://httpbin.org/ip # 环境变量方式 export ALL_PROXY=socks5://localhost:7779 ``` ### 带认证使用 ```bash # HTTP curl -x http://user:pass@your-server:7777 https://httpbin.org/ip # SOCKS5 curl --socks5 user:pass@your-server:7779 https://httpbin.org/ip # 环境变量 export http_proxy=http://user:pass@your-server:7777 export ALL_PROXY=socks5://user:pass@your-server:7779 ``` ### 编程语言示例 **Python**: ```python import requests # HTTP 代理 proxies = {'http': 'http://localhost:7777', 'https': 'http://localhost:7777'} requests.get('https://httpbin.org/ip', proxies=proxies) # SOCKS5 代理(需 pip install requests[socks]) proxies = {'http': 'socks5://localhost:7779', 'https': 'socks5://localhost:7779'} requests.get('https://httpbin.org/ip', proxies=proxies) ``` **Node.js**: ```javascript // SOCKS5(需 npm install socks-proxy-agent node-fetch) const { SocksProxyAgent } = require('socks-proxy-agent'); const fetch = require('node-fetch'); const agent = new SocksProxyAgent('socks5://localhost:7779'); fetch('https://httpbin.org/ip', { agent }).then(r => r.json()).then(console.log); ``` **浏览器 / SSH**: ```bash # 浏览器:设置 → 代理 → SOCKS5 → localhost:7779 # SSH 隧道: ssh -o ProxyCommand='nc -X 5 -x localhost:7779 %h %p' user@remote-server ``` ## 订阅导入 通过 WebUI 管理订阅(管理员登录后): 1. **订阅 URL** — 填入 Clash/V2ray 订阅地址,自动识别格式并解析 2. **上传文件** — 拖拽或选择 Clash YAML / V2ray 配置文件 支持的节点协议:vmess、vless、trojan、shadowsocks、hysteria2、anytls、http、socks5 订阅代理与免费代理的区别: - 健康检查失败 → 禁用(不删除),定时探测唤醒 - 不受免费池 slot 容量限制 - 地理过滤 → 禁用(不删除) - 连续 7 天无可用节点 → 自动移除订阅 访客可通过顶部「贡献订阅」按钮分享自己的订阅 URL 或配置文件。 ## Docker 部署详解 ### docker run 方式 ```bash docker run -d --name proxygo \ -p 7776:7776 -p 7777:7777 -p 7778:7778 -p 7779:7779 -p 7780:7780 \ -e WEBUI_PASSWORD=your_password \ -e PROXY_AUTH_ENABLED=true \ -e PROXY_AUTH_USERNAME=myuser \ -e PROXY_AUTH_PASSWORD=mypass \ -v goproxy-data:/app/data \ ghcr.io/isboyjc/goproxy:latest ``` ### 数据持久化 - docker-compose 使用 Named Volume `goproxy-data`,容器重启/更新不丢数据 - 数据包含:SQLite 数据库(代理池)、config.json(配置)、sing-box 配置 **备份**: ```bash docker run --rm -v goproxy-data:/data -v $(pwd):/backup \ alpine tar czf /backup/goproxy-backup-$(date +%Y%m%d).tar.gz -C /data . ``` **恢复**: ```bash docker compose down docker run --rm -v goproxy-data:/data -v $(pwd):/backup \ alpine sh -c "cd /data && tar xzf /backup/goproxy-backup-*.tar.gz" docker compose up -d ``` ### 安全建议 | 场景 | 建议 | |------|------| | 公网部署 | 启用代理认证 + 修改 WebUI 密码 | | 内网部署 | 启用代理认证 或 防火墙白名单 | | 本地测试 | 默认配置即可 | ## 环境变量 | 变量 | 默认值 | 必须 | 说明 | |------|--------|------|------| | `WEBUI_PASSWORD` | `goproxy` | 是 | WebUI 登录密码,生产环境务必修改 | | `PROXY_AUTH_ENABLED` | `false` | 否 | 代理认证开关,公网部署建议启用 | | `PROXY_AUTH_USERNAME` | `proxy` | 否 | 代理认证用户名 | | `PROXY_AUTH_PASSWORD` | 空 | 否 | 代理认证密码,启用认证时必填 | | `BLOCKED_COUNTRIES` | `CN` | 否 | 屏蔽国家代码(逗号分隔,留空不屏蔽) | | `ALLOWED_COUNTRIES` | 空 | 否 | 允许国家白名单(非空时优先于黑名单) | | `CUSTOM_PROXY_MODE` | `mixed` | 否 | 代理模式:mixed / custom_only / free_only | | `SINGBOX_PATH` | `sing-box` | 否 | sing-box 路径(Docker 内置,无需修改) | | `TZ` | `Asia/Shanghai` | 否 | 时区 | 完整配置见 [.env.example](.env.example),更多池子参数可通过 WebUI 设置面板调整。 ## 项目结构 ```text main.go # 入口,协调所有模块 ├── config/ # 配置(环境变量 + config.json) ├── storage/ # SQLite 持久化(proxies + subscriptions + source_status) ├── fetcher/ # 多源代理抓取 + 断路器 ├── validator/ # 代理验证(连接 + IP + 地理 + 延迟) ├── pool/ # 池子管理(准入 + 替换 + 状态机) ├── checker/ # 健康检查(free 删除 / custom 禁用) ├── optimizer/ # 质量优化(仅免费池) ├── custom/ # 订阅管理 │ ├── parser.go # 格式自动识别解析 │ ├── singbox.go # sing-box 进程管理 │ └── manager.go # 刷新循环 + 探测唤醒 + 过期清理 ├── proxy/ # 代理服务(HTTP + SOCKS5,4 端口) ├── webui/ # 管理面板(嵌入式 HTML + REST API) └── logger/ # 日志收集 ``` ## 扩展文档 - [架构设计文档](POOL_DESIGN.md) — 状态机、数据模型、选择策略、sing-box 集成 - [地理过滤配置](GEO_FILTER.md) — 国家代码、白名单/黑名单、测试方法 - [数据目录说明](DATA_DIRECTORY.md) — 数据库、配置文件、备份恢复 - [测试脚本](test/README.md) — HTTP + SOCKS5 测试脚本 - [更新日志](CHANGELOG.md) — 版本历史 ## 免责声明 本项目仅供学习交流和技术研究使用。 - 本项目抓取的代理均来自互联网公开资源,不保证其可用性、稳定性和安全性 - 用户应自行承担使用本项目的一切风险,包括但不限于网络安全风险、法律风险等 - 请遵守当地法律法规,不得将本项目用于任何违法违规活动 - 订阅导入功能仅为方便用户管理自有代理资源,用户应确保其订阅来源合法合规 - 访客贡献的订阅由贡献者自行负责,项目维护者不对其内容承担任何责任 - 本项目不提供任何形式的代理服务,不对通过本系统传输的内容负责 - 作者不对因使用本项目造成的任何直接或间接损失承担责任 使用本项目即表示您已阅读并同意以上声明。 ## 友情链接 - [LINUX DO](https://linux.do/) — 真诚、友善、团结、专业,共建你我引以为傲的社区 ## License [MIT](LICENSE)