SkyHook Logo

高速远程中继下载与
Hook 驱动的自动化转存流水线

本地一键投送,云端高速吸纳,流水线自动归档,多渠道即时知晓。
为 VPS 下载中继打造:内置 Aria2 RPC/CLI、yt-dlp、Wget、Curl 及 夸克网盘转存 (diskcli),零外部数据库依赖,断电重启无缝自愈。

terminal — client & remote
skyhook v1.0.0

# 1. 登录中继 VPS 保存凭证(一次性保存,后续免传服务器与密钥)

$ skyhook login -s "http://YOUR_VPS_IP:8080" -t "your-secret-token"

✅ 凭证已安全保存至 ~/.skyhook (0600权限)

# 2. 本地一键投送 HTTP 链接 / 磁力链接 / 种子文件 / 流媒体视频

$ skyhook https://releases.ubuntu.com/24.04/ubuntu-24.04.iso

$ skyhook "magnet:?xt=urn:btih:..."

$ skyhook -a quark_backup "https://www.youtube.com/watch?v=..."

🚀 已提交至云端中继: 智能调度引擎 -> 下载完成 -> 触发 Hook 自动转存夸克 -> Telegram 多端推送完成通知

全面完备的核心特性矩阵

拒绝繁琐与脆弱,专为低资源占用、高并发中继与无人值守流水线而生。

多协议下载引擎池

配置文件驱动驱动池与优先级(0-99):内置 Aria2 RPC(BT/磁链)、Aria2 CLI Fork(多线程HTTP)、yt-dlp(流媒体视频)、Wget、Curl 与纯 Go Native 保底引擎。

内置夸克网盘 CLI (diskcli)

官方镜像集成作者开源的 diskcli,支持在下载完成后无缝触发命令行将文件自动极速上传至夸克网盘,转存成功后统一清理本地空间。

全生命周期 Hook 系统

首等公民级 Hook:on_create_failed(创建失败告警)、on_start(启动提醒)、on_progress(巡检进度广播)、on_complete(完成转存)、on_error(异常清理)。

多渠道广播通知矩阵

支持 Telegram Bot、企业微信、钉钉、飞书、Bark (iOS) 与通用 Webhook 并行并发推送,自动适配各平台专属 Markdown 与卡片排版。

进程崩溃自愈与断点接管

免外挂 DB(采用原子临时文件落盘),进程重启或断电恢复时自动执行 RecoverAndResume:离线完成的任务自动执行流水线,中断的任务自动断点续传(HTTP Range 206 / Aria2 continue)。

磁盘安全预留与防爆盘熔断

通过 OS 原生 Statfs 实时监控 Bavail 剩余块。任务提交时预检拦截(返回 HTTP 507),下载巡检时若可用空间低于预留安全线立即安全熔断中止,杜绝爆盘死机。

自动化流水线

全生命周期 Hook 与动作流水线

从入库预检、实时巡检、落盘完成到多阶段转存与磁盘擦除,赋予每一个下载任务完整的自主生命周期控制能力。

01 / 预检拦截

on_create_failed

空间不足 (HTTP 507)、URL/种子解析失败时立即触发,向通知渠道告警。

02 / 启动握手

on_start

成功调度下载引擎(Aria2/yt-dlp 等)并建立连接时触发,记录启动日志。

03 / 巡检监控

on_progress

巡检看门狗每 2 秒广播即时速度、进度百分比及落盘体积至监控端。

04 / 完成转存

on_complete

文件完整落盘校验后执行串行流水线命令:夸克网盘转存、转码压缩、OSS 备份。

05 / 熔断异常

on_error

下载错误、超时取消 (Watchdog) 或动态空间防爆盘熔断时触发清理与告警。

企业级容错与空间保护机制

  • clean_at_end: true

    流水线全部命令顺利完成后自动清理本地 VPS 下载源文件,实现“零磁盘留存”云中转。

  • continue_on_error: true

    命令级容错穿透。单个转存渠道(如网盘故障)异常不阻断后续其他云存储备份与通知。

  • retries: 3 & retry_interval: 10s

    命令执行故障智能自愈,网络抖动时自动按间隔重试,避免瞬时网络异常导致任务流产。

  • timeout: 45m

    命令看门狗超时保护,防止转存或外部转码脚本死锁僵死,保障系统调度稳定性。

命令与通知动态模板变量

