由于项目的需要,需要我搭建私有的tracker服务器。
虽然可以使用其他公共的tracker服务器,但当那些服务器关闭了后,让用户更新tracker服务器挺麻烦的。
我最开始选择的是用C写的OpenTracker,而不是nodejs写的bittorrent-tracker,以减少系统占用。但发现发现nginx向后端传递的X-Real-IP和X-Forwarded-For都不能被opentracker识别。因此在这里使用chihaya。以实现反向代理与IPV4-IPV6双栈服务。
安装bbr
按照下面的教程安装bbr
一键安装最新内核并开启 BBR 脚本
安装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=` 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使用自编译的nginx
nginx token鉴权防盗链
以下是我的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服务器
此处评论已关闭