开源一个用 Golang 写的 BT Tracker

小试牛刀

在上一篇博文 二零二二之新春快乐 中,我将「重拾 Go」作为 2022 的一项新年挑战。

返乡过年的路上,我在想该拿一个什么项目来试试水比较好呢?

然后想到,之前有折腾过 用 Golang 写一个 BT 服务,核心代码已经开发完毕,稍加整理应该可以出一个 MVP 版本。

于是,就有了 HunterXuan/bt 这个开源项目、公开的 BT 服务,以及这篇文章。

简单介绍

这个项目的核心功能分为数据面板和伺服两大块,在设计和实现上尽量简单。

伺服(Tracker)

本项目只使用了 torrentspeers两张数据表,分别用于存储种子数据、同伴(上传者/下载者)。

BT 下载的客户端会向伺服上报当前下载种子的 info_hash 值以及自身所使用的 IP/PORT,伺服在接收到请求后,查找 info_hash 对应的种子(如果不存在则新增),更新 peers 表中数据,同时将种子关联的其它同伴的连接信息返回。

数据面板

数据面板主要面向伺服的维护人员,主要包含种子(总数/活跃数/不活跃数)、同伴(总数/做种者/下载者)、流量(总流量/上传量/下载量)等几个关键指标信息,同时列出当前最热门(下载数最多)的部分种子信息。

如何部署

推荐使用 Docker 部署,对应的镜像为 hunterxuan/bt,需要设置以下几个环境变量:

  • APP_NAME:应用名称
  • APP_MODE:应用模式(dev 时会自动创建表)
  • APP_LISTEN_ADDR:应用监听地址,如 0.0.0.0:8888
  • DB_HOST:数据库地址
  • DB_PORT:数据库端口
  • DB_NAME:数据库名
  • DB_USER:数据库用户
  • DB_PASS:数据库密码
  • TZ:时区,默认是 Asia/Shanghai

拿来即用

目前服务还不稳定,谨慎使用

如果懒得部署,也可以直接使用我搭建的服务,将 http://bt.endpot.com/announce 添加到种子的 Tracker 列表中即可。