在 Hook 命令 run 与通知模板中可直接引用上下文宏变量:

{path}

本地落盘完整绝对路径

{dir}

目标下载存储目录

{url}

原始下载链接 / 磁力链接

{id} / {gid}

任务全局唯一调度编号

{downloader}

调度的引擎 (如 aria2_rpc)

{error}

错误异常信息详细描述

{speed}

实时瞬时速率 (MB/s)

{progress}

当前下载进度百分比

config.yaml — 生产环境流水线配置范例
actions: multi_backup & quark_backup
# 定义转存流水线动作
actions:
  quark_pipeline:
    name: "夸克网盘自动转存并清理流水线"
    clean_at_end: true # 转存成功后自动清理 VPS 本地文件,永不爆盘!

    hooks:
      on_start:
        notify: true # 启动时向 Telegram/飞书/企业微信发送广播

      on_progress:
        notify: true # 周期性上报瞬时下载速率与百分比

      on_complete:
        notify: true
        commands:
          # 1. 使用容器内置 diskcli 极速上传至夸克网盘
          - name: "上传至夸克网盘"
            run: "diskcli upload \"{path}\" /remote/downloads/"
            timeout: 1h
            retries: 3
            retry_interval: 10s
            continue_on_error: true # 即使夸克异常,不阻断后续流程

          # 2. 同步上传至阿里云 OSS 灾备归档
          - name: "同步至阿里云 OSS"
            run: "ossutil cp -r \"{path}\" oss://backup-bucket/downloads/"
            timeout: 30m
            retries: 2

      on_error:
        notify: true # 失败告警并自动记录异常日志
        commands:
          - name: "错误告警落盘"
            run: "echo \"[ERROR] {id} failed: {error}\" >> /data/config/error.log"
实时感知

多渠道并发广播通知矩阵

原生支持主流办公与个人通讯平台,零延迟多端广播。全异步并发分发,绝不阻断核心下载进程。

Telegram Bot

type: "telegram"

支持群组 Channel 或个人私聊机器人推送,原生 Markdown 排版,支持任务直链跳转与状态 Emoji。

企业微信 (WeCom)

type: "wecom"

企业微信群自定义机器人,适配企业微信专属 Markdown 规范与状态颜色标签(如绿色成功、红色告警)。

钉钉 (DingTalk)

type: "dingtalk"

支持钉钉群机器人 Markdown 卡片消息,内置安全签名加签(Sign Secret)与关键词安全校验。

飞书 (Feishu)

type: "feishu"

支持飞书群自定义机器人,采用飞书富文本 Post 结构化消息排版,适配团队协作工作流看板。

Bark (iOS 原生推送)

type: "bark"

针对 iPhone/iPad 设备的纯原生即时静默/声音推送,支持分组归类(group)、角标以及自定义铃声。

Gotify (自建推送)

type: "gotify"

开源私有化推送服务,支持 Android/Web 客户端直连,原生 Markdown 富文本渲染与故障自动升权。

通用 HTTP Webhook

type: "webhook"

向自建系统、Node-RED、Home Assistant 或中间件发送标准 JSON 负载,包含完整任务元数据与时间戳。

推送效果即时预览 SUCCESS
🛸 SkyHook 任务下载完成通知 刚刚

任务编号:fa126bb5882d

驱动引擎:aria2_rpc (BT/磁力)

目标文件:ubuntu-24.04-desktop-amd64.iso

文件大小:5.82 GB

平均速率:38.4 MB/s

执行流水:quark_pipeline (已转存至夸克网盘)

SkyHook Notification Engine ✓ 本地磁盘已安全释放
config.yaml — notify 渠道列表 支持任意渠道增删与组合
notify:
  channels:
    # 1. Telegram Bot (群组或个人)
    - name: "运维推送群"
      type: "telegram"
      enabled: true
      bot_token: "123456789:ABCdefGh..."
      chat_id: "-1001234567890"

    # 2. 企业微信机器人
    - name: "团队工作群"
      type: "wecom"
      enabled: true
      url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=..."

    # 3. 钉钉群机器人 (支持签名加签)
    - name: "告警群-钉钉"
      type: "dingtalk"
      enabled: true
      url: "https://oapi.dingtalk.com/robot/send?access_token=..."

    # 4. Bark (iOS 手机直推)
    - name: "个人 iPhone"
      type: "bark"
      enabled: true
      url: "https://api.day.app/YOUR_BARK_KEY"

    # 5. Gotify (私有化推送服务)
    - name: "个人 Gotify"
      type: "gotify"
      enabled: true
      url: "https://gotify.example.com"
      token: "Axxxxxxxxxxxxxx"
      priority: 5
