前言
在代理工具日益普及的今天,管理多个订阅源和节点配置成为了许多用户的痛点。sublinkX 作为一个优秀的开源节点订阅转换生成管理系统,为用户提供了便捷的订阅管理功能。然而,在实际使用过程中,我发现了一些问题并产生了新的需求。
为什么要fork sublinkX?
遇到的问题
-
存在的Bug: 在使用过程中发现了一些影响体验的页面Bug
-
功能缺失: 缺少一些我认为重要的功能,比如:
-
缺乏对Clash
dialer-proxy
属性的支持 -
API访问控制不够完善
-
没有导入第三方订阅节点的功能
-
维护响应: 向原项目提交PR后很久没有得到回应
-
意外删库: 不小心把fork的仓库删除了 😅
基于以上原因,我决定重新开始,创建了sublinkE项目。
sublinkE的由来
sublinkE 中的"E"有双重含义:
-
Enhance(增强): 在原有功能基础上的增强和优化
-
Eunie: 取自ID,代表了个人定制化的改进
-
Extension:扩展
主要改进内容
sublinkE 是一个功能强大的节点订阅转换生成管理系统,在sublinkX的基础上做了如下改动:
✅ 已完成的改进
-
Bug修复: 修复了原项目中的多个页面Bug
-
Clash dialer-proxy支持: 增加了对Clash
dialer-proxy
属性的完整支持 -
API访问控制: 实现了基于API KEY的访问控制机制
-
支持更多协议:支持AnyTLS、Socks5协议
-
订阅节点排序
-
支持插件扩展(实验性)
-
订阅自动化:
-
支持导入订阅链接
-
实现定时自动更新订阅中的节点
-
提供灵活的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
提供了灵活的插件系统,允许开发者扩展系统功能而无需修改核心代码。
插件开发指南
基本步骤
- 创建插件文件:参照
plugins_examples/email_plugin.go
编写自定义插件 - 编译插件:使用
plugins_examples/build_plugin.sh email_plugin.go
编译成.so
文件 - 部署插件:将编译好的
.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 界面管理插件:
- 启用/禁用插件
- 配置插件参数
- 查看插件状态
开发自定义插件
自定义插件开发流程:
- 创建插件 Go 文件,实现
plugins.Plugin
接口 - 导出
GetPlugin()
函数,返回插件实例 - 定义插件关心的 API 路径和事件类型
- 实现事件处理逻辑
- 使用构建脚本编译插件
# 编译插件
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 文档,请参阅代码示例。
项目预览
结语
从sublinkX到sublinkE,这不仅仅是一个字母的改变,更代表了对原项目的尊重和在此基础上的创新。我希望sublinkE能够为更多用户提供便捷、安全、稳定的订阅管理服务。
如果你也在寻找一个功能强大的节点订阅管理系统,不妨试试sublinkE。同时,也欢迎各位开发者参与到项目中来,一起让它变得更好!
项目链接
-
📖 文档: 详见项目README
-
🐛 Issues: 欢迎反馈问题和建议
-
💡 PR: 欢迎提交代码贡献
如果这个项目对你有帮助,别忘了给个⭐Star支持一下!