Total Pageviews

Thursday, 23 July 2026

Sublink Worker

 

One Worker, All Subscriptions

sublink.works/
One Worker, All Subscriptions

A lightweight subscription converter and manager for proxy protocols, deployable on Cloudflare Workers, Vercel, Node.js, or Docker.

7Sageer%2Fsublink-worker | Trendshift

Deploy to Cloudflare Workers Deploy to Vercel

📚 Documentation

⚡ Live Demo · Documentation 中文文档·

Quick Start · API Reference · FAQ

🚀 Quick Start

One-Click Deployment

  • Choose a "deploy" button above to click
  • That's it! See the Document for more information.

Alternative Runtimes

  • Node.js: npm run build:node && node dist/node-server.cjs
  • Vercel: vercel deploy (configure KV in project settings)
  • Docker: docker pull ghcr.io/7sageer/sublink-worker:latest
  • Docker Compose: docker compose up -d (includes Redis)

✨ Features

Supported Protocols

ShadowSocks • VMess • VLESS • Hysteria2 • Trojan • TUIC

Client Support

Sing-Box • Clash • Xray/V2Ray • Surge

Input Support

  • Base64 subscriptions
  • HTTP/HTTPS subscriptions
  • Full configs (Sing-Box JSON, Clash YAML, Surge INI)

Core Capabilities

  • Import subscriptions from multiple sources
  • Generate fixed/random short links (KV-based)
  • Light/Dark theme toggle
  • Flexible API for script automation
  • Multi-language support (Chinese, English, Persian, Russian)
  • Web interface with predefined rule sets and customizable policy groups

from  https://github.com/7Sageer/sublink-worker

-----

如何用 Sublink Worker 自建订阅转换服务 | 在Cloudflare上, 一键部署

 分享一个超级实用的开源项目 —— Sublink Worker,它可以帮你 轻松将代理订阅链接转换成连接可用的订阅格式,并且支持一键部署到 Cloudflare Worker / Vercel / Node.js / Docker 环境,非常适合想要自建订阅转换服务的小伙伴。
📌 什么是 Sublink Worker?

💡 Sublink Worker 是一个开源的轻量级订阅转换工具
它能将各种代理协议(如 ShadowSocks、VMess、VLESS、Trojan 等)的分享链接转换成不同客户端(如 Clash、Sing-Box、V2Ray 等)可用的订阅格式。

🎯 核心特点

    无需传统服务器,一键部署到 Cloudflare Worker 就能运行
    支持多种协议格式转换
    支持生成固定/随机短链接
    支持中文、英文等多语言界面
    带有友好的 Web 使用界面和 API 支持

🧠 为什么要自建订阅转换服务?

📌 许多现有转换平台存在隐私泄露风险、运营不稳定或收费等问题
📌 自建就能:

    保证数据私密安全
    自由定制规则
    更灵活的链接管理体验

而 Sublink Worker 正是一个可以完美实现这一目标的开源方案。
🛠 教你一步步部署 Sublink Worker
✅ 准备工作

    GitHub 账号
    Cloudflare 账号(默认部署到 Cloudflare Worker)
    可选:自定义域名(可选但更专业)

👉 进入项目主页:
👉 https://github.com/7Sageer/sublink-worker
✅ 一键部署步骤

📌 一、Fork 仓库
在 GitHub 右上角点击 Fork,把代码复制到你的仓库。

📌 二、部署到 Cloudflare Worker
项目有 “Deploy to Cloudflare” 按钮
选择你的仓库 → 修改部署命令为:

npm run deploy

点击保存并部署即可。

📌 三、访问你的 Worker
部署完成后会生成一个类似:

https://<你的域名>.workers.dev/

你就可以在浏览器或订阅客户端中使用它进行订阅转换了!

----------

 

无需后端,一键部署,支持workers/vps/docker/容器等,快速将多个单节点或订阅链接转换为不同客户端的订阅链接,提供自定义路由规则,支持SingBox/Clash/V2RayN/Surge等等

 

sub-converter

项目简介

sub-converter 是一个支持多种客户端格式的订阅链接转换与短链生成服务,支持 Singbox、Clash、Surge、Xray 等主流代理配置格式。支持多语言界面、在线转换、短链跳转、订阅配置存储等功能,适合自部署和团队共享。

温馨提示

  • main主分支为cloudflare worker部署使用,server分支为服务器/docker容器等构建所需的源代码
  • 如需部署公共服务使用,请使用docker部署或vps部署,cloudflare worker的KV有请求限制

主要功能

  • 订阅链接格式互转(Singbox/Clash/Surge/Xray)
  • 在线生成和管理短链,支持跳转
  • 支持多语言切换(中/英/俄/波斯)
  • 支持自定义规则、UA、基础配置
  • 支持订阅配置存储与解析
  • 支持 Docker部署或vps源代码部署

server分支目录结构简述

├── src/                # 核心业务代码
│   ├── kvSqlite.js     # SQLite 持久化 KV 封装
│   ├── ...             # 其它 builder、工具、i18n
├── database/           # SQLite 数据库存储目录(持久化)
├── server.js           # Node.js 启动入口
├── package.json        # 依赖与脚本
├── Dockerfile          # Docker 构建文件

源码构建与运行

  1. 安装依赖
    npm install
  2. 启动服务(默认 7788 端口)
    npm start
    # 或指定端口
    PORT=8080 npm start
  3. 访问

Docker 构建与运行

  1. 直接拉取并运行镜像
    docker run -d \
      -v $(pwd)/database:/app/database \
      -p 7788:7788 \
      --name sub-converter \
      eooce/sub-converter:latest

    持久化目录 $(pwd)/database 用于保存 SQLite 数据库文件, 默认当前目录

Docker Compose 部署示例

新建 docker-compose.yml

version: '3'
services:
  sub-converter:
    image: ghcr.io/eooce/sub-converter:latest
    container_name: sub-converter
    ports:
      - "7788:7788"
    volumes:
      - ./database:/app/database
    restart: unless-stopped

启动:

docker-compose up -d

数据持久化说明

  • 所有短链、配置等数据均存储于 database/sublink_kv.db(SQLite)
  • 挂载 database 目录可实现数据持久化,适合 Docker 部署
  • 首次运行自动创建 database 目录,无需手动操作

主要依赖

  • Node.js >=14 <=20
  • express
  • better-sqlite3
  • js-yaml

环境变量说明

  • PORT:服务监听端口,默认 7788。可通过 PORT=8080 npm start 或 docker-compose 的 environment 配置自定义。

Cloudflare Workers 网页端一键部署

  1. Fork 本项目main分支到你的 GitHub 账号。
  2. 打开 Cloudflare Workers 控制台
  3. 选择 "Connect to Git" → 选择你的 GitHub 账号和 Fork 后的仓库。
  4. 选择 server 分支(或你需要的分支)。
  5. 保持默认构建设置(Node.js 项目会自动识别)。
  6. 在 "Environment Variables" 或 "KV Namespaces" 里添加/绑定所需的 KV 命名空间(如 SUBLINK_KV)。
  7. 点击 "Deploy" 即可一键部署,无需本地命令行操作。

注意事项:

  • 首次部署需授权 Cloudflare 访问你的 GitHub 仓库。
  • KV 命名空间需在 Cloudflare 控制台提前创建并绑定到 Worker。
  • 如需自定义域名,可在 Cloudflare 控制台绑定。

from  https://github.com/eooce/sub-converter

------

Sublink Worker v2.4.2 部署与验证

 默认选 Docker Compose + Redis,把进程、持久化和回滚放在同一套配置里。Cloudflare Workers 更省运维,Node.js 适合已有服务体系;升级后重验明文订阅、自定义规则、空代理组和短链存储。

 

Sublink Worker v2.4.2 不是下载后双击运行的客户端。它是一个要部署在 Cloudflare Workers、Docker 或 Node.js 上的订阅转换服务。2026 年 4 月 27 日的 GitHub Release 没有附加二进制资产,只给了部署命令和源码归档。想少管服务器,选 Cloudflare Workers;想保留短链并掌握回滚,默认选 Docker Compose + Redis;已有 Linux 服务守护、反向代理和监控,再考虑 Node.js。

这里没有把真实订阅接入任何实例。下面的版本事实、命令入口和 API 行为来自官方仓库、Release 与文档;验证样例只使用 example.invalid 保留域名,不含真实订阅 token。

v2.4.2 修了什么,哪些旧问题值得重验?

官方更新日志给 v2.4.2 列了四项修复。第一项是自定义规则的出站成员:生成 Clash、Sing-Box、Surge 配置时,自定义规则现在应包含「节点选择」「自动选择」、手动切换分组和节点列表。旧行为会让规则存在,却没有可切换的成员。

第二项改了远程订阅解码顺序。转换器先识别明文 Clash YAML、Sing-Box JSON、Surge INI 和协议链接,只有内容确实像 Base64 时才解码。这一项要防的是明文被强行解码后出现乱码或空配置。

第三项针对空 Clash 代理组。url-testfallback 没有成员时,v2.4.2 会抛出 InvalidConfigError,不再静默产出无效配置。第四项让 Auto Provider 的名称在重复构建间保持稳定,避免每次重建都换一个 provider 引用。

这四项都是「输出正确性」变化,不是首页样式变化。升级验收只打开 Web UI,会漏掉真正需要看的地方。

Cloudflare Workers、Docker、Node.js 怎么选?

三者运行同一套项目代码,差异集中在存储、进程责任和回滚。下面这张表用于选默认部署,不比较没有官方数据支撑的速度。

部署方式默认存储口径你要负责什么回滚抓手更合适的情况
Cloudflare WorkersSUBLINK_KV;也可按文档接外部存储Worker、KV 绑定、域名与边缘访问规则回退 Worker 部署版本或 Git tag个人轻量使用,不想维护 Linux 进程
Docker Compose官方 Compose 同时启动 Redis 7,写入 redis-data镜像 tag、Redis 卷、端口和宿主机备份把镜像变量改回旧 tag,再重建 Worker长期保存短链、希望一次管住应用与存储
Node.js未配 Redis/Upstash 时会落到内存 KVNode.js 18+、进程守护、反向代理、存储与日志切回旧源码目录或旧构建产物已有 systemd/PM2、Redis 和发布流水线

项目 package.json 声明 Node.js 版本为 >=18。Docker 官方镜像提供 amd64arm64;官方 Compose 已写入 Redis 主机、端口、key 前缀和 30 天的 CONFIG_TTL_SECONDS=2592000。这不等于短链一定 30 天失效:运行文档把基础配置 TTL 与短链 TTL 分开,短链默认是不过期。

Cloudflare Workers 怎样部署并确认 KV 已绑定?

从 tag 部署时,先把源码固定到 v2.4.2。Release 给出的入口是 npm install && npm run deploy;仓库里的 deploy 脚本会先执行 setup-kv,再调用 Wrangler。

git clone https://github.com/7Sageer/sublink-worker.git
cd sublink-worker
git checkout v2.4.2
npm install
node -p "require('./package.json').version"
npm run deploy

版本输出应为:

2.4.2

仓库的 wrangler.toml 把 Worker 入口设为 src/worker.jsx,同时声明 SUBLINK_KV。部署后不要把「页面能开」当成 KV 验收。创建一条只指向 https://example.invalid/sample 的临时短链,再读取返回的 /s/<code>;重新部署后仍能得到重定向,才证明写入没有只落在进程内存。

官方 API 把 /shorten/config 都列为写操作。公开域名至少要在 Cloudflare 外层给这两个路径加访问控制或速率限制。不要把管理员令牌写进仓库变量文件,也不要把完整请求 URL 贴进工单。

Docker 怎样固定版本并检查 Redis 持久化?

官方快速开始直接给出 docker compose up -d,但生产升级不该一直追 latest。官方 Compose 支持 SUBLINK_WORKER_IMAGE 覆盖镜像,用 tag 固定到 v2.4.2:

git clone https://github.com/7Sageer/sublink-worker.git
cd sublink-worker
git checkout v2.4.2
SUBLINK_WORKER_IMAGE=ghcr.io/7sageer/sublink-worker:v2.4.2 \
  docker compose up -d
docker compose ps
docker compose logs --tail=80 worker

预期不是日志里出现某句固定文案,而是 workerredis 都处于运行状态,http://127.0.0.1:8787/ 能返回页面。日志命令可能打印请求路径;如果请求里已经带真实订阅 URL,先在日志采集器里关闭 query string,再让团队成员读取。

