aquatic/crates/http
2023-10-24 18:36:56 +02:00
..
src ws: reload tls config on SIGUSR1 2023-10-24 18:36:56 +02:00
Cargo.toml Split README into separate files (#150) 2023-10-19 19:59:11 +02:00
README.md Split README into separate files (#150) 2023-10-19 19:59:11 +02:00

aquatic_http: high-performance open HTTP BitTorrent tracker

CI

High-performance open HTTP BitTorrent tracker for Linux 5.8 or later.

Features at a glance:

  • Multithreaded design for handling large amounts of traffic
  • All data is stored in-memory (no database needed)
  • IPv4 and IPv6 support
  • Supports forbidding/allowing info hashes
  • Prometheus metrics
  • Automated CI testing of full file transfers

Performance

HTTP BitTorrent tracker throughput comparison

More benchmark details are available here.

Usage

Compiling

  • Install Rust with rustup (latest stable release is recommended)
  • Install cmake with your package manager (e.g., apt-get install cmake)
  • Clone this git repository and enter its root directory
  • Build the application:
# Recommended: tell Rust to enable support for all SIMD extensions present on
# current CPU except for those relating to AVX-512. (If you run a processor
# that doesn't clock down when using AVX-512, you can enable those instructions
# too.)
. ./scripts/env-native-cpu-without-avx-512

cargo build --release -p aquatic_http

Configuring

Generate the configuration file:

./target/release/aquatic_http -p > "aquatic-http-config.toml"

Make necessary adjustments to the file. You will likely want to adjust address (listening address) under the network section.

aquatic_http only runs over TLS, so configuring certificate and private key files is required.

Running behind a reverse proxy is currently not supported due to the difficulties of determining the originating IP address without knowing the exact setup.

Running

Make sure locked memory limits are sufficient:

  • If you're using a systemd service file, add LimitMEMLOCK=65536000 to it
  • Otherwise, add the following lines to /etc/security/limits.conf, and then log out and back in:
*    hard    memlock    65536
*    soft    memlock    65536

Once done, start the application:

./target/release/aquatic_http -c "aquatic-http-config.toml"

If your server is pointed to by domain example.com and you configured the tracker to run on port 3000, people can now use it by adding the URL https://example.com:3000/announce to their torrent files or magnet links.

Load testing

A load test application is available. It supports generation and loading of configuration files in a similar manner to the tracker application.

After starting the tracker, run the load tester:

./scripts/run-load-test-http.sh

Details

Implements:

  • BEP 003: HTTP BitTorrent protocol (more details). Exceptions:
    • Only runs over TLS
    • Doesn't track the number of torrent downloads (0 is always sent)
    • Only compact responses are supported
  • BEP 023: Compact HTTP responses
  • BEP 007: IPv6 support
  • BEP 048: HTTP scrape support. Notes:
    • Doesn't allow full scrapes, i.e. of all registered info hashes

aquatic_http has not been tested as much as aquatic_udp, but likely works fine in production.

Copyright (c) 2020-2023 Joakim Frostegård

Distributed under the terms of the Apache 2.0 license. Please refer to the LICENSE file in the repository root directory for details.