前言

在代理工具日益普及的今天,管理多个订阅源和节点配置成为了许多用户的痛点。sublinkX 作为一个优秀的开源节点订阅转换生成管理系统,为用户提供了便捷的订阅管理功能。然而,在实际使用过程中,我发现了一些问题并产生了新的需求。

为什么要fork sublinkX?

遇到的问题

  1. 存在的Bug: 在使用过程中发现了一些影响体验的页面Bug

  2. 功能缺失: 缺少一些我认为重要的功能,比如:

  • 缺乏对Clash dialer-proxy属性的支持

  • API访问控制不够完善

  • 没有导入第三方订阅节点的功能

  1. 维护响应: 向原项目提交PR后很久没有得到回应

  2. 意外删库: 不小心把fork的仓库删除了 😅

基于以上原因,我决定重新开始,创建了sublinkE项目。

sublinkE的由来

sublinkE 中的"E"有双重含义:

  • Enhance(增强): 在原有功能基础上的增强和优化

  • Eunie: 取自ID,代表了个人定制化的改进

  • Extension:扩展

主要改进内容

sublinkE 是一个功能强大的节点订阅转换生成管理系统,在sublinkX的基础上做了如下改动:

✅ 已完成的改进

  1. Bug修复: 修复了原项目中的多个页面Bug

  2. Clash dialer-proxy支持: 增加了对Clash dialer-proxy属性的完整支持

  3. API访问控制: 实现了基于API KEY的访问控制机制

  4. 支持更多协议:支持AnyTLS、Socks5协议

  5. 订阅节点排序

  6. 支持插件扩展(实验性)

  7. 订阅自动化:

  • 支持导入订阅链接

  • 实现定时自动更新订阅中的节点

  • 提供灵活的Cron表达式配置

快速开始

Docker部署(推荐)

需要使用 API KEY 的情况下需要添加 API_ENCRYPTION_KEY 环境变量


docker run --name sublinke -p 8000:8000 \
-v $PWD/db:/app/db \
-v $PWD/template:/app/template \
-v $PWD/logs:/app/logs \
-v $PWD/plugins:/app/plugins \
-d eun1e/sublinke

手动安装


# 克隆项目

git  clone  https://github.com/eun1e/sublinkE.git

cd  sublinkE

  

# 后端启动

go  mod  tidy

go  run  main.go

  

# 前端开发

cd  webs

pnpm  install

pnpm  run  dev

默认账号

  • 用户名: admin

  • 密码: 123456

⚠️ 重要提醒: 请在安装后立即修改默认密码!

插件说明

sublinkE 提供了灵活的插件系统,允许开发者扩展系统功能而无需修改核心代码。

插件开发指南

基本步骤

  1. 创建插件文件:参照 plugins_examples/email_plugin.go 编写自定义插件
  2. 编译插件:使用 plugins_examples/build_plugin.sh email_plugin.go 编译成 .so 文件
  3. 部署插件:将编译好的 .so 文件放入 plugins 目录

插件接口实现

所有插件必须实现 plugins.Plugin 接口,包含以下核心方法:

// 必须实现的方法
Name() string                           // 插件名称
Version() string                        // 插件版本
Description() string                    // 插件描述
DefaultConfig() map[string]interface{}  // 默认配置
SetConfig(map[string]interface{})       // 设置配置
Init() error                            // 初始化
Close() error                           // 关闭清理

// 事件处理方法 (API 事件监听)
OnAPIEvent(ctx *gin.Context, event plugins.EventType, path string, 
           statusCode int, requestBody interface{}, 
           responseBody interface{}) error

// 声明插件关注的 API 路径和事件类型
InterestedAPIs() []string
InterestedEvents() []plugins.EventType

插件示例

系统内置以下示例插件,供开发者参考学习(版本更新可能失效,建议自己编译):

插件名称 功能描述 源代码 编译版本
邮件通知插件 监控登录事件并发送邮件通知 email_plugin.go 下载 .so 文件

插件配置与管理

可通过 Web 界面管理插件:

  • 启用/禁用插件
  • 配置插件参数
  • 查看插件状态

开发自定义插件

自定义插件开发流程:

  1. 创建插件 Go 文件,实现 plugins.Plugin 接口
  2. 导出 GetPlugin() 函数,返回插件实例
  3. 定义插件关心的 API 路径和事件类型
  4. 实现事件处理逻辑
  5. 使用构建脚本编译插件
# 编译插件
wget https://raw.githubusercontent.com/eun1e/sublinkE/main/plugins_examples/build_plugin.sh
chmod +x build_plugin.sh
./build_plugin.sh your_plugin.go
# 将生成的 .so 文件复制到插件目录
cp your_plugin.so ../plugins/

更多高级功能和详细 API 文档,请参阅代码示例。

项目预览

3.png

4.png

结语

从sublinkX到sublinkE,这不仅仅是一个字母的改变,更代表了对原项目的尊重和在此基础上的创新。我希望sublinkE能够为更多用户提供便捷、安全、稳定的订阅管理服务。

如果你也在寻找一个功能强大的节点订阅管理系统,不妨试试sublinkE。同时,也欢迎各位开发者参与到项目中来,一起让它变得更好!

项目链接


如果这个项目对你有帮助,别忘了给个⭐Star支持一下!

给我去玩异度之刃3