gemlog/public/uk/btracker-environment-deployment.gmi
2026-01-25 16:56:37 +02:00

283 lines
12 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Інструкція з розгортання інфраструктури βtracker
> Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту howto.ygg і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для інших користувачів) - гайд нижче.
βtracker - альтернативна гілка розробки YGGtracker (https://github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торентів до каталогу.
Система створена для мережі Yggdrasil, але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив)
Комплекс включає в себе:
=> https://github.com/YGGverse/aquatic/tree/info-hash-api Форк UDP трекера Aquatic з підтримкою генерації бінарного інформаційно-хеш-дампу
=> https://github.com/yggverse/aquatic-crawler aquatic-crawler - сканер, який збирає інформаційний хеш-дамп через API та завантажує вміст для попереднього перегляду (jpeg, txt, журнал тощо, використовуючи фільтр регулярних виразів та інші налаштування)
=> https://github.com/YGGverse/btracker βtracker - веб-інтерфейс для зібраної бази даних файлів водних краулерів із користувальницькими функціями пошуку за індексом та скрейпом (статистика активних пірів)
=> https://github.com/YGGverse/btracker-gemini btracker-gemini - не обов'язкова реалізація частини каталогу для протоколу Gemini
Схематично принцип роботи наступний:
```
torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β
torrent client <-----------------------| * /preload/info-hash/data |
<-------------------------------------| * /preload/.info-hash/tmp |
<-------------------------- scrape -------------------------------|
```
## Встановлення
Для збірки, знадобиться середовище розробки Rust:
``` bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
* краще обрати варіант `minimal` для заощадження простору, якщо збірка планується на сервері
Усі компоненти будуть запускатись від окремого системного користувача:
``` bash
useradd -m btracker
```
Спільна база даних файлів (яку наповнює aquatic-crawler і яку надалі читатиме користувач Web-UI) розташовано в просторі веб-сервера:
``` bash
mkdir -p /var/www/btracker
```
### aquatic_udp
``` bash
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
```
Стандартна конфігурація генерується командою:
``` bash
aquatic_udp -p > /home/btracker/aquatic_udp.toml
```
Після чого, вносяться наступні зміни:
``` /home/btracker/aquatic_udp.toml
#..
[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"
#..
```
``` /etc/systemd/system/aquatic-udp.service
[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
```
Запуск:
``` bash
systemctl enable aquatic-udp
systemctl start aquatic-udp
```
Дозволити вхідні підключення до трекера лише для вузлів мережі Yggdrasil:
``` bash
ufw allow from 0200::/7 to 202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148 port 6969 proto udp
```
### aquatic-crawler
``` bash
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
```
``` /etc/systemd/system/aquatic-crawler.service
[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`
Запуск:
``` bash
systemctl enable aquatic-crawler
systemctl start aquatic-crawler
```
При запуску сервіса, кравлер почне сканувати дамп hash.bin що генерується трекером і заповнювати директорію даними, що відповідають налаштуванням. Наповнена директорія буде використовуватись каталожною частиною btracker, про яку нижче. Додаткова інформація по aquatic-crawler:
=> https://github.com/YGGverse/aquatic-crawler/wiki
### btracker
``` bash
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)
``` /etc/systemd/system/btracker.service
[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`
Запуск:
``` bash
systemctl enable btracker
systemctl start btracker
```
### nginx
``` /etc/systemd/system/btracker.service
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;
}
}
```
=> https://github.com/YGGverse/btracker/wiki/Nginx#cache дивіться також варіант з кешування статики
Застосувати зміни:
``` bash
systemctl reload nginx
```
## Посилання
=> https://devzone.org.ua/post/instruktsiia-z-rozhortannia-infrastruktury-vtracker Веб-адаптація цього матеріалу з коментарями на DevZone
### Дивіться також
=> btracker-bittorrent-tracker-in-rust.gmi βtracker - BitTorrent агрегатор на базі Rust
=> install-aquatic-open-tracker-on-linux.gmi Встановлення BitTorrent трекера Aquatic в Linux
=> install-latest-rust-version-on-linux.gmi Встановлення останньої версії Rust в Linux
=> rust-cross-compilation-with-cross-crate.gmi Простий спосіб крос-компіляції Rust з cross
=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією
=> gemini-protocol-as-http-alternative.gmi Протокол Gemini як альтернатива HTTP