深度生态整合

内置夸克网盘转存 (diskcli)

官方 Docker 镜像直接内置作者开源的 phpgao/diskcli 夸克网盘 CLI,让小硬盘 VPS 变身为永不爆盘的无限云中转站。

环境变量自动授权

容器启动时只需传入 -e QUARK_COOKIE="...",启动脚本自动配置 /root/.diskcli/config,无需进入容器手动登录。

极速大文件分块上传

通过 diskcli upload "{path}" /remote/downloads/ 命令并发秒级上传,断点续传支持,大体积视频与镜像毫无压力。

中转完毕自动擦除

搭配流水线的 clean_at_end: true,网盘转存完成立即销毁 VPS 本地临时文件,20GB 磁盘也能中继 100GB 大文件。

优雅的面向接口分层架构

高内聚、低耦合,各个模块支持插拔与 Mock 单元测试。

┌────────────────────────────────────────────────────────────────────────┐
│                        HTTP RESTful API (:8080)                        │
│               [Token Auth Middleware]  [Global App Context]            │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │
    ┌───────────────────────────────┼────────────────────────────────┐
    ▼                               ▼                                ▼
┌──────────────────────┐   ┌──────────────────────┐   ┌──────────────────────┐
│ Downloader Interface │   │ Pipeline & Watcher   │   │  Notifier Interface  │
│  (Priority Registry) │   │ (Recovery & Timeout) │   │ (Concurrent Dispatch)│
└──────────┬───────────┘   └──────────┬───────────┘   └──────────┬───────────┘
           │                          │                          │
     ┌─────┴──────┐             ┌─────┴──────┐             ┌─────┴──────┐
     │ Aria2 RPC  │             │ Atomic     │             │ Telegram   │
     │ Aria2 CLI  │             │ TaskStore  │             │ 企业微信   │
     │ Wget       │             │ (.json)    │             │ 钉钉 / 飞书 │
     │ Curl       │             └────────────┘             │ Bark       │
     │ yt-dlp     │                   │                    │ Webhook    │
     │ Native Go  │             ┌─────┴──────┐             └────────────┘
     └────────────┘             │ diskcli    │
                                │ (夸克网盘)  │
                                └────────────┘

三分钟极速部署

选择您喜爱的方式一键启动 SkyHook。

推荐

方式 1:Docker 一键拉取运行 (预编译多架构镜像)

无需本地安装任何编译器与外部工具,直接拉取 GitHub 官方镜像:

docker run -d \
  --name skyhook \
  --restart unless-stopped \
  -p 8080:8080 \
  -p 6800:6800 \
  -e AUTH_TOKEN=your-secure-token \
  -e ENABLE_ARIA2_RPC=true \
  -e ARIA2_SECRET=your-aria2-token \
  -e QUARK_COOKIE="your_optional_quark_cookie" \
  -v $(pwd)/downloads:/data/downloads \
  -v $(pwd)/config:/data/config \
  ghcr.io/phpgao/skyhook:latest
编排

方式 2:使用 Docker Compose 一键启动

在克隆仓库后直接执行:

git clone https://github.com/phpgao/skyhook.git
cd skyhook/deploy
docker compose up -d
原生

方式 3:单一静态二进制原生运行

# 编译服务端与客户端
go build -o bin/skyhookd ./cmd/skyhookd
go build -o bin/skyhook ./cmd/skyhook

# 复制配置文件并启动
cp config.example.yaml config.yaml
./bin/skyhookd -c config.yaml

RESTful API 交互规范

简单标准,便于外部自动化系统、脚本或机器人集成。

端点 方法 鉴权 描述
/health GET 公开 健康检查接口,用于探测探针
/api/tasks POST Bearer Token 批量提交下载任务(支持普通 URL、Magnet 磁链、BT 种子)
/api/tasks GET Bearer Token 获取所有历史及正在运行的任务状态清单与进度
/api/tasks/:gid GET Bearer Token 精确查询指定任务 GID 的瞬时速度、百分比及落盘路径