{"id":17024873,"url":"https://github.com/roardom/unit3d-announce","last_synced_at":"2026-03-10T04:31:16.409Z","repository":{"id":108699504,"uuid":"589330415","full_name":"Roardom/UNIT3D-Announce","owner":"Roardom","description":"High-performance private BitTorrent tracker compatible with UNIT3D tracker software","archived":false,"fork":false,"pushed_at":"2026-02-02T02:15:55.000Z","size":571,"stargazers_count":53,"open_issues_count":5,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-02-02T11:53:35.943Z","etag":null,"topics":["axum","bittorrent","bittorrent-tracker","high-performance","http","p2p","peer-to-peer","rust","torrent"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Roardom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-15T20:23:18.000Z","updated_at":"2026-02-02T02:15:58.000Z","dependencies_parsed_at":"2023-10-15T12:45:32.001Z","dependency_job_id":"31f65f8b-0a91-485b-adb2-1b41caaf3cea","html_url":"https://github.com/Roardom/UNIT3D-Announce","commit_stats":null,"previous_names":["roardom/unit3d-announce"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/Roardom/UNIT3D-Announce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roardom%2FUNIT3D-Announce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roardom%2FUNIT3D-Announce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roardom%2FUNIT3D-Announce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roardom%2FUNIT3D-Announce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Roardom","download_url":"https://codeload.github.com/Roardom/UNIT3D-Announce/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Roardom%2FUNIT3D-Announce/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30324386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T01:36:58.598Z","status":"online","status_checked_at":"2026-03-10T02:00:06.579Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axum","bittorrent","bittorrent-tracker","high-performance","http","p2p","peer-to-peer","rust","torrent"],"created_at":"2024-10-14T07:27:17.457Z","updated_at":"2026-03-10T04:31:16.397Z","avatar_url":"https://github.com/Roardom.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# UNIT3D-Announce\n\nHigh-performance backend BitTorrent tracker compatible with UNIT3D tracker software.\n\n## Supported UNIT3D versions\n\n| UNIT3D Version  | UNIT3D-Announce Version |\n|-----------------|-------------------------|\n| v8.3.4 - v9.0.4 | v0.1                    |\n| v9.0.5+         | v0.2                    |\n| v9.1.7+         | v0.3                    |\n\n## Installation\n\n```sh\n# Go to where UNIT3D is already installed\n$ cd /var/www/html\n\n# Clone this repository\n$ git clone -b v0.3 https://github.com/HDInnovations/UNIT3D-Announce unit3d-announce\n\n# Go into the repository\n$ cd unit3d-announce\n\n# Copy .env.example to .env\n$ cp .env.example .env\n\n# Adjust configuration as necessary\n$ sudo nano .env\n\n# Build the tracker\n$ cargo build --release\n\n# Go into UNIT3D's base directory\n$ cd /var/www/html\n\n# Add the required environment variables to UNIT3D'S .env file:\n# (`TRACKER_HOST`, `TRACKER_PORT`, `TRACKER_UNIX_SOCKET` and `TRACKER_KEY`)\n# These values should match their respective values in UNIT3D-Announce's .env file:\n# (`LISTENING_IP_ADDRESS`, `LISTENING_PORT`, `LISTENING_UNIX_SOCKET` and `APIKEY`)\n# Note: Choose to listen on either TCP sockets or Unix sockets, not both.\n$ sudo nano .env\n\n# Enable the external tracker in UNIT3D's config\n$ sudo nano config/announce.php\n```\n\n## Update\n\n```sh\n# Go to where UNIT3D-Announce is already installed\n$ cd /var/www/html/unit3d-announce\n\n# Pull the new updates\n$ git pull origin v0.3\n\n# Review changes to the configuration\n$ diff -u .env .env.example\n\n# Add/update any new configuration values\n$ sudo nano .env\n\n# Build the tracker\n$ cargo build --release\n```\n\nRemember to [restart the tracker](#startingrestarting-unit3d-announce).\n\n## Reverse proxy\n\nIf you serve both UNIT3D and UNIT3D-Announce on the same domain, add the following `location` block to your nginx configuration already used for UNIT3D.\n\n```sh\n# Edit nginx config\n$ sudo nano /etc/nginx/sites-enabled/default\n```\n\nPaste the following `location` block into the first `server` block immediately after the last existing `location` block.\n\n```nginx\n    location /announce/ {\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header Host $host;\n        # Uncomment one of the following:\n        # proxy_pass http://aaa.bbb.ccc.ddd:eee$request_uri;\n        # proxy_pass http://unix:/run/unit3d-announce/unit3d-announce.sock;\n        real_ip_header X-Forwarded-For;\n        real_ip_recursive on;\n        set_real_ip_from fff.ggg.hhh.iii;\n    }\n```\n\n- `aaa.bbb.ccc.ddd:eeee` is the local listening IP address and port of UNIT3D-Announce if listening on TCP sockets. Set this to the `LISTENING_IP_ADDRESS` and `LISTENING_PORT` configured in the .env file.\n- `http://unix:/run/unit3d-announce/unit3d-announce.sock` is the local listening unix socket if listening on unix sockets. Set the path of this (`/run/unit3d-announce/unit3d-announce.sock`) to `LISTENING_UNIX_SOCKET` configured in the .env file.\n- `fff.ggg.hhh.iii` is the public listening IP address of the nginx proxy used for accessing the frontend website. You can add additional `set_real_ip_from jjj.kkk.lll.mmm/nn;` lines for each additional proxy used so long as the proxy appends the proper values to the `X-Forwarded-For` header. Replace this with your proxy IP address.\n\nUncomment and set `REVERSE_PROXY_CLIENT_IP_HEADER_NAME` in the .env file to `X-Real-IP`.\n\n```sh\n# Reload nginx once finished\n$ service nginx reload\n```\n\n## Supervisor\n\nAdd a supervisor config to run UNIT3D-Announce in the background.\n\n### Configuration\n\n```sh\n# Edit supervisor config\nsudo nano /etc/supervisor/conf.d/unit3d.conf\n```\n\nPaste the following block at the end of the file:\n\n```supervisor\n[program:unit3d-announce]\nprocess_name=%(program_name)s_%(process_num)02d\ncommand=/var/www/html/unit3d-announce/target/release/unit3d-announce\ndirectory=/var/www/html/unit3d-announce\nautostart=true\nautorestart=false\nuser=ubuntu\nnumprocs=1\nredirect_stderr=true\nstdout_logfile=/var/www/html/storage/logs/announce.log\n```\n\n**Set Up Runtime Directory (if using Unix sockets):**\n\nIf using Unix sockets, create a `/run` directory for `ubuntu` user:\n1. `sudo nano /etc/tmpfiles.d/unit3d-announce.conf`\n2. Add: `d /run/unit3d-announce 0755 ubuntu www-data -`\n3. Run: `sudo systemd-tmpfiles --create`\n\n### Starting/Restarting UNIT3D-Announce\n\nReload supervisor\n\n```sh\n$ sudo supervisorctl reread \u0026\u0026 sudo supervisorctl update \u0026\u0026 sudo supervisorctl reload\n```\n\n### Exiting UNIT3D-Announce\n\nTo gracefully exit the tracker:\n\n```sh\nsudo supervisorctl stop unit3d-announce:unit3d-announce_00\n```\n\n## Global Freeleech or Double Upload Events\n\n\u003e [!IMPORTANT]\n\u003e When using the Rust-based UNIT3D-Announce tracker, the global freeleech and double upload events are handled by the external tracker itself. This means you must activate the events in the `config/other.php` file within UNIT3D as normal to show the timer and then also within the `.env` file of the UNIT3D-Announce tracker to update user stats correctly.\n\nTo enable/disable global freeleech or double upload events, you need to adjust the following environment variables in the `.env` file and then either [reload the configuration](#reload) or [restart the tracker](#startingrestarting-unit3d-announce).\n\n```sh\n# The upload_factor is multiplied by 0.01 before being multiplied with\n# the announced uploaded parameter and saved in the \"credited\" upload\n# column. An upload_factor of 200 means global double upload.\n#\n# Default: 100\nUPLOAD_FACTOR=200\n\n# The download factor is multiplied by 0.01 before being multiplied\n# with the announced downloaded parameter and saved in the \"credited\"\n# download column. A download_factor of 0 means global freeleech.\n#\n# Default: 100\nDOWNLOAD_FACTOR=0\n```\n\n## Configuration\n\n### Reload\n\nTo reload the configuration without restarting the tracker, send the following curl:\n\n```sh\ncurl -X POST \"http://\u003cLISTENING_IP_ADDRESS\u003e:\u003cLISTENING_PORT\u003e/announce/\u003cAPIKEY\u003e/config/reload\"\n```\n\n## Uninstall\n\nTo uninstall UNIT3D-announce, you need to [exit the tracker](#exiting-unit3d-announce) and then:\n\n```sh\n# Disable the external tracker in UNIT3D's config\n$ sudo nano /var/www/html/config/announce.php\n\n# Remove any potential `location /announce/` block from the nginx configuration\n$ sudo nano /etc/nginx/sites-enabled/default\n\n# Remove any potential `[program:unit3d-announce]` block from the supervisor configuration\n$ sudo nano /etc/supervisor/conf.d/unit3d.conf\n\n# Remove tracker files\n$ sudo rm -rf /var/www/html/unit3d-announce\n\n# Remove .env values from UNIT3D (`TRACKER_HOST`, `TRACKER_PORT`, and `TRACKER_KEY`)\n$ sudo nano /var/www/html/.env\n```\n\n## Performance\n\nUNIT3D's PHP announce can handle ~250 HTTP requests per second per core on modern hardware.\n\nUsing the same hardware, UNIT3D-Announce handles ~50k HTTP requests per second per core (using wrk). Adding it behind an nginx proxy with TLS will reduce it to ~10k HTTP requests per second per core.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froardom%2Funit3d-announce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Froardom%2Funit3d-announce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Froardom%2Funit3d-announce/lists"}