Інструкція з розгортання інфраструктури βtracker


Здається, інструкція з розгортання поточної версії βtracker була написана в одному екземплярі для проєкту howto.ygg і я зовсім забув зробити для неї локальну версію. Свій інстанс я згорнув, але на випадок, якщо передумаю (та для інших користувачів) - гайд нижче.


βtracker - альтернативна гілка розробки YGGtracker (github.com/YGGverse/YGGtracker), яка надає програмний комплекс для автоматичного відстеження та агрегації без участі модератора та ручного додавання торентів до каталогу.


Система створена для мережі Yggdrasil, але може працювати з будь-якою іншою, що підтримує стек IPv4/IPv6 або в гібридному режимі. Щоб додати торренти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив)


Комплекс включає в себе:


Форк UDP трекера Aquatic з підтримкою генерації бінарного інформаційно-хеш-дампу

aquatic-crawler - сканер, який збирає інформаційний хеш-дамп через API та завантажує вміст для попереднього перегляду (jpeg, txt, журнал тощо, використовуючи фільтр регулярних виразів та інші налаштування)

βtracker - веб-інтерфейс для зібраної бази даних файлів водних краулерів із користувальницькими функціями пошуку за індексом та скрейпом (статистика активних пірів)

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:


curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Усі компоненти будуть запускатись від окремого системного користувача:


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

Стандартна конфігурація генерується командою:


aquatic_udp -p > /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"

#..

[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

Запуск:


systemctl enable aquatic-crawler
systemctl start aquatic-crawler

При запуску сервіса, кравлер почне сканувати дамп hash.bin що генерується трекером і заповнювати директорію даними, що відповідають налаштуванням. Наповнена директорія буде використовуватись каталожною частиною btracker, про яку нижче. Додаткова інформація по aquatic-crawler:

https://github.com/YGGverse/aquatic-crawler/wiki


btracker


git clone https://github.com/yggverse/btracker.git
cd btracker
cargo build --release
sudo install target/release/btracker /usr/local/bin/btracker

[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

Запуск:


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

Посилання


Веб-адаптація цього матеріалу з коментарями на DevZone


Дивіться також


βtracker - BitTorrent агрегатор на базі Rust


Встановлення BitTorrent трекера Aquatic в Linux

Встановлення останньої версії Rust в Linux

Простий спосіб крос-компіляції Rust з cross


Yggdrasil - мережа з децентралізованою маршрутизацією

Протокол Gemini як альтернатива HTTP



/uk/