Resin 是什么:部署前先对齐一句话

Resin 是 Go 编写的开源高性能代理池网关(GitHub 约 2300 star,2026-09 查询),把最多十万级的代理订阅节点聚合成一个稳定、可观测、支持会话粘性的统一代理入口,适合爬虫采集与多账号业务的出口调度。本文的命令、环境变量与配置项出自官方 README 与 DESIGN.md(2026-09-13 核对 master 分支),工程解读单独标注;工具定位与能力全景见 Resin 是什么,这里直接进部署。

Docker Compose 部署:官方推荐路径

官方 Quick Start 推荐 Docker Compose 一键启动,一个 compose 文件定义镜像、双 Token、端口与三个持久化目录。以下为 README 原样内容:

# docker-compose.yml
services:
  resin:
    image: ghcr.io/resinat/resin:latest
    container_name: resin
    restart: unless-stopped
    environment:
      RESIN_ADMIN_TOKEN: "admin123" # 修改为你的管理后台密码
      RESIN_PROXY_TOKEN: "my-token" # 修改为你的代理密码
      RESIN_LISTEN_ADDRESS: 0.0.0.0
      RESIN_PORT: 2260
    ports:
      - "2260:2260"
    volumes:
      - ./data/cache:/var/cache/resin
      - ./data/state:/var/lib/resin
      - ./data/log:/var/log/resin

执行 docker compose up -d 启动服务。四个环境变量的分工:

变量作用注意点
RESIN_ADMIN_TOKEN管理后台登录密码示例值全网可见,生产必改
RESIN_PROXY_TOKEN客户端代理认证密码不想启用代理密码也要显式设为空字符串,变量必须定义
RESIN_LISTEN_ADDRESS监听地址0.0.0.0 对外开放,127.0.0.1 仅本机
RESIN_PORT主监听端口默认 2260

三个卷对应三类落盘数据:缓存、持久化状态(节点健康数据、延迟统计与租约绑定,重启后可恢复)与日志(README)。DESIGN.md 里持久化分强持久化与弱持久化两层,底层是内置 SQLite 引擎,不依赖 Redis、MySQL 这类外部中间件——单容器就是全部运维面。

端口规划是部署里最容易踩的坑(工程提醒):Docker 无法为已运行容器动态增加端口映射,而 Resin 支持在 WebUI 里随时热添加监听端口。官方 README 的建议是在 ports 中提前映射所需端口范围,例如 "2300-2399:2300-2399",或在适合的环境使用 host 网络。

WebUI 初始化:登录、导入订阅、等节点池刷新

初始化三步走(README Quick Start):浏览器打开 http://127.0.0.1:2260,输入 RESIN_ADMIN_TOKEN 登录后台;在左侧菜单「订阅管理」添加节点订阅;稍等片刻,等节点池刷新出节点。