Redis 是否在落盘,要看 Redis 自己。官方 Compose 把 redis-data 挂到 /data,并载入仓库的 redis.conf。可读取持久化状态,不要用 MONITOR 在繁忙生产实例里长时间抓全部命令:

docker compose exec redis redis-cli INFO persistence \
  | grep -E '^(rdb_last_bgsave_status|aof_enabled|loading):'
docker volume ls | grep redis-data

升级前把 Compose 文件、镜像 tag 与 Redis 卷备份策略放在一起。只备份容器列表没有意义;容器可以重建,短链与 configId 对应的数据在存储层。

Node.js 怎样运行,为什么不该裸跑?

官方 Node.js 路径会把 src/platforms/node-server.js 打包到 dist/node-server.cjs。开发机可按文档直接启动:

git clone https://github.com/7Sageer/sublink-worker.git
cd sublink-worker
git checkout v2.4.2
npm install
npm run build:node
node dist/node-server.cjs

这条命令退出终端就会停止。官方文档建议 Node.js 使用 PM2 等进程管理工具;在已有 Linux 服务体系里,systemd 也可以承担重启和开机启动,但服务文件、用户权限和环境变量保管要由你自己完成。

存储更容易被忽略。运行时按 Redis、Upstash/Vercel KV、内存 KV 的顺序选择后端。Node.js 没有配置前两者时会启用内存 fallback。想让缺少持久化直接暴露为配置错误,可设置:

DISABLE_MEMORY_KV=true
REDIS_URL=redis://sublink:<REDACTED>@127.0.0.1:6379/0
REDIS_KEY_PREFIX=sublink
CONFIG_TTL_SECONDS=2592000

这只是字段示例,<REDACTED> 不能原样用于生产。真正的 REDIS_URL 应交给 systemd credential、容器 secret 或你的密钥管理系统,不要提交到 Git。完成配置后,重启 Node.js 进程并重复短链重启测试;进程重启后记录仍在,才算持久化接通。

订阅 URL 会在哪几层泄露?

Sublink Worker 能自托管,不代表输入天然不会留下痕迹。官方 API 的 /clash/singbox/surge/xray 都通过 GET 接收 config/shorten 也通过 GET 接收 url。源订阅 URL、分享 URI 或 URL 编码后的节点参数因此可能出现在浏览器历史、边缘请求日志、反向代理 access log 和运维截图里。具体哪一层保存多久,取决于你的平台和日志配置,项目文档没有给出统一承诺。

信息位置可能暴露的内容最小化动作
GET 查询串源订阅 URL、分享 URI、规则选择不用真实数据做公开演示;日志不保存 query string
/shorten 存储原始目标 URL 与短码映射限制写接口;不用可猜短码承载敏感链接
/config 存储Clash YAML、Sing-Box JSON 或 Surge 配置限制写接口;设置合适 TTL;删除不用的配置
运行环境变量Redis 密码、Upstash 的 KV_REST_API_TOKEN用平台 secret;限制部署日志和主机读取权限
客户端分享转换后的完整订阅地址不发群聊、不贴 Issue;泄露后轮换源端凭据

/shorten 只是把长链接换成短码,不是加密。知道短码并能访问实例的人,仍可触发到原始 URL 的重定向。Cloudflare KV、Redis 或 Upstash 也只是存储后端,不会自动替你设计访问权限。

 

从旧版升级到 v2.4.2 怎么验?

先保留旧实例,不要原地覆盖后才找差异。Cloudflare 可先发 Preview,Docker 可在另一个本机端口启动新 tag,Node.js 可用独立目录和端口。两边只喂同一份脱敏输入,输入必须排除真实域名、UUID、密码和订阅 token。

下面的 ss:// 使用保留域名 example.invalid 和测试密码,只用于检查解析与输出结构:

SUBLINK_TEST_BASE="http://127.0.0.1:8787"
curl -fsS --get \
  --data-urlencode 'config=ss://YWVzLTEyOC1nY206dGVzdC1vbmx5@example.invalid:8388#upgrade-check' \
  "${SUBLINK_TEST_BASE}/clash" \
  -o /tmp/sublink-v242-clash.yaml

