Інструкція з розгортання інфраструктури βtracker
Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту howto.ygg і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для інших користувачів) - гайд нижче.
βtracker - альтернативна гілка розробки YGGtracker (https://github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торентів до каталогу.
Система створена для мережі Yggdrasil, але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив)
Комплекс включає в себе:
Схематично принцип роботи наступний:
torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β
torrent client <-----------------------| * /preload/info-hash/data |
<-------------------------------------| * /preload/.info-hash/tmp |
<-------------------------- scrape -------------------------------|
Встановлення
Для збірки, знадобиться середовище розробки Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- краще обрати варіант `minimal` для заощадження простору, якщо збірка планується на сервері
Усі компоненти будуть запускатись від окремого системного користувача:
useradd -m btracker
Спільна база даних файлів (яку наповнює aquatic-crawler і яку надалі читатиме користувач Web-UI) розташовано в просторі веб-сервера:
mkdir -p /var/www/btracker
aquatic_udp
git clone https://github.com/YGGverse/aquatic.git cd aquatic git checkout info-hash-api cargo build --release -p aquatic_udp sudo install target/release/aquatic_udp /usr/local/bin/aquatic_udp
#.. [network] # вказуємо явно потрібний інтерфейс use_ipv4 = false use_ipv6 = true address_ipv6 = "[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:6969" set_only_ipv6 = true [statistics] # увімкнути дамп info-hash write_bin_to_file = true # куди зберігати дамп info-hash (для адрес IPv6) bin_info_hash_ipv6_file_path = "/path/to/hash.bin" #..
[Unit] After=network-online.target Wants=network-online.target [Service] Type=simple User=btracker Group=btracker # если Yggdrasil или другой сервис стартует с задержкой (можно указать в After) # ExecStartPre=/bin/sleep 10s ExecStart=/usr/local/bin/aquatic_udp -c /home/btracker/aquatic_udp.toml # StandardOutput=file:///path/to/aquatic_udp/debug.log # StandardError=file:///path/to/aquatic_udp/error.log [Install] WantedBy=multi-user.target
Запуск:
systemctl enable aquatic-udp systemctl start aquatic-udp
Дозволити вхідні підключення до трекера лише для вузлів мережі Yggdrasil:
ufw allow from 0200::/7 to 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148 port 6969 proto udp
aquatic-crawler
git clone https://github.com/YGGverse/aquatic-crawler.git cd aquatic-crawler cargo build --release sudo install target/release/aquatic-crawler /usr/local/bin/aquatic-crawler
[Unit]
After=network.target
Wants=network.target
[Service]
Type=simple
User=btracker
Group=btracker
# кількість вузлів,
# опція потрібна для індексації роздач, які містять велику кількість файлів
# через поточну реалізаціюю librqbit, якщо не вказати явно - може бути помилка:
# "Error opening '/path/to/file' in read/write mode."
LimitNOFILE=65536
# налаштування журналів
# Environment="RUST_LOG=trace"
Environment="RUST_LOG=aquatic_crawler=warn"
Environment="NO_COLOR=1"
# таймер запуску, може залежати від інших служб, наприклад Yggdrasil
# ExecStartPre=/bin/sleep 15
ExecStart=/usr/local/bin/aquatic-crawler\
# шлях до файла hash.bin (генерується aquatic_udp)
--infohash=/path/to/hash.bin\
# адреса трекера для отримання даних роздачі від активних пірів (використовується aquatic_udp)
# * може бути декілька трекерів, для кожного вказується окремий аргумент
--tracker=udp://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:6969\
# куди завантажувати дані (наприклад, зображення для передперегляду в каталозі btracker)
# у більшості випадків, це публічний простір /var/www/...
--preload=/var/www/btracker/public\
# опціонально: обмеження розміру файлів до індексації (в байтах)
--preload-max-filesize=10000000\
# опціонально: обмеження кількості файлів (на торент)
--preload-max-filecount=5\
# опціонально: регулярний вираз filename
# в даному випадку, нам потрібні зображення для передперегляду і текстові файли для додаткової індексації пошуку
--preload-regex=\.(png|gif|jpeg|jpg|webp|svg|log|nfo|txt)$
# куди зберігати журнал
# /var/log или /home/btracker
StandardOutput=file:///path/to/debug.log
StandardError=file:///path/to/error.log
[Install]
WantedBy=multi-user.target
- приватність: обмежити комунікацію librqbit засобами PEX - можна по діапазону IP: `--blocklist=file:///path/to/blocklist.txt`
- переглянути усі доступні опції: `aquatic-crawler --help`
Запуск:
systemctl enable aquatic-crawler systemctl start aquatic-crawler
При запуску сервіса, кравлер почне сканувати дамп hash.bin що генерується трекером і заповнювати директорію даними, що відповідають налаштуванням. Наповнена директорія буде використовуватись каталожною частиною btracker, про яку нижче. Додаткова інформація по aquatic-crawler:
btracker
git clone https://github.com/yggverse/btracker.git cd btracker cargo build --release sudo install target/release/btracker /usr/local/bin/btracker
- у зв'язку з поточною реалізацією шаблонізатора Rocker (https://rocket.rs/guide/v0.5/deploying), потрібно скопіювати директорії `public` і `templates` до простору `WorkingDirectory` (див. налаштування systemd)
[Unit]
After=network.target
Wants=network.target
[Service]
Type=simple
User=btracker
Group=btracker
# реалізація фреймворку Rocket, потребує наявності "робочої директорії"
WorkingDirectory=/var/www/btracker
ExecStart=/usr/local/bin/btracker\
# опціонально: заголовок каталогу (стандартно βtracker)
# --title="Yggdrasil-only BitTorrent tracker"\
# опціонально: опис каталогу (також відображається в title)
--description="Yggdrasil-only BitTorrent tracker"\
# локальний порт (для проксі nginx)
--port=1234\
# тека з даними aquatic-crawler
--public=/var/www/btracker/public\
# опціонально: трекер для запитів статистики пірів (scrape)
--scrape=udp://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:6969\
# опціонально: трекер (або трекер) для анонсу
--tracker=udp://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:6969\
--tracker=udp://tracker.ygg:6969
# реалізація Rocket журналює сюди події 404, тимчасово вимкнено; подробиці:
# https://github.com/rwf2/Rocket/issues/2951
# StandardOutput=file:/path/to/debug.log
StandardOutput=null
StandardError=file:///path/to/error.log
[Install]
WantedBy=multi-user.target
- доступні опції: `btracker --help`
Запуск:
systemctl enable btracker systemctl start btracker
nginx
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:1234;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Застосувати зміни:
systemctl reload nginx