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) {}) |