node --input-type=module -e \
  'import fs from "node:fs"; import yaml from "js-yaml"; yaml.load(fs.readFileSync("/tmp/sublink-v242-clash.yaml","utf8")); console.log("YAML parse OK")'

grep -E '^(proxies|proxy-groups|rules):' /tmp/sublink-v242-clash.yaml

看到 YAML parse OK 只说明 YAML 语法可解析。还要按 v2.4.2 的修复项看内容:

回归项该怎么构造通过信号失败后先看哪里
明文订阅解码输入一份脱敏 Clash YAML、Sing-Box JSON 或协议 URI输出不是空文件,也没有 Base64 乱码响应状态、原始 Content-Type、Worker 日志
自定义规则成员/clash/singbox 加一条脱敏 customRules对应规则组含节点选择、自动选择或预期手动组请求中的 JSON 编码、输出组成员
空代理组构造没有成员的 url-testfallback返回明确 InvalidConfigError,而非可下载的坏配置HTTP 状态与错误响应正文
Provider 稳定性同一输入连续生成两次两次输出里的自动 provider 名称一致diff 中的 provider key 与引用
存储恢复创建临时短链或 configId 后重启实例重启后仍可读取;删除测试数据后失效Redis/KV 绑定、TTL、内存 fallback

对输出做 diff 时,先删除会自然变化的时间戳或请求标识,再比较结构。若新版只在一个回归项失败,保留旧版本提供服务,并把该项的脱敏输入、HTTP 状态、响应片段和准确 Git tag 放进 Issue;不要上传原始订阅。

哪些结论不能从 Release 推导出来?

Release 能证明版本号、发布日期、提交和官方部署入口,不能证明你的 Worker 域名、Linux 主机或 Redis 配置已经安全。它也没有为 v2.4.2 提供 Windows、macOS 或 Linux 可执行资产;源码归档不是二进制安装包。

本文没有连接真实订阅,也没有验证具体客户端对所有协议字段的接受程度。Sublink Worker 官方列出的输出包括 Clash、Sing-Box、Surge 与 Xray,但「成功生成文本」不等于目标客户端一定接受每个字段。最终上线前仍要在隔离的测试客户端导入脱敏配置,查看解析错误和策略组成员。

最后一个边界是日志。官方 API 文档建议给 /shorten/config 等写操作增加访问令牌或速率限制,却没有承诺任何部署方式默认隐藏查询串。先完成访问控制、密钥保管和日志脱敏,再换入真实数据;否则自托管只是把泄露面从第三方转换站移到了自己的基础设施。

 

  • Sublink Worker v2.4.2 Release
  • Sublink Worker 快速开始
  • Sublink Worker API 文档
  • Sublink Worker 运行与存储
  • Sublink Worker 更新日志
  •  

    常见问题

    v2.4.2 有二进制包吗?
    没有。GitHub Release 的 assets 列表为空,页面只有源码归档入口。Cloudflare Workers 和 Node.js 需从源码安装依赖、构建;Docker 可拉取 GHCR 镜像,别把源码压缩包当作 Linux 可执行文件。
    Docker 重启会丢短链吗?
    官方 Compose 配置同时启动 Redis 7,并把数据写入 redis-data 卷,正常重建 Worker 容器不会清空该卷。若只运行单个 Worker 容器且未接 Redis 或 Upstash,内存存储在进程退出后会消失。
    Cloudflare Workers 要配 Redis 吗?
    不一定。官方 Wrangler 配置使用 SUBLINK_KV 绑定,轻量实例可直接用 Cloudflare KV。Redis 或 Upstash 是其他运行时的持久化选择;关键是确认短链和 configId 没有落到内存 fallback。
    订阅链接会被日志记录吗?
    项目文档没有承诺日志一定不记录。生成接口把 config 放进 GET 查询串,若边缘平台、反向代理或应用日志保存完整 URL,源链接就可能进入日志;生产环境应隐藏查询串并限制日志访问。
    升级后只看首页够吗?
    不够。首页可打开只证明静态资源和进程存活。至少再检查 Clash YAML 能解析、明文输入未变空、自定义规则仍有出站成员、空代理组返回明确错误,以及重启后短链或 configId 仍可读取。

     

     

    No comments:

    Post a Comment