Skip to content

Instantly share code, notes, and snippets.

@vijayanandnandam
Last active February 4, 2020 07:32
Show Gist options
  • Save vijayanandnandam/8e885aba70de6870198bcad0f9396416 to your computer and use it in GitHub Desktop.
Save vijayanandnandam/8e885aba70de6870198bcad0f9396416 to your computer and use it in GitHub Desktop.
Bittorrent Websocket / WebRtc tracker

Install deps

run npm i

Run tracker

node index.js # starts the tracker on port 8000

Congfigure nginx for proxy

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) {})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment