开源一个用 Golang 写的 BT Tracker
小试牛刀
在上一篇博文 二零二二之新春快乐 中,我将「重拾 Go」作为 2022 的一项新年挑战。
返乡过年的路上,我在想该拿一个什么项目来试试水比较好呢?
然后想到,之前有折腾过 用 Golang 写一个 BT 服务,核心代码已经开发完毕,稍加整理应该可以出一个 MVP 版本。
于是,就有了 HunterXuan/bt 这个开源项目、公开的 BT 服务,以及这篇文章。
简单介绍
这个项目的核心功能分为数据面板和伺服两大块,在设计和实现上尽量简单。
伺服(Tracker)
本项目只使用了 torrents
、peers
两张数据表,分别用于存储种子数据、同伴(上传者/下载者)。
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 列表中即可。