diff --git a/public/uk/btracker-environment-deployment.gmi b/public/uk/btracker-environment-deployment.gmi new file mode 100644 index 0000000..e220378 --- /dev/null +++ b/public/uk/btracker-environment-deployment.gmi @@ -0,0 +1,274 @@ +# Інструкція з розгортання інфраструктури β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 +``` + +``` /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 +``` + +Запуск: + +``` bash +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` + +Запуск: + +``` 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://[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` + +Запуск: + +``` 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 + +=> yggdrasil-is-network-with-distributed-routing.gmi Yggdrasil - мережа з децентралізованою маршрутизацією +=> gemini-protocol-as-http-alternative.gmi Протокол Gemini як альтернатива HTTP diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 916c5cc..edb2eda 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -16,6 +16,7 @@ ### Нотатки +=> btracker-environment-deployment.gmi 2025-11-28 Інструкція з розгортання інфраструктури βtracker => social-oriented-vsftpd-server-setup.gmi 2025-11-26 Організація багатокористувацького файло-обмінника на базі FTP / vsftpd => about-gemlog-administration.gmi 2025-11-21 Про адміністрування блогів Gemini => bitcoin-core-in-rust.gmi 2025-11-20 Реалізація вузла BitCoin на базі Rust