How to Wiki Database (change log) http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

521 lines
28 KiB

====== YGGtracker v2 ======
Вторая версия каталога BitTorrent c [[https://github.com/YGGverse/YGGtracker|открытым исходным кодом]] для сети Yggdrasil.
===== Функциональность =====
* Добавлена поддержка мультиязычности интерфейса и контента
* Вместо импорта magnet-ссылок, добавлена поддержка загрузки torrent файлов с возможностью экспорта в magnet или torrent форматах
* Максимально упрощено добавление контента: описание и теги генерируются автоматически из содержимого torrent файла
* Подробные информационные страницы о содержимом каждого torrent файла, возможность фильтрации приватных и non-yggdrasil подключений
* Добавлена лента активности пользователей
* Расширены способы подписки по RSS - последние торренты, активность по отдельному торренту, активность пользователей, подписки на поисковые результаты
* Гибкие настройки профиля - фильтры контента по локали, типам активности, фильтрация адресов трекеров и т.д.
* Организация доступа к редактированию контента основана на принципе википедии, где каждый участник может редактировать материалы, с сохранением истории правок
* Доступны уровни доступа - пользователь, автор, модератор. Первый пользователь может создавать новых модераторов, в то время как они - добавлять остальных, формируя ресурс коллективного типа
* Еще не реализованной но одной из основных функций будут мульти-язычные информационные страницы, которые будут автоматически объединять все контекстные файлы для скачивания
* В рамках информационных страниц возможно будет реализовано стриминговое вещание посредством webtorrent, для удобного просмотра видео без загрузки торрент файла.
==== Обновления ====
* 2.1.0 - добавлена поддержка API для интеграции сторонних приложений и плагинов для торрент клиентов - [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] ([[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|плагин]]), [[yggdrasil:bittorrent:jackett|Jackett]] и других
* 2.2.0 - добавлена возможность запроса раздач с обычных торрентов в сеть Yggdrasil а также инструменты автоматизации
* 2.3.0 - расширены уровни доступа - авторам и модераторам доступен весь контент вне зависимости от настроек в аккаунте, автором добавлена функция отключения публикаций
* 2.4.0 - добавлена поддержка постеров с возможностью редактирования сообществом; добавлена поддержка транслитерации для поиска по названиям файлов, добавлена поисковая индексация комментариев
* 2.5.0 - добавлены категории торрентов; новый релиз поискового плагина для qBittorrent, с поддержкой фильтра по категориям и следованием сессии настройкам аккаунта
* 2.6.0 - добавлены поисковые фильтры, для настройки выборки по категорям, локали, и другим полям, игнорируя настройки аккаунта по-умолчанию (функция также применима к подпискам RSS и API)
===== Технические отличия =====
* Серверная часть переписана с использованием фреймворка Symfony
* Выход обновлений согласно [[https://semver.org/#semantic-versioning-200|Semantic Versioning 2.0.0]]
* Для более простого развертывания и обновления проекта, во второй версии, вместо MySQL и SphinxQL используется база данных SQLite посредством ORM Doctrine
===== Децентрализация =====
С учетом полученной в первой версии аналитики, во второй версии принято решение отказаться от разделения групп пользователей на локальные и распределенные.
Вместо этого, планируется создание инструментов экспорта личных данных в файл и последующего импорта на выбранный пользователем узел. При таком подходе также возможна автоматизация посредством веб-хуков, при подключении внешнего узла в настройках аккаунта.
Также рассматривается интеграция протокола [[https://ru.wikipedia.org/wiki/ActivityPub|ActivityPub]] для полноценной интеграции с Fediverse.
===== API =====
Для реализации распределенного индекса а также интеграции сторонних приложений, таких как [[yggdrasil:bittorrent:qbittorrent|qBittorrent]] ([[https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|поисковый плагин]]), [[yggdrasil:bittorrent:jackett|Jackett]] и других, доступны следующие интерфейсы:
==== Список торрентов ====
<code>
GET /api/torrents?search=value&sensitive=0&locales=en|uk&yggdrasil=1&page=1
</code>
* **search** - опционально, отображаются последние торренты, если параметр не указан\\
* **sensitive** - опционально, 0/1 отображать чувствительный контент или отображать любой если параметр не указан\\
* **locales** - опционально, список локалей разделенных | или отображать все, если параметр не указан\\
* **yggdrasil** - опционально, 0/1 фильтр yggdrasil-only или не применять фильтр, если параметр не указан\\
* **page** - опционально, страница результатов, 1 по-умолчанию
===== Установка =====
Для установки актуальной версии, достаточно выполнить несколько команд:
<code>
composer create-project yggverse/yggtracker
</code>
Инициализация базы данных:
<code>
php bin/console doctrine:schema:update --force
</code>
===== Обновление =====
Установка последних обновлений пакетов:
<code>
composer update
</code>
Обновление базы данных:
<code>
php bin/console doctrine:migrations:migrate
</code>
Очистить кеш в режиме production можно командой:
<code>
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
</code>
===== Настройка =====
==== Nginx ====
В зависимости от типа доступа, ниже приведены различные сценарии настроек Nginx:
=== DNS ===
При использовании доменного имени (на примере tracker.ygg):
<code>
server {
listen [::]:80;
# Ограничить доступ только для сети Yggdrasil
# allow 0200::/7;
# deny all;
root /var/www/YGGverse/YGGtracker/public;
index index.html index.htm index.nginx-debian.html index.php;
server_name tracker.ygg;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ ^/index\.php(/|$) {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
# Environment variables
# bin/console cache:clear
fastcgi_param APP_ENV prod;
internal;
}
location ~ \.php$ {
return 404;
}
}
</code>
=== Поддиректория ===
Если каталог расположен по IP адресу Yggdrasil в поддиректории, можно использовать следующую инструкцию на стандартной конфигурации Nginx:
<code>
ln -s /var/www/YGGverse/YGGtracker/public /var/www/html/yggtracker
</code>
<code>
# /etc/nginx/sites-available/default
server {
# http / 80 порт / IPv6
listen [::]:80 default;
# Ограничить доступ только для сети Yggdrasil
# allow 0200::/7;
# deny all;
root /var/www/html;
index index.html index.htm index.nginx-debian.html index.php;
server_name _;
location / {
try_files $uri $uri/ /index.php?$args;
}
location /yggtracker {
root /var/www/YGGverse/YGGtracker/public;
rewrite ^/yggtracker/(.*)$ /$1 break;
try_files $uri @yggtracker;
}
location @yggtracker {
# Provide actual php -v
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/YGGverse/YGGtracker/public/index.php;
fastcgi_param SCRIPT_NAME /yggtracker/index.php;
fastcgi_param REQUEST_URI /yggtracker$uri?$args;
# Среда окружения
# При любых изменениях в prod не забываем о команде bin/console cache:clear
# fastcgi_param APP_ENV prod;
}
</code>
==== Crontab ====
Обновление статистики пиров (scrape)
<code>
* * * * * wget -q -O /dev/null 'http://[address]/crontab/torrent/scrape/{key}' &> /dev/null
</code>
* где {key} - ключ ограничения доступа для запросов по http, указать можно в файле среды окружения .env / директива APP_KEY
==== FTP ====
В версии 2.2.0 расширена функция "Wanted", которая теперь позволяет автоматизировать запросы на раздачу, а также осуществлять "конвертацию" любой раздачи в сеть Yggdrasil.
Работает эта функция следующим образом:
После того, как скрипт crontab обнаруживает торрент с активными личерами, но без сидеров, он автоматически копирует исходный торрент-файл в общедоступную директорию /app/var/ftp\\
при этом, к торрент файлу добавляются все возможные трекеры как с исходного файла, так и настроек приложения.\\
//* К такому файлу также добавляется префикс wanted#torrentId вместо стандартного yggtracker#torrentId,
чтобы отличать файлы и открывать их особым образом, во избежание утечки данных в интернет, например (в отличии от обычной загрузки, которая фильтрует внешние адреса по-умолчанию)//
Как только файл был загружен и ретранслирован в сеть Yggdrasil, он автоматически удаляется из FTP каталога.
В прочем, FTP хранилище нужно не столько для ручного доступа, сколько для того, чтобы позволить владельцам [[yggdrasil:bittorrent:seedbox|сид-узлов]] автоматизировать процесс обработки запросов,
например, с помощью функции автосканирования директории, доступной в большинстве современных bittorrent клиентов.
При этом, сидирующему боту не нужно загружать весь реестр - YGGtracker автоматически копирует только востребованные торренты по тематическим каталогам,
выполняющих функцию фильтра и администратор узла может выбрать для себя интересующий фильтр.
На данный момент, доступны следующие варианты для прослушивания запросов:
* /yggtracker/torrents/wanted/all - все торренты с маркером "востребован"
* /yggtracker/torrents/wanted/locale/en|... - торренты с фильтром по локали контента
* /yggtracker/torrents/wanted/sensitive/no|yes - фильтр по чувствительному признаку / NSFW
Поскольку bittorrent клиенты не умеют сканировать директории по протоколу FTP, в системах Linux можно примонтировать удалённый раздел в локальную директорию сервера с помощью различных утилит
(частично эта тема раскрыта в материале [[http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:seedbox#сетевой_накопитель|Сидбокс - Сетевой накопитель]])
или использовать [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver | официальную утилиту ]] для автозагрузки востребованных торрентов со всех узлов YGGtracker.
Ниже будет рассмотрен пример рабочей конфигурации FTP/API на базе vsftpd, qbittorrent-nox и rclone; корень проекта расположен в директории /var/www/YGGverse/YGGtracker
=== vsftpd ===
Устанавливаем командой
<code>
apt install vsftpd
</code>
Создадим директорию и добавим приложению доступ на запись
<code>
mkdir /var/www/YGGverse/YGGtracker/var/ftp
chown www-data:www-data /var/www/YGGverse/YGGtracker/var/ftp
</code>
Редактируем файл /etc/vsftpd.conf
<code>
listen_ipv6=YES
anonymous_enable=YES
local_enable=NO
anon_root=/var/www/YGGverse/YGGtracker/var/ftp
no_anon_password=YES
hide_ids=YES
pasv_min_port=40000
pasv_max_port=50000
</code>
Разрешаем входящие подключения (Yggdrasil)
<code>
ufw allow proto tcp from 0200::/7 to any port 21
ufw allow proto tcp from 0200::/7 to any port 40000:50000
</code>
Перезапускаем сервер
<code>
service vsftpd restart
</code>
=== rclone ===
Настроим монтирование на целевом сид-сервере, установив rclone
<code>
apt install rclone
</code>
Запускаем команду rclone config и отвечаем на вопросы:
<code>
n) New remote
name> yggtracker // название подключения
Storage> ftp // указываем FTP
host> [201:23b4:991a:634d:8359:4521:5576:15b7] // официальный узел, если нужен свой, меняем
port> 21 // можно оставить по-умолчанию
user> anonymous // для анонимного подключения - anonymous
password> anonymous
...
// остальные пункты по-умолчанию
</code>
Создадим точку монтирования и актуализируем права
<code>
mkdir /home/qbittorrent-nox/yggtracker
chown qbittorrent-nox:qbittorrent-nox /home/qbittorrent-nox/yggtracker
</code>
Монтирование осуществляется командой
<code>
rclone mount yggtracker:/yggtracker/torrents/wanted/all /home/qbittorrent-nox/yggtracker &
</code>
Демонтировать
<code>
umount /home/qbittorrent-nox/yggtracker
</code>
=== qbittorrent-nox ===
Лучше всего подключать FTP при запуске клиента, поэтому добавим следующие настройки сервиса в файл
/etc/systemd/system/qbittorrent-nox.service
<code>
ExecStartPre=/usr/bin/rclone mount --config /home/qbittorrent-nox/.config/rclone/rclone.conf --daemon --read-only yggtracker:/yggtracker/torrents/wanted/all /home/qbittorrent-nox/yggtracker
ExecStop=/usr/bin/umount /home/qbittorrent-nox/yggtracker
</code>
Затем
<code>
systemctl daemon-reload
service qbittorrent-nox restart
</code>
* О том, как настроить [[http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:seedbox#сервер_на_базе_qbittorrent|сервер на базе qbittorrent-nox]]
Теперь можно перейти в веб-интерфейс и указать локальную директорию для прослушивания запросов на раздачи:
**Web UI → Preferences → Download → Automatically add torrents from**
Также желательно копировать торрент-файлы локально для стабильной работы клиента
**Web UI → Preferences → Download → Saving Management → Copy .torrent files to**
=== yggtracker-wanted-torrents-receiver ===
Поскольку в работе qbittorrent-nox и rclone замечена проблема синхронизации, которую можно решить только рестартом клиента,
было принято решение отказаться от rclone и создать специальную [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver|утилиту]], позволяющую также загружать торренты от всех провайдеров YGGtracker, без необходимости вручную добавлять настройки подключения для каждого из них.
Скрипт написан на языке PHP 8 (возможно будет добавлена альтернатива на Python или Bash) и подразумевает загрузку торрент-файлов **локально**, посредством crontab.
Установка последней версии выполняется одной командой:
<code>
git clone https://github.com/YGGverse/yggtracker-wanted-torrents-receiver.git
</code>
crontab:
<code>
* * * * * /usr/bin/php src/cli.php > /dev/null 2>&1
</code>
В [[https://github.com/YGGverse/yggtracker-wanted-torrents-receiver#yggtracker-wanted-torrents-receiver|README.md]] указаны подробные комментарии по тонкой настройке, хотя сам скрипт достаточно установить как есть - торренты будут загружены в директорию storage.
Из полезных функций - можно указать собственные условия получения торрентов, возможность обновления реестра провайдеров из репозитория, и т.д.
При активной опции import.storage.common загруженные торренты будут скопированы в общую директорию storage/_common, что позволяет работать с торрент клиентами, не поддерживающими рекурсивное сканирование или прослушивание нескольких директорий,
а также вручную мониторить и настраивать клиент для каждого провайдера - эта задача теперь делегирована провайдерам в рамках в PR на GitHub.
Торренты в директории storage/_common защищены от дублирования хешированием содержимого по MD5.
В остальных случаях, торрент файлы копируются в директории провайдеров, например storage/yggtracker/original_name, после чего можно указать нужную директорию в клиенте qBittorrent или другом, без необходимости что либо менять в systemd.
==== Приложение ====
Базовые настройки приложения указываются в файлах группы .env
<code>
# Название проекта
APP_NAME=YGGtracker
# Локаль по-умолчанию
APP_LOCALE=en
# Список доступных локалей
APP_LOCALES=en|cs|eo|fr|ka|de|he|it|lv|pl|pt|ru|es|uk
# Количество записей на страницу
APP_PAGINATION=10
# Тема оформления по-умолчанию
APP_THEME=default
# Список доступных тем оформления
APP_THEMES=default
# Настройки чувствительного контента для новых пользователей по-умолчанию
APP_SENSITIVE=0
# Утверждение новых пользователей для новых пользователей по-умолчанию
APP_APPROVED=0
# Фильтрация ресурсов Yggdrasil для новых пользователей по-умолчанию
APP_YGGDRASIL=1
# Настройки дополнительных трекеров
APP_TRACKERS=http://[201:23b4:991a:634d:8359:4521:5576:15b7]:2023/announce|...
# Адреса поисковых ботов, для которых отключены социальные функции на сайте - загрузки, лайки, ведение журнала активности и т.д.
APP_CRAWLERS=30a:5fad::e|...
# Ограничение на размер загружаемого файла .torrent
APP_TORRENT_FILE_SIZE_MAX=1024000
# Ограничение на размер загружаемых постеров
APP_TORRENT_POSTER_FILE_SIZE_MAX=10240000
# Включить экспорт запросов на раздачу средствами FTP
APP_TORRENT_WANTED_FTP_ENABLED=1
# Директория FTP
APP_TORRENT_WANTED_FTP_FOLDER=/yggtracker
# Транслировать по FTP только подтвержденные торренты
APP_TORRENT_WANTED_FTP_APPROVED_ONLY=1
# Индексировать названия торрентов
APP_INDEX_TORRENT_NAME_ENABLED=1
# Индексировать названия info hash v1
APP_INDEX_TORRENT_HASH_V1_ENABLED=1
# Индексировать названия info hash v2
APP_INDEX_TORRENT_HASH_V2_ENABLED=1
# Индексировать названия файлов
APP_INDEX_TORRENT_FILENAMES_ENABLED=1
# Индексировать содержимое поля "источник"
APP_INDEX_TORRENT_SOURCE_ENABLED=1
# Индексировать содержимое поля "комментарий"
APP_INDEX_TORRENT_COMMENT_ENABLED=1
# Минимальная длина слова для индексации
APP_INDEX_WORD_LENGTH_MIN=3
# Максимальная длина слова для индексации
APP_INDEX_WORD_LENGTH_MAX=255
</code>
===== Обслуживание =====
==== Резервное копирование ====
Все пользовательские данные расположены в директории приложения /var
<code>
/var/cache - кеш приложения
/var/log - журналы
/var/ftp - временное хранилище FTP API
/var/posters - каталог с исходными файлами постеров (пост-обработанные файлы кешируются в /public/posters)
/var/torrents - каталог torrent файлов, соответствующих torrent.ID
/var/data.db - база данных SQLite
</code>
==== Локализация ====
В официальной сборке, переводы осуществляются в рамках площадки [[https://crowdin.com/project/yggtracker|Crowdin]].
При использовании собственных сборок, для извлечения строк в директорию /translations, можно использовать команду
<code>
php bin/console translation:extract --clean --domain="messages" --prefix="" --force ru
</code>
Если используются внешние провайдеры Crowdin, Loco и другие, выгрузка осуществляется командой:
<code>
php bin/console translation:push --force --domains="messages"
</code>
Импорт
<code>
php bin/console translation:pull --force --intl-icu --domains="messages"
</code>
После внесения изменений в среде prod, не забываем обновить кеш
<code>
APP_ENV=prod APP_DEBUG=0 php bin/console cache:clear
</code>
===== Список узлов =====
[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ru | Каталог проекта ]] ([[ http://tracker.ygg/ru | tracker.ygg ]]) - включает межверсионные обновления из репозитория
(
[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ru/rss/torrents | RSS ]],
[[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/api/torrents | JSON ]],
[[ ftp://[201:23b4:991a:634d:8359:4521:5576:15b7]/yggtracker/ | FTP ]] API
)
===== Ссылки =====
[[ https://github.com/YGGverse/YGGtracker | Исходный код на GitHub ]] \\
[[ https://github.com/YGGverse/YGGtracker/wiki | Рецепты ]] \\
[[ https://crowdin.com/project/yggtracker | Локализация ]] \\
[[ https://mastodon.social/@YGGverse | Новости проекта ]] \\
[[ https://github.com/YGGverse/qbittorrent-yggtracker-search-plugin|Поисковый плагин для qBittorrent ]]\\
[[ https://github.com/YGGverse/yggtracker-wanted-torrents-receiver | Утилита для автозагрузки востребованных торрентов]]\\
Каналы KevaChat:
* [[ http://[201:23b4:991a:634d:8359:4521:5576:15b7]/kevachat/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | 0200::/7 ]]
* [[ http://kevachat.ygg/room/NWVP1GPp59qEWYGVWWVxGR2JScHHbicWTy#latest | алиас ]]
[[ yggdrasil:bittorrent:yggtracker | Индексная страница проекта ]] \\
~~DISCUSSION~~