# Інструкція з розгортання інфраструктури β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 або в гібридному режимі. Щоб додати торенти до каталогу, користувачеві достатньо додати пов'язані з агрегатором трекери в свій клієнт (дистрибутив) **Комплекс включає в себе:** * 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 ``` Стандартна конфігурація генерується командою: ``` 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 ``` * `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` Запуск: * `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://[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 ``` /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 ```