run npm i
node index.js # starts the tracker on port 8000
After replacing {yourdomain.com} with actualy domain you can proxy requests to websocket
map $http_upgrade $connection_upgrade { | |
default upgrade; | |
'' close; | |
} | |
upstream websocket { | |
server 127.0.0.1:8000; | |
} | |
server { | |
listen 80; | |
listen 443 ssl http2; | |
server_name {yourdomain.com}; | |
ssl_certificate /etc/letsencrypt/live/{yourdomain.com}/fullchain.pem; | |
ssl_certificate_key /etc/letsencrypt/live/{yourdomain.com}/privkey.pem; | |
ssl_trusted_certificate /etc/letsencrypt/live/{yourdomain.com}/chain.pem; | |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; | |
ssl_prefer_server_ciphers on; | |
ssl_session_cache shared:SSL:120m; | |
ssl_buffer_size 4k; | |
ssl_session_timeout 180m; | |
add_header Strict-Transport-Security "max-age=31536000" always; | |
location / { | |
proxy_pass http://websocket; | |
proxy_http_version 1.1; | |
proxy_set_header Upgrade $http_upgrade; | |
proxy_set_header Connection $connection_upgrade; | |
proxy_read_timeout 86400s; | |
proxy_send_timeout 86400s; | |
} | |
} |
{ | |
"name": "tracker", | |
"version": "1.0.0", | |
"description": "", | |
"main": "tracker.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"author": "", | |
"license": "ISC", | |
"dependencies": { | |
"parse-torrent": "github:webtorrent/parse-torrent", | |
"webtorrent-hybrid": "github:webtorrent/webtorrent-hybrid" | |
}, | |
"devDependencies": { | |
"eslint": "^6.8.0", | |
"eslint-config-standard": "^14.1.0", | |
"eslint-plugin-import": "^2.20.0", | |
"eslint-plugin-node": "^11.0.0", | |
"eslint-plugin-promise": "^4.2.1", | |
"eslint-plugin-standard": "^4.0.1" | |
} | |
} |
const Server = require('bittorrent-tracker').Server | |
const server = new Server({ | |
udp: false, // enable udp server? [default=true] | |
http: false, // enable http server? [default=true] | |
ws: true, // enable websocket server? [default=true] | |
stats: true | |
}) | |
server.on('error', function (err) { | |
// fatal server error! | |
console.log(err.message) | |
}) | |
server.on('warning', function (err) { | |
// client sent bad data. probably not a problem, just a buggy client. | |
console.log(err.message) | |
}) | |
server.on('listening', function () { | |
// fired when all requested servers are listening | |
// console.log('listening on http port:' + server.http.address().port) | |
// console.log('listening on udp port:' + server.udp.address().port) | |
console.log('listening on ws port:' + JSON.stringify(server.ws.address())) | |
}) | |
// start tracker server listening! Use 0 to listen on a random free port. | |
server.listen(8000) | |
// listen for individual tracker messages from peers: | |
server.on('start', function (addr) { | |
console.log('got start message from ' + addr) | |
}) | |
server.on('complete', function (addr) {}) | |
server.on('update', function (addr) {}) | |
server.on('stop', function (addr) {}) |