mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-18 22:02:41 +00:00
add instruktsiia-z-rozhortannia-infrastruktury-vtracker.md
This commit is contained in:
parent
cfa3875a94
commit
04f6f0174b
2 changed files with 254 additions and 1 deletions
249
post/instruktsiia-z-rozhortannia-infrastruktury-vtracker.md
Normal file
249
post/instruktsiia-z-rozhortannia-infrastruktury-vtracker.md
Normal file
|
|
@ -0,0 +1,249 @@
|
||||||
|
# Інструкція з розгортання інфраструктури βtracker
|
||||||
|
|
||||||
|
> Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту [howto.ygg](http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:btracker) і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для Інтернет-користувачів) - гайд нижче. На додаток до попереднього анонсу [βtracker - BitTorrent агрегатор на базі Rust](https://devzone.org.ua/post/vtracker-bittorrent-ahrehator-na-bazi-rust).
|
||||||
|
|
||||||
|
**βtracker** - альтернативна гілка розробки [YGGtracker](https://github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торрентів до каталогу.
|
||||||
|
|
||||||
|
Система створена для мережі [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom), але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив)
|
||||||
|
|
||||||
|
**Система βtracker включає в себе:**
|
||||||
|
|
||||||
|
* aquatic_udp - [форк](https://github.com/YGGverse/aquatic/tree/info-hash-api) UDP трекера [Aquatic](https://github.com/greatest-ape/aquatic/tree/master/crates/udp) з підтримкою генерації бінарного інформаційно-хеш-дампу
|
||||||
|
* [aquatic-crawler](https://github.com/yggverse/aquatic-crawler) - сканер, який збирає інформаційний хеш-дамп через API та завантажує вміст для попереднього перегляду (jpeg, txt, журнал тощо, використовуючи фільтр регулярних виразів та інші налаштування)
|
||||||
|
* [βtracker](https://github.com/YGGverse/btracker) - веб-інтерфейс для зібраної бази даних файлів водних краулерів із користувальницькими функціями пошуку за індексом та скрейпом (статистика активних пірів)
|
||||||
|
* [btracker-gemini](https://github.com/YGGverse/btracker-gemini) - не обов'язкова реалізація частини каталогу для [протоколу Gemini](https://devzone.org.ua/post/protokol-gemini-iak-alternatyva-http)
|
||||||
|
|
||||||
|
**Схематично принцип роботи наступний:**
|
||||||
|
|
||||||
|
```
|
||||||
|
torrent client > aquatic_udp > infohash.bin < aquatic-crawler > * /preload/info-hash.torrent > β
|
||||||
|
torrent client <-----------------------| * /preload/info-hash/data |
|
||||||
|
<-------------------------------------| * /preload/.info-hash/tmp |
|
||||||
|
<-------------------------- scrape -------------------------------|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Встановлення
|
||||||
|
|
||||||
|
Для збірки, знадобиться середовище розробки [Rust](https://devzone.org.ua/post/vstanovlennia-ostannyoyi-versiyi-rust-v-linux):
|
||||||
|
|
||||||
|
``` 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
|
||||||
|
```
|
||||||
|
|
||||||
|
``` /home/btracker/aquatic_udp.toml
|
||||||
|
#..
|
||||||
|
|
||||||
|
[network]
|
||||||
|
# вказуємо явно потрібний інтерфейс
|
||||||
|
use_ipv4 = false
|
||||||
|
use_ipv6 = true
|
||||||
|
address_ipv6 = "[302:68d0:f0d5:b88d::fdb]: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
|
||||||
|
```
|
||||||
|
* `systemctl enable aquatic-udp`
|
||||||
|
* `systemctl start aquatic-udp`
|
||||||
|
|
||||||
|
Дозволити вхідні підключення до трекера лише для вузлів мережі Yggdrasil:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
ufw allow from 0200::/7 to 302:68d0:f0d5:b88d::fdb 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://[302:68d0:f0d5:b88d::fdb]: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, про яку нижче. Додаткову інформацію можна знайти в [wiki](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://[302:68d0:f0d5:b88d::fdb]:6969\
|
||||||
|
# опціонально: трекер (або трекер) для анонсу
|
||||||
|
--tracker=udp://[302:68d0:f0d5:b88d::fdb]: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
|
||||||
|
|
||||||
|
``` /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
|
||||||
|
```
|
||||||
|
|
@ -40,4 +40,8 @@ torrent client <-----------------------| * /preload/info-
|
||||||
|
|
||||||
UPD. днями з'явилась [реалізація](https://github.com/YGGverse/btracker-gemini) серверної частини для протоколу [Gemini](https://devzone.org.ua/post/protokol-gemini-iak-alternatyva-http) та відповідний інстанс:
|
UPD. днями з'явилась [реалізація](https://github.com/YGGverse/btracker-gemini) серверної частини для протоколу [Gemini](https://devzone.org.ua/post/protokol-gemini-iak-alternatyva-http) та відповідний інстанс:
|
||||||
|
|
||||||
* [gemini://[302:68d0:f0d5:b88d::fdb]](http://[302:68d0:f0d5:b88d::fdb]) | [gemini://tracker.ygg](gemini://tracker.ygg)
|
* [gemini://[302:68d0:f0d5:b88d::fdb]](http://[302:68d0:f0d5:b88d::fdb]) | [gemini://tracker.ygg](gemini://tracker.ygg)
|
||||||
|
|
||||||
|
## Дивіться також
|
||||||
|
|
||||||
|
* [Інструкція з розгортання інфраструктури βtracker](https://devzone.org.ua/post/instruktsiia-z-rozhortannia-infrastruktury-vtracker)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue