Skip to content

Deploying bittorrent-tracker

Introduction

bittorrent-tracker is a simple, robust, and performant BitTorrent tracker written in JavaScript. It supports both HTTP and WebSocket protocols, making it suitable for both traditional torrent clients and browser-based WebTorrent applications.

Developed by the WebTorrent team, bittorrent-tracker is designed to be easy to deploy and configure while handling large numbers of concurrent connections efficiently.

Key highlights of bittorrent-tracker:

  • Multi-Protocol Support: HTTP, UDP, and WebSocket tracker protocols
  • WebTorrent Compatible: Supports browser-based torrenting
  • High Performance: Written in Node.js for efficient async handling
  • Low Resource Usage: Minimal memory and CPU requirements
  • Statistics API: Monitor tracker activity and stats
  • Filtering: Whitelist or blacklist specific torrents
  • Docker Ready: Easy containerized deployment
  • Open Source: MIT licensed and actively maintained
  • Horizontal Scaling: Supports load balancing

This guide walks through deploying bittorrent-tracker on Klutch.sh using Docker.

Why Deploy bittorrent-tracker on Klutch.sh

Deploying bittorrent-tracker on Klutch.sh provides several advantages:

Private Distribution: Create private trackers for internal file distribution.

WebTorrent Support: Enable browser-based P2P file sharing.

Always Available: 24/7 tracker availability for consistent swarm connectivity.

Easy Management: Simple deployment with minimal configuration.

HTTPS/WSS Support: Secure WebSocket connections with automatic SSL.

Scalable: Handle growing swarms with adequate resources.

Prerequisites

Before deploying bittorrent-tracker on Klutch.sh, ensure you have:

  • A Klutch.sh account
  • A GitHub account with a repository for your configuration
  • Basic understanding of Docker and containerization
  • Familiarity with BitTorrent concepts

Understanding BitTorrent Tracker Architecture

A BitTorrent tracker serves as a coordination point:

Announce Endpoint: Clients register and discover peers.

Scrape Endpoint: Provides swarm statistics.

WebSocket Server: Real-time peer coordination for WebTorrent.

Stats API: Monitoring and administration endpoint.

Preparing Your Repository

Create a GitHub repository for your tracker deployment.

Repository Structure

bittorrent-tracker-deploy/
├── Dockerfile
├── config.json
└── .dockerignore

Creating the Dockerfile

Create a Dockerfile for bittorrent-tracker:

FROM node:18-alpine
# Create app directory
WORKDIR /app
# Install bittorrent-tracker
RUN npm install -g bittorrent-tracker
# Configuration
ENV TRACKER_PORT=8000
ENV TRACKER_STATS=true
ENV TRACKER_TRUST_PROXY=true
# HTTP tracker port
EXPOSE 8000
# WebSocket port (same as HTTP in this setup)
# Start tracker
CMD ["bittorrent-tracker", "--port", "8000", "--stats", "--trust-proxy"]

Configuration File

Create config.json for advanced settings:

{
"http": {
"port": 8000
},
"udp": {
"port": 8000
},
"ws": {
"port": 8000
},
"stats": true,
"trustProxy": true,
"filter": null
}

Environment Variables Reference

VariableRequiredDefaultDescription
TRACKER_PORTNo8000Port for all protocols
TRACKER_STATSNotrueEnable statistics endpoint
TRACKER_TRUST_PROXYNofalseTrust X-Forwarded headers
TRACKER_INTERVALNo600Announce interval in seconds

Deploying bittorrent-tracker on Klutch.sh

    Push Your Repository to GitHub

    Initialize and push your configuration to GitHub.

    Create a New Project on Klutch.sh

    Navigate to the Klutch.sh dashboard and create a new project named “bittorrent-tracker” or “tracker”.

    Create a New App

    Within your project, create a new app and connect your GitHub repository.

    Configure HTTP Traffic

    Set up HTTP for the tracker and WebSocket:

    • Select HTTP as the traffic type
    • Set the internal port to 8000

    This handles HTTP tracker announces and WebSocket connections.

    Deploy Your Application

    Click Deploy to build and start the tracker.

    Access Your Tracker

    Once deployment completes, your tracker is available at:

    • HTTP: https://your-app-name.klutch.sh/announce
    • WebSocket: wss://your-app-name.klutch.sh
    • Stats: https://your-app-name.klutch.sh/stats

Using Your Tracker

Creating Torrents

Create torrents that use your tracker:

  1. Use a torrent creation tool
  2. Set tracker URL: https://your-tracker.klutch.sh/announce
  3. Create and distribute the .torrent file

WebTorrent Integration

Use in WebTorrent applications:

const WebTorrent = require('webtorrent')
const client = new WebTorrent()
client.add(torrentId, {
announce: ['wss://your-tracker.klutch.sh']
}, (torrent) => {
console.log('Torrent ready:', torrent.name)
})

Tracker URL Formats

Different protocols use different URLs:

  • HTTP: https://your-tracker.klutch.sh/announce
  • WebSocket: wss://your-tracker.klutch.sh

Checking Statistics

View tracker stats:

Terminal window
curl https://your-tracker.klutch.sh/stats

Returns:

{
"torrents": 10,
"activeTorrents": 5,
"peersAll": 150,
"peersSeederOnly": 50,
"peersLeecherOnly": 100,
"clients": {
"webtorrent": 75,
"transmission": 50,
"other": 25
}
}

Advanced Configuration

Torrent Filtering

Implement whitelist or blacklist:

// Custom filter function
function filter(infoHash, params, cb) {
const allowed = ['abc123...', 'def456...']
if (allowed.includes(infoHash)) {
cb(null)
} else {
cb(new Error('Torrent not allowed'))
}
}

Announce Intervals

Configure client behavior:

  • interval: How often clients should announce
  • min_interval: Minimum announce interval

Statistics Endpoint

Configure stats access:

  • Enable/disable with --stats
  • Add authentication if needed
  • Monitor for capacity planning

Security Considerations

Private Trackers

For private trackers:

  • Implement passkey authentication
  • Filter allowed info hashes
  • Monitor for abuse

Rate Limiting

Protect against abuse:

  • Configure announce intervals
  • Implement IP-based limits
  • Monitor traffic patterns

Firewall Configuration

Restrict access if needed:

  • Whitelist allowed IP ranges
  • Block known bad actors
  • Monitor connections

Troubleshooting Common Issues

Clients Not Connecting

Solutions:

  • Verify tracker URL is correct
  • Check protocol matches (HTTP vs UDP)
  • Confirm port is accessible

No Peers Found

Solutions:

  • Verify torrent info hash matches
  • Wait for other clients to announce
  • Check scrape endpoint for swarm status

WebSocket Connection Fails

Solutions:

  • Ensure WSS URL is correct
  • Check SSL certificate is valid
  • Verify browser supports WebSocket

Additional Resources

Conclusion

Deploying bittorrent-tracker on Klutch.sh gives you a reliable, self-hosted BitTorrent tracker for private file distribution or WebTorrent applications. With multi-protocol support and minimal resource requirements, it’s an ideal solution for teams and organizations needing P2P file sharing capabilities.