由于项目的需要,需要我搭建私有的tracker服务器。

虽然可以使用其他公共的tracker服务器,但当那些服务器关闭了后,让用户更新tracker服务器挺麻烦的。
我最开始选择的是用C写的OpenTracker,而不是nodejs写的bittorrent-tracker,以减少系统占用。但发现发现nginx向后端传递的X-Real-IP和X-Forwarded-For都不能被opentracker识别。因此在这里使用chihaya。以实现反向代理与IPV4-IPV6双栈服务。

安装bbr

按照下面的教程安装bbr

以下安装内容我会结合https://github.com/tamersunion/tracker进行讲解。

安装chihaya

配置golang环境

由于chihaya是用Go写的,因此编译的时候系统需要配置Go环境。
首先下载golang文件,并解压

wget https://golang.org/dl/go1.16.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.4.linux-amd64.tar.gz

编辑文件/etc/profile,在最后添加

export PATH=$PATH:/usr/local/go/bin

然后运行命令 source /etc/profile 使配置生效。
使用go version查看安装的版本,并确定安装完成

[root@tracker-1 ~]# go version
go version go1.16.4 linux/amd64

编译chihaya

编译安装还是很简单的

git clone https://github.com/chihaya/chihaya.git
cd chihaya
go build ./cmd/chihaya

执行完成就编译完成了,获得一个名为chihaya可执行的二进制文件。

安装

为了后面的反向代理,因此需要做一点特殊的配置。下面的内容需要结合appnode使用。
创建文件夹:

/www/tracker/chihaya/

将二进制文件复制到/www/tracker/chihaya/

cp chihaya /www/tracker/chihaya/chihaya
chmod +x /www/tracker/chihaya/chihaya

下载配置文件,并保存到/www/tracker/chihaya/中。

sudo wget https://raw.githubusercontent.com/chihaya/chihaya/master/dist/example_config.yaml -O /www/tracker/chihaya/chihaya.yaml

打开并根据需要编辑其中的配置选项,相关配置都有英文说明。

sudo vim /www/tracker/chihaya/chihaya.yaml

主要是要将udp的那部分删掉。
默认就支持ipv6+ipv4双栈访问,因此不需要修改其他的内容。

因为我用的Oracle有安全组,因此我会使用安全组禁止外部通过6969端口访问。

配置

chmod +x /www/tracker/chihaya/chihaya
ln -s /www/tracker/chihaya/chihaya /usr/bin/chihaya
mkdir /etc/chihaya
ln -s /www/tracker/chihaya/chihaya.yaml /etc/chihaya/chihaya.yaml
ln -s /www/tracker/chihaya/chihaya.service /lib/systemd/system/chihaya.service

启动,并设置开机启动

systemctl start chihaya
systemctl enable chihaya

使用

执行如下命令,可以检查Chihaya是否正常

chihaya --help

可以netstat -apn | grep 6969用查看进程使用的端口是否正常使用。
可以将下面的内容填入tracker列表呢

http://[2603:c022:8000:8228:afac:81a1:1111:1118]:6969/announce
http://132.226.111.143:6969/announce

可以通过

http://132.226.111.143:6880/debug/pprof/
http://132.226.111.143:6880/metrics

查看tracker服务器的状态。

Prometheus

在这里,我使用Prometheus将chihaya的开源监控系统/metrics数据内容转化成可视化。

安装

使用官方教程,将文件安装到目录/usr/local/prometheus

配置文件

以下配置文件会随着chihaya版本的更新进行变换,建议参考官方配置文件进行配置。
编辑配置文件:

vim /usr/local/prometheus/prometheus.yml

输入以下内容:

global:
  scrape_interval:     5s
  evaluation_interval: 5s

# A scrape configuration containing exactly one endpoint to scrape:
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'local-chihaya' # you can name this however you want
    scrape_interval: 5s # optionally override the global scrape_interval
    static_configs:
      - targets: ['localhost:6880'] # provide the address of chihaya's prometheus endpoin

管理启动方式

新增开机启动文件:

sudo vim /lib/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.external-url=prometheus

[Install]
WantedBy=multi-user.target

使用

systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus

进行配置

Grafana

使用Grafana可以将prometheus的统计信息通过iframe嵌入到网页中。

安装

使用官方教程安装适合对应系统的版本即可,没有版本的限制。

配置

编辑配置文件,主要是启用匿名账号访问。还有修改成对应的域名,还有反向代理后的域名。

sudo vim /etc/grafana/grafana.ini

# The public facing domain name used to access grafana from a browser
domain = tracker_domain

# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana

[auth.anonymous]
# enable anonymous access
enabled = true

# specify organization name that should be used for unauthenticated users
org_name = Main Org.

# specify role for unauthenticated users
org_role = Viewer

其中,root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana可以参考root_url = https://tracker.rmrts.com:443/grafana进行输入。

启动

使用以下方式进行启动与管理。

systemctl enable grafana-server
systemctl start grafana-server
systemctl status grafana-server

填加prometheus数据

反代

由于OpenTracker在实际使用时太麻烦了,因此我选择采用http的方式来提供tracker服务,配合nginx的token来实现普通的鉴权,减少被脚本扫描使用的可能。同时打开UDP,定向指定部分ip允许访问。

安装nginx

正常安装appnode即可,然后按照这个方式安装nginx。


以下是我的appnode的配置内容:

server {
    listen                     80;
    listen                     [::]:80;
    listen                     443 ssl http2;
    listen                     [::]:443 ssl http2;
    server_name                tracker.rmrts.com;
    root                       /www/tracker;
    index                      index.html index.htm index.php;
    client_header_buffer_size  8k;
    client_max_body_size       68m;
    ssl_certificate            /opt/appnode/agent/data/ssl/upload-20210519230935/1621436989.crt;
    ssl_certificate_key        /opt/appnode/agent/data/ssl/upload-20210519230935/upload-20210519230935.key;
    ssl_ciphers                ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers  on;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache          shared:SSL:5m;
    ssl_session_timeout        5m;
    add_header                 Access-Control-Allow-Origin *;

    if ($scheme = http) {
        return  301 https://$host$request_uri;
    }

    access_log                 off;

    location / {
        if ($args ~ info_hash) {
            rewrite  ^ https://$host/announce permanent;
        }
    }

    location /announce {
        add_header        X-Cache $upstream_cache_status;
        add_header        Cache-Control no-cache;
        access_log        off;
        proxy_pass        http://127.0.0.1:6969;
        proxy_set_header  X-Real-IP $remote_addr;
    }

    location /scrape {
        proxy_pass  http://127.0.0.1:6969;
        add_header  X-Cache $upstream_cache_status;
        add_header  Cache-Control no-cache;
        access_log  off;
    }

    location /metrics {
        proxy_pass  http://127.0.0.1:6880/;
        add_header  X-Cache $upstream_cache_status;
        add_header  Cache-Control no-cache;
    }

    location /grafana {
        proxy_pass         http://127.0.0.1:3000;
        rewrite            ^/grafana/(.*) /$1 break;
        proxy_set_header   Host $host;
        add_header         X-Cache $upstream_cache_status;
        add_header         Cache-Control no-cache;
        proxy_hide_header  X-Frame-Options;
    }

    location /prometheus {
        proxy_pass        http://127.0.0.1:9090;
        proxy_set_header  Host $host;
        add_header        X-Cache $upstream_cache_status;
        add_header        Cache-Control no-cache;
    }

    location /chihaya {
        deny  all;
    }
}

私有化配置

由于tracker使用时的特性。因此我选择通过nginx的token插件作为密钥。


参考:
centos7.8 安装golang(完整版)
golang
CentOS 8 手动安装 Go 1.16 版本
golang第二课---go语言介绍及版本查看
chihaya/chihaya
自建Chihaya Tracker服务器

最后修改:2021 年 06 月 28 日
如果觉得我的文章对你有用,请随意赞赏