The Bittorrent Tracker made in Elixir
👷♂️This project is a Work In Progress. While not ready for full industrial usage it does work.
There is a testing instance running at extracker.dahrkael.net:6969 with all current features enabled (Live statistics).
Features
Implementation Legend: 🔲 Not Yet 🔰 Partially ✅ Done ❌ Won't do
Important Features
✅ High performance (uses ALL the available cores, in-memory storage)
✅ Low memory usage (~200MB of RAM for each 1.000.000 peers)
✅ Zero setup (launch it and it just works)
Tracker-related BitTorrent Enhancement Proposals
Final and Active Process BEPs
✅ BEP 0: The BitTorrent Protocol Specification
Accepted BEPs
Draft BEPs
Deferred BEPs
❌ BEP 8: Tracker Peer Obfuscation
Other Features
✅ HTTPS support
✅ Database backups to disk
❌ WebTorrent
🔰 Infohash whitelist/blacklist
🔰 Peer management (interval enforcement, cleanup, banning, etc)
🔰 Metrics
🔰 GeoIP support (statistics, peer restrictions)
Feel free to propose features in the Issues
Setup
There are 3 main ways of running ExTracker currently
Straight from source code
For this method to work you need to have Erlang and Elixir installed on your system
Clone the repository: git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
If needed, modify the configuration in config/runtime.exs to fit your needs
run MIX_ENV=prod iex -S mix
From Releases
Currently there are no official releases built (soon™️). You can however make your own and deploy it where needed:
Clone the repository: git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
run MIX_ENV=prod mix release extracker for Linux or MIX_ENV=prod mix release extrackerw for Windows
for Linux or for Windows Find the release files inside the _build/prod/rel/extracker folder (if its a different machine make sure the OS and architecture is the same!)
Copy the folder to its final destination
If needed, modify the configuration in releases/{VERSION}/runtime.exs to fit your needs
Run bin/extracker start
Docker
For this method you can directly run the available docker image: docker run ghcr.io/dahrkael/extracker:latest
or use it as part of docker-compose. Theres an example compose file available.
Note Since modifying the runtime.exs file to tune the configuration inside the container is not easy you can also configure it using Environment Variables, see the example compose file for the complete list.
Copyright and license
Copyright (c) Dahrkael
Distributed under the terms of the Apache License, Version 2.0. Please refer to the LICENSE file in the repository root directory for details.