
MiSub - 一款强大的开源订阅转换与聚合管理工具 (保姆级部署教程)
MiSub: 一款强大的开源订阅转换与聚合管理工具
前言:
最近发现“赛博大善人” Cloudflare 貌似在内测 Cloudflare Snippets 功能,有可能后续都会开放!
官方说这只是付费用户的专属(仅对Pro、Business 和 Enterprise 计划免费提供),但我发现一些Free免费计划的域名竟然也能“白嫖”!想知道你是不是那个幸运儿吗?可以按以下路径检查:
- 登录 Cloudflare,选择你的域名。
- 导航至 规则 (Rules) → Snippets。
如果你的界面如下图所示,那么恭喜你,可以抢先体验!我们下次会介绍如何将它与本次的项目结合,实现一个非常酷的功能,站在多位大佬的肩膀上。
当然本文的主角是 MiSub ,一个我深度体验数月后极力推荐的强大订阅管理项目。 它由群内大佬开发,采用 Cloudflare 与 Vue 3 技术栈,创新地结合了订阅分组与 D1 数据库支持,完美解决了 KV 写入限制,让你能为自己或他人无忧地创建并分享高度定制化的订阅链接。 这篇博文将带你了解并完成它的整个部署过程。
MiSub 界面预览
应用特点
强大的订阅分组 (Profiles)
- 自由组合: 你可以建立任意数量的订阅组,例如「家庭共享」、「影音串流」、「游戏专用」等。
- 精准控制: 每个组可以自由勾选包含哪些「机场订阅」和「手动节点」。
- 专属连结: 每个订阅组都会生成一条独立的订阅连结,档名也会自动使用你的分组名称,分享和管理都极为清晰方便。
- 全选/全不选: 在编辑分组时,可以一键选择或取消选择所有订阅和节点,操作便捷。
订阅与节点分离管理
- 我们将可线上更新的「机场订阅」和你手动新增的「单个节点」作为两种不同实体进行独立管理,逻辑清晰,互不干扰。
智慧化的管理体验
- 批量汇入: 一键贴上多个订阅连结或节点连结,系统会自动分类,分别存入「订阅」和「手动节点」列表。
- 一键排序: 对大量手动节点感到头痛?一键即可按照地区(如 HK, TW, SG, US 等)自动排序。
- 手动拖曳排序: 无论是机场订阅还是手动节点,都可以直接拖曳排序,调整其在最终订阅档中的顺序。
- 流量与到期时间显示: 在订阅卡片上清晰地显示机场的已用/总流量以及订阅到期时间,并以不同颜色高亮提醒。
- 自动获取节点资讯: 新增订阅或节点时,系统会自动从连结中提取名称。
精致的 UI/UX
- 支援明亮/暗黑模式,并能跟随系统自动切换,提供舒适的视觉体验。
- 带有「磨砂玻璃」质感的现代化卡片设计,风格统一。
- 对长列表(订阅和手动节点)提供分页功能,保证大量资料下的性能和可用性。
- 完善的交互逻辑,如“你有未保存的变更”提示、“放弃更改”功能、模态框编辑、以及各种操作的载入状态提示,体验流畅。
强大且易用的订阅连结生成
- 一个面板,满足所有需求: 在右侧的「生成订阅连结」面板中,你可以一步完成“选择内容(分组或全部)”和“选择格式”。
- 自适应连结: 提供一条通用连结,可智慧识别客户端类型 (Clash, Sing-Box 等) 并下发对应配置。
- 多格式支援: 为 Clash, Sing-Box, Surge, Loon, Base64 等主流客户端和格式提供专属订阅连结。
安全与客製化
- 密码保护: 管理介面由你自订的管理员密码进行保护,确保你的数据安全。
- 高度可客製化: 在设定中,你可以自订输出档名、
subconverter
位址、TG 推播等多种选项。 - 双重存储支持: 支持 Cloudflare KV 和 D1 数据库两种存储方式,可根据需求自由选择。
D1 数据库支持
- 解决写入限制: D1 数据库没有 KV 的写入频率限制,适合频繁更新的场景。
- 一键数据迁移: 内置迁移工具,可将现有 KV 数据无缝迁移到 D1。
- 智能存储选择: 在设置中可以选择使用 KV 存储(默认)或 D1 数据库。
- 性能优化: 针对不同存储类型进行了专门优化,确保最佳性能。
技术栈
- 前端: Vue 3 + Vite + Tailwind CSS,带来现代化、响应迅速的用户界面。
- 后端: Cloudflare Pages Functions,实现无服务器、全球分布的后端逻辑。
- 资料储存: Cloudflare KV + D1 数据库(双重支持),提供灵活、高效的数据存储方案。
部署指南
本项目天生为 Cloudflare Pages 设计,可以一键部署,享受全球 CDN 加速和无服务器的便利。
1. Fork 本仓库
首先打开 https://github.com/imzyb/MiSub 点击项目页面右上角 Star(点个星星!) 然后点击 Fork 按钮,将此项目复制到你自己的 GitHub 仓库中。
2. 创建 Cloudflare Pages 项目
- 登录 Cloudflare 控制台,进入 Workers & Pages。
- 选择“创建应用程式” -> “Pages” -> “导入现有 Git 存储库”。
- 选择你刚刚 Fork 的仓库。
- 在 “构建设置和部署” 页面,构建设定如下:
- 框架预设:
Vue
(选择后,下方自动填写) - 构建命令:
npm run build
- 构建输出目录:
dist
- 点击“保存并部署”。
- 框架预设:
3. 绑定存储资源
存储类型选择指南
MiSub 提供 Cloudflare KV 和 D1 数据库两种存储方案,你可以根据自己的需求灵活选择:
特性 | KV 存储 | D1 数据库 |
---|---|---|
写入限制 | 有限制(1000次/天) | 无限制 |
查询速度 | 极快 | 快 |
适用场景 | 读多写少、配置简单 | 频繁更新、数据量大 |
配置复杂度 | 简单 | 中等 |
推荐使用 | 轻度使用、初次尝试 | 重度使用、追求无忧体验 |
如何选择:
- 新用户: 建议直接配置 D1 数据库,避免后续遇到写入限制,省心无忧。
- 现有用户: 如果遇到 KV 写入限制,可使用内置迁移工具迁移到 D1,提升使用体验。
- 轻度使用: 如果你不频繁更新订阅和节点,KV 存储完全够用,且配置更为简单。
- 重度使用: D1 数据库是最佳选择,提供无写入限制的流畅体验,适合管理大量订阅和节点。
3.1 绑定 KV 命名空间(必需)
在项目创建完成后,首先去创建一个你自己的 KV 命名空间。
创建完成,进入该项目的“设置” -> “绑定” -> “KV 命名空间”。
变数名称 (Variable name):
MISUB_KV
KV 命名空间 (KV namespace): 选择刚创建的 KV 命名空间。
3.2 绑定 D1 数据库(可选,推荐)
如果你希望使用 D1 数据库来避免 KV 写入限制,请按以下步骤操作:
创建 D1 数据库:
- 创建 D1 数据库,名称随意,点击创建。
创建数据库表结构:
- 可以看到 你的数据库已成功创建! ,我们点击右上角的 Explore Data
- 来到 D1 数据库的 Query 界面,手动执行
schema.sql
中的 SQL 语句,原地址:https://github.com/imzyb/MiSub/blob/main/schema.sql 可以不用看原地址,我下面贴出来。 - 创建第一个表,粘贴到 Query 编辑框中,然后点击蓝色 RUN 按钮。你应该能看到 左侧出现了一个 subscriptions 表,如下图,依次执行不在贴图。
1
2
3
4
5
6CREATE TABLE IF NOT EXISTS subscriptions (
id TEXT PRIMARY KEY,
data TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
); - 创建第二个表,清空 Query 编辑框 的内容,执行下方所有的代码。
1
2
3
4
5
6CREATE TABLE IF NOT EXISTS profiles (
id TEXT PRIMARY KEY,
data TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
); - 创建第三个表,清空 Query 编辑框 的内容,执行下方所有的代码。
1
2
3
4
5
6CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
); - 然后看左侧列表。 三张都齐了,最后,清空 Query 编辑框 的内容,执行下方所有的代码。
1
2
3CREATE INDEX IF NOT EXISTS idx_subscriptions_updated_at ON subscriptions(updated_at);
CREATE INDEX IF NOT EXISTS idx_profiles_updated_at ON profiles(updated_at);
CREATE INDEX IF NOT EXISTS idx_settings_updated_at ON settings(updated_at); - 这样你的 D1 数据库 就成功创建完成。
在项目设定中绑定 D1 数据库:
- 进入项目的”设置” -> “绑定” -> “添加” -> “D1 数据库”
- 变数名称 (Variable name):
MISUB_DB
- D1 数据库: 选择刚创建的数据库
4. 设定环境变数
在项目的“设定” -> “环境变数”中,添加以下两个生产环境变数:
ADMIN_PASSWORD
- 值: 设定一个你自己的管理员登录密码。
- 值: 设定一个你自己的管理员登录密码。
COOKIE_SECRET
- 值: 设定一个用于加密 Cookie 的、足够长且随机的字串(例如,你可以使用密码产生器生成一个64位的随机字串)。随机密码生成器
- 值: 设定一个用于加密 Cookie 的、足够长且随机的字串(例如,你可以使用密码产生器生成一个64位的随机字串)。随机密码生成器
5. 部署完成!
完成以上设定后,回到“部署”选项卡,重新部署一次你的项目,使环境变量设置生效。现在,你的 MiSub 就可以通过 Cloudflare 提供所提供的域名访问了!你也可以自行设置自定义域名,更好记。
简单使用
部署完成后,首要任务是进行全局设置。请打开你部署的 MiSub 项目地址,使用密码登录,然后点击右上角的“设置”按钮。
请务必先配置此处,因为这里的设置(如默认订阅格式、后端地址等)是所有功能的基石,并将作为最高优先级,被所有订阅组和订阅链接默认采用。
自定义订阅Token、订阅组分享Token:
- 简单来说,它就是让你给订阅链接自定义一个。 专属的、好记的“密码”或“名字” ,订阅组分享Token:比如,你给朋友一个链接。如果哪天不想让他用了,/zrfme/py 只需在后台改掉这个,这个名字为朋友,他手里的订阅链接就立刻失效了,而你自己的其他链接完全不受影响。
SubConverter后端地址:
- 后端地址默认是使用的肥羊的后端,我们可以自行设置一个 订阅转换前端后端 网站收集 这里的,都可以进行设置。你也可以使用我维护的 subapi.zrfme.com
数据迁移:
- 切换为 D1数据库 。(注意: 数据迁移是单向的,迁移后建议不要再切换回 KV 存储,以免数据不一致。)
- 配置 D1 数据库(参考上面的步骤 3.2,确保 D1 数据库已创建并绑定)。
- 登录管理界面,进入”设置”页面。
- 点击 迁移数据到 D1 数据 按钮。
- 确认迁移,系统会自动将数据从 KV 迁移到 D1。
- 迁移完成后,存储类型会自动切换为 D1 数据库。
Telegram Bot:
- 设置成功后,每当 MiSub 自动或手动更新你的订阅时,它都会通过你自己创建的 Telegram 机器人,实时向你发送一条通知消息,你无需登录任何网站,只需看一眼 Telegram 消息,就能对自己的订阅状态了如指掌。
第一步:创建机器人并获取 Token
- 在 Telegram 中,搜索
@BotFather
并开始对话(这是官方用来创建和管理机器人的机器人)。 - 发送指令
/newbot
给它。 - 按照提示,依次为你的机器人取一个名字(例如
我的订阅助手
)和一个用户名(必须以bot
结尾,例如zrfsub_bot
)。 - 创建成功后,
@BotFather
会发来一条包含 API Token 的消息。它是一长串字符,请完整复制下来,并且私聊一下你刚创建的机器人,避免收不到消息。
第二步:获取你的 Chat ID
- 在 Telegram 中,加入群组 https://t.me/lsmoo 并开始对话。
- 发送指令
/id@capoo_lottery_bot
给它。 - 机器人会立刻回复你的个人信息,其中就包含了你的 ID。它通常是一串数字,请复制下来。
第三步:在 MiSub 中填写信息
- 回到 MiSub 的设置页面。
- 找到 Telegram Bot 相关的输入框。
- 将刚刚复制的 Bot Token 和 Chat ID 粘贴到对应的位置。
- 保存设置。
第四步:机器人订阅通知
- 随便使用一个软件,更新订阅地址,就可以收到订阅被访问的通知啦。这个还有流量使用提醒。
完结撒花!!!
- 感谢您的赞赏