订阅来源支持远程订阅 URL(http/https)和在 UI/API 里直接粘贴内容,格式覆盖面很宽(README):sing-box JSON、Clash JSON/YAML、URI 行格式(vmess://、vless://、trojan://、ss://、hysteria2://、http://、socks5:// 等)、纯 HTTP 代理行(IP:PORT 或 IP:PORT:USER:PASS,支持 IPv4/IPv6)、Base64 包裹的文本订阅。主流订阅基本能直接接入,无需先做格式转换。

节点规模上来之后,用 Platform 做筛选隔离:打开 /ui/platforms 页面创建 Platform,用节点标签正则圈出专属池。规则匹配 <订阅名>/<节点标签>,每行一条正则表达式,普通规则之间 OR 关系,* 开头表示必须命中,! 开头表示命中即排除(README)。README 示例是只要香港、日本的专线节点,排除过期与失效标签:

香港
日本
*专线
!过期
!失效

多入站端点:每个端口独立开关

Resin 支持在 WebUI 里热添加监听端口,并且每个端口可以分别控制是否开放管理页面、HTTP 正向代理、HTTP 反向代理和 SOCKS5(README)。实际用法是分区:一个端口只开管理台留给运维,一个端口只开 SOCKS5 给采集程序,一个端口只开反向代理给内部服务——不同业务走不同入口,认证与日志天然隔离。热添加意味着加端口不用重启进程;配合订阅热更新(刷新订阅增量同步、不断连),日常变更基本不中断流量(README)。

前提只有一个:WebUI 里新加的端口必须已经出现在 Docker 端口映射里,否则容器外访问不到。

接入验证:三条 curl 命令

服务启动后,用三条 curl 命令分别验证三种接入模式(README 示例原样):

# HTTP 正向代理
curl -x http://127.0.0.1:2260 -U ":my-token" https://api.ipify.org

# SOCKS5 正向代理
curl --proxy socks5h://127.0.0.1:2260 -U "Default:my-token" https://api.ipify.org

# URL 反向代理
curl http://127.0.0.1:2260/my-token/./https/api.ipify.org

返回的 IP 是节点出口,就说明代理池已经工作。正向代理认证格式是 Platform:RESIN_PROXY_TOKEN(Platform 可省略,走默认 Default 平台);要带业务账号做粘性接入,认证写成 Default.user_tom:my-token,粘性原理见 Resin 粘性会话与熔断调度实战

跨订阅去重与热更新

两个特性决定 Resin 适合长期挂着不管。其一是跨订阅智能去重:不同订阅中配置相同的节点自动合并、共享健康状态,避免重复探测(README)。其二是热更新:更新常用配置不用重启,订阅节点刷新时增量同步、不中断现有连接(README)。

订阅链接本身的生产维护可以上移一层:本站 SubBoost 系列介绍过把多家订阅聚合成一份标准化订阅的工具链(订阅自动更新的展开见 SubBoost 自动刷新),产出直接作为 Resin 的订阅源。上游管订阅干净,Resin 管出口稳定。

结构化请求日志:出问题能查到账号级

Resin 为每次代理请求落一条结构化日志(DESIGN.md),字段包括 client_ip、platform、account、target_host、node_tag、egress_ip、耗时、网络层成败、HTTP 状态码与上游错误归类,并按 ts_ns、proxy_type、platform_id、platform_id+account、target_host、egress_ip 建索引。审计时能直接回答”账号 user_tom 从哪些出口访问了哪些站点”这类问题。

存储设计(DESIGN.md):日志保存在 RESIN_LOG_DIR 下的 request_logs-<时间戳>.db,单库超过 RESIN_REQUEST_LOG_DB_MAX_MB 自动滚动,仅保留最近 RESIN_REQUEST_LOG_DB_RETAIN_COUNT 个文件;写入走内存队列异步批量提交,队列满时直接丢弃新日志,保证代理主流程不被阻塞,数据库开 WAL 模式。这份日志是审计用途,有界存储、极端情况会丢弃,别当强一致交易记录依赖。

部署形态怎么选

部署形态适用场景关键配置
本机 Docker 快速体验十分钟先跑通看看单端口 2260,改掉示例 Token 就能用
服务器常驻给业务长期提供稳定出口端口段预映射、三卷持久化、restart: unless-stopped
多端口分区多业务隔离入口预留端口段,按端口独立开关管理台/正向/反向/SOCKS5

不用 Docker 还有两条路:到 Release 页下载预编译二进制(覆盖 Linux/macOS/Windows 的 amd64/arm64),用 RESIN_STATE_DIR、RESIN_CACHE_DIR、RESIN_LOG_DIR、RESIN_LISTEN_ADDRESS、RESIN_PORT 等环境变量或 .env 文件配置后直接运行;源码编译需要 Go 1.25+ 与 Node.js,先构建 WebUI(npm install 加 npm run build)再 go build 核心。各参数细节以官方 README 为准。

上线前运维清单(工程建议,非官方强制)

  1. 三个数据卷必须挂载持久化,容器重建不丢节点健康数据与租约绑定。
  2. 两个 Token 都换成强值,README 示例值全网可见。
  3. 公网部署只暴露业务端口,管理台端口绑定 127.0.0.1 或前置访问控制。
  4. 内网与本机目标不走代理:配置 RESIN_PROXY_BYPASS,例如 "localhost;127.*;10.*;172.16.0.0/12;192.168.*;<local>"(README),支持精确主机、通配符与 CIDR 网段。
  5. 定期查看 WebUI 指标确认节点池健康度;熔断数量异常上升,先查上游订阅质量。
  6. 按 RESIN_REQUEST_LOG_DB_RETAIN_COUNT 与磁盘容量规划日志留存周期。

常见问题

Resin 部署需要哪些环境变量?

最少四个:RESIN_ADMIN_TOKEN、RESIN_PROXY_TOKEN、RESIN_LISTEN_ADDRESS、RESIN_PORT,官方 Compose 模板已带全。注意 RESIN_PROXY_TOKEN 即使不启用代理密码也必须显式定义为空字符串,否则启动报错提示未定义(README FAQ)。

Docker 部署后 WebUI 新加的端口为什么访问不通?

容器端口没有映射。Docker 无法为已运行容器动态增加端口映射,官方建议提前在 ports 里映射端口范围(如 “2300-2399:2300-2399”)或使用 host 网络(README);改完用 docker compose up -d 重建生效。

Resin 支持哪些订阅格式?

支持 sing-box JSON、Clash JSON/YAML、URI 行(vmess/vless/trojan/ss/hysteria2/http/socks5 等)、纯 IP:PORT 代理行与 Base64 文本订阅(README)。订阅源也可以先用 SubBoost 这类订阅管理工具聚合清洗,再填入 Resin。