146 lines
4.6 KiB
Markdown
146 lines
4.6 KiB
Markdown
# LBRY Tracker
|
|
|
|
The LBRY tracker is a server that helps peers find each other. It was forked from [Chihaya](https://github.com/chihaya/chihaya), an open-source [BitTorrent tracker](https://en.wikipedia.org/wiki/BitTorrent_tracker).
|
|
|
|
|
|
## Installation and Usage
|
|
|
|
### Building from HEAD
|
|
|
|
In order to compile the project, the [latest stable version of Go] and knowledge of a [working Go environment] are required.
|
|
|
|
```sh
|
|
git clone git@github.com:lbryio/tracker.git
|
|
cd tracker
|
|
go build ./cmd/chihaya
|
|
./chihaya --help
|
|
```
|
|
|
|
[latest stable version of Go]: https://golang.org/dl
|
|
[working Go environment]: https://golang.org/doc/code.html
|
|
|
|
### Testing
|
|
|
|
The following will run all tests and benchmarks.
|
|
Removing `-bench` will just run unit tests.
|
|
|
|
```sh
|
|
go test -bench $(go list ./...)
|
|
```
|
|
|
|
The tracker executable contains a command to end-to-end test a BitTorrent tracker.
|
|
See
|
|
|
|
```sh
|
|
tracker --help
|
|
```
|
|
|
|
### Configuration
|
|
|
|
Configuration of the tracker is done via one YAML configuration file.
|
|
The `dist/` directory contains an example configuration file.
|
|
Files and directories under `docs/` contain detailed information about configuring middleware, storage implementations, architecture etc.
|
|
|
|
This is an example for an UDP server running on 9252 with metrics enabled. Remember to **change the private key** to some random string.
|
|
|
|
```
|
|
---
|
|
chihaya:
|
|
announce_interval: "30m"
|
|
min_announce_interval: "15m"
|
|
metrics_addr: "0.0.0.0:6880"
|
|
udp:
|
|
addr: "0.0.0.0:9252"
|
|
max_clock_skew: "10s"
|
|
private_key: ">>>>CHANGE THIS TO SOME RANDOM THING<<<<"
|
|
enable_request_timing: false
|
|
allow_ip_spoofing: false
|
|
max_numwant: 100
|
|
default_numwant: 50
|
|
max_scrape_infohashes: 50
|
|
storage:
|
|
name: "memory"
|
|
config:
|
|
gc_interval: "3m"
|
|
peer_lifetime: "31m"
|
|
shard_count: 1024
|
|
prometheus_reporting_interval: "1s"
|
|
```
|
|
|
|
# Running from Docker
|
|
|
|
This section assumes `docker` and `docker-compose` to be installed on a Linux distro. Please check official docs on how to install [Docker Engine](https://docs.docker.com/engine/install/) and [Docker Compose](https://docs.docker.com/compose/install/).
|
|
|
|
## Docker Compose from lbry/tracker
|
|
In order to define a tracker service and let Docker Compose manage it, create a file named `docker-compose.yml` with:
|
|
```
|
|
version: "3"
|
|
services:
|
|
tracker:
|
|
image: lbry/tracker
|
|
command: --config /config/conf.yml
|
|
volumes:
|
|
- .:/config
|
|
network_mode: host
|
|
restart: always
|
|
```
|
|
Unfortunately the tracker does not work without `network_mode: host` due some bug with UDP on Docker. In this mode, firewall configuration needs to be done manually. If using `ufw`, try `ufw allow 9252`.
|
|
|
|
Now, move the configuration to the same directory as `docker-compose.yml`, naming it `conf.yml`. If it is not ready, check the configuration section above.
|
|
|
|
Start the tracker by running the following in the same directory as the compose file:
|
|
`docker-compose up -d`
|
|
Logs can be read with:
|
|
`docker-compose logs`
|
|
To stop:
|
|
`docker-compose down`
|
|
|
|
## Building the containter
|
|
A Dockerfile is provided within the repo. To build the container locally, run this command on the same directory the repo was cloned:
|
|
`sudo docker build -f Dockerfile . -t some_name/tracker:latest`
|
|
It will produce an image called `some_name/tracker`, which can be used in the Docker Compose section.
|
|
|
|
# Running from source as a service
|
|
|
|
For ease of maintenance, it is recommended to run the tracker as a service.
|
|
|
|
This is an example for running it under as the current user using `systemd`:
|
|
```
|
|
[Unit]
|
|
Description=Chihaya BT tracker
|
|
After=network.target
|
|
[Service]
|
|
Type=simple
|
|
#User=chihaya
|
|
#Group=chihaya
|
|
WorkingDirectory=/home/user/github/tracker
|
|
ExecStart=/home/user/github/tracker/chihaya --config dist/example_config.yaml
|
|
Restart=on-failure
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
To try it, change `/home/user/github/tracker` to where the code was cloned and run:
|
|
```bash=
|
|
mkdir -p ~/.config/systemd/user
|
|
# PASTE FILE IN ~/.config/systemd/user/tracker.service
|
|
systemctl --user enable tracker
|
|
systemctl --user start tracker
|
|
systemctl --user status tracker
|
|
```
|
|
|
|
## Contributing
|
|
|
|
Contributions to this project are welcome, encouraged, and compensated. For more details, please check [this](https://lbry.tech/contribute) link.
|
|
|
|
## License
|
|
|
|
LBRY's code changes are MIT licensed, and the upstream Chihaya code is licensed under a BSD 2-Clause license. For the full license, see [LICENSE](LICENSE).
|
|
|
|
## Security
|
|
|
|
We take security seriously. Please contact security@lbry.com regarding any security issues. [Our PGP key is here](https://lbry.com/faq/pgp-key) if you need it.
|
|
|
|
## Contact
|
|
|
|
The primary contact for this project is [@shyba](mailto:vshyba@lbry.com).
|