<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>HowTo Yggdrasil - archive:yggdrasil:bittorrent:yggtracker</title>
        <description></description>
        <link>http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/</link>
        <lastBuildDate>Fri, 08 May 2026 03:34:57 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/_media/wiki:logo.png</url>
            <title>HowTo Yggdrasil</title>
            <link>http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/</link>
        </image>
        <item>
            <title>YGGtracker v1</title>
            <link>http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/archive:yggdrasil:bittorrent:yggtracker:v1?rev=1761120801&amp;do=diff</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;yggtracker_v1&quot;&gt;YGGtracker v1&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_start&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;&lt;div class=&quot;wrap_center wrap_round wrap_info plugin_wrap&quot; style=&quot;width: 60%;&quot;&gt;
&lt;p&gt;
В материале рассмотрена устаревшая версия проекта. &lt;br/&gt;

Для получения актуальной информации, обратитесь в индексный раздел &lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:yggtracker&quot; class=&quot;wikilink1&quot; title=&quot;yggdrasil:bittorrent:yggtracker&quot; data-wiki-id=&quot;yggdrasil:bittorrent:yggtracker&quot;&gt;YGGtracker&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;plugin_wrap_end&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;0-&amp;quot;} --&gt;
&lt;p&gt;
Проект c &lt;a href=&quot;https://github.com/YGGverse/YGGtracker&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://github.com/YGGverse/YGGtracker&quot; rel=&quot;ugc nofollow noopener&quot;&gt;открытым исходным кодом&lt;/a&gt; для организации децентрализованного веб-реестра BitTorrent для сети Yggdrasil.
&lt;/p&gt;

&lt;p&gt;
Серверная часть реализована на базе MySQL, SphinxQL и PHP 8, интерфейс - средствами &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;/&lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt;, без использования JavaScript, поэтому функционально совместим с браузерами, где эта функция отключена.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;YGGtracker v1&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yggtracker_v1&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-898&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;базовые_функции&quot;&gt;Базовые функции&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Помимо каталога и поиска, на данный момент реализованы социальные функции: комментирование, лайки, просмотры а также информация об активных раздачах.
&lt;/p&gt;

&lt;p&gt;
Также, движок поддерживает фиды RSS, Sitemap и JSON &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;.
&lt;/p&gt;

&lt;p&gt;
В ближайшее время, планируется добавить такие функции, как лента активности, загрузка и обмен файлами, форки раздач и т.д.
Предусмотрена но не реализована в полной степени возможность локализации посредством Crodwin, Transifex и других площадок коллективных переводов.
&lt;/p&gt;

&lt;p&gt;
Подробнее о ходе разработки и ожидаемых функциях, можно ознакомиться в разделе README проекта.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0431\u0430\u0437\u043e\u0432\u044b\u0435_\u0444\u0443\u043d\u043a\u0446\u0438\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;899-1955&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;аутентификация&quot;&gt;Аутентификация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
YGGtracker использует внутрисетевой адрес для идентификации пользователя без привычной регистрации с указанием логина, пароля или email. 
Также для входа не требуется наличие сторонних централизованных серверов аутентификации. Подлинность пользователя при авторизации гарантируется соответствием уникального адреса IPv6, подписанного локально приватным ключом Yggdrasil в диапазоне 0200::/7.
&lt;/p&gt;

&lt;p&gt;
На данный момент, сервер YGGtracker использует для авторизации адрес удаленного узла (REMOTE_ADDRESS) и не предусматривает авторизацию посредством общих прокси-серверов, в том числе заголовков X-FORWARDED-FOR в виду возможности фальсификации.
Поэтому используя совместные ресурсы, такие как бесплатные прокси сервера и &lt;abbr title=&quot;Virtual Private Network&quot;&gt;VPN&lt;/abbr&gt;, пользователь должен учитывать факт возможности утери доступа к аккаунту или наличия сторонней активности от его имени.
&lt;/p&gt;

&lt;p&gt;
В перспективе, возможна разработка опции дополнительного ключа идентификации, позволяющего идентифицировать отдельного пользователя в рамках общеиспользуемого &lt;abbr title=&quot;Internet Protocol&quot;&gt;IP&lt;/abbr&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;1956-3786&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;виды_учетных_записей&quot;&gt;Виды учетных записей&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
YGGtracker является средой для работы с распределенным реестром данных, на момент написания статьи, поддерживаются два вида учетных записей - Distributed (распределенный) и Local (локальный).
&lt;/p&gt;

&lt;p&gt;
При первом входе, пользователь указывает тип профиля и способ обработки его персональных данных. 
&lt;/p&gt;

&lt;p&gt;
При выборе типа профиля Local, активность и адрес пользователя остаются приватными и в рамках текущего узла. 
В режиме Distributed - активность и адрес пользователя будут доступны независимым узлам YGGtracker посредством JSON &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;, что позволяет работать с контентом на любом из серверов YGGtracker, в случае отключения одного их них.
&lt;/p&gt;

&lt;p&gt;
На момент написания статьи, смены типа учетной записи не предусмотрено, но возможно будет добавлено в ближайшее время, в рамках настроек профиля.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0438\u0434\u044b \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0438\u0434\u044b_\u0443\u0447\u0435\u0442\u043d\u044b\u0445_\u0437\u0430\u043f\u0438\u0441\u0435\u0439&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:6,&amp;quot;range&amp;quot;:&amp;quot;3787-5186&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;децентрализация&quot;&gt;Децентрализация&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Данные в интернете представляют собой общественное достояние, создание которого требует усилий и времени. 
Централизованные решения чувствительны к цензуре и зависимы от администрации, с ростом популярности нередко злоупотребляющей рекламой или вовсе передающей проекты в руки третьих лиц, в частности компаний, редко заинтересованных в первичной цели проекта.
&lt;/p&gt;

&lt;p&gt;
Проект YGGtracker призван сделать BitTorrent раздачи доступными, а реестр каталога - устойчивым к отключениям и зависимости от определенной команды. 
В симбиозе с Yggdrasil, может быть легко организован любым желающим, как при наличии &lt;abbr title=&quot;Virtual Private Server&quot;&gt;VPS&lt;/abbr&gt;, так и в рамках домашнего сервера, например &lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:seedbox&quot; class=&quot;wikilink1&quot; title=&quot;yggdrasil:bittorrent:seedbox&quot; data-wiki-id=&quot;yggdrasil:bittorrent:seedbox&quot;&gt;сидбокса&lt;/a&gt;, не требуя при этом наличия выделенного &lt;abbr title=&quot;Internet Protocol&quot;&gt;IP&lt;/abbr&gt; или открытого 80/443 порта.
База данных при этом, может быть мгновенно загружена с других узлов или создана с нуля для локальных потребностей.
&lt;/p&gt;

&lt;p&gt;
Децентрализация данных YGGtracker совмещает использование следующих форматов взаимодействия:
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:7,&amp;quot;range&amp;quot;:&amp;quot;5187-6938&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;активный_режим&quot;&gt;Активный режим&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Активный режим используется для мгновенной синхронизации активности пользователя между другими узлами. 
Для этого, при выполнении определенного действия, например создания пользователем (с уровнем Distributed) раздачи, комментария и т.д., сервер YGGtracker отправляет другим узлам мета-данные события.
&lt;/p&gt;

&lt;p&gt;
Поскольку интерфейс не подразумевает работу с JavaScript, в частности асинхронными функциями,
такие события сохраняются в оперативной памяти сервера посредством Memcached и рассылаются другим узлам в течении минуты по расписанию crontab.
&lt;/p&gt;

&lt;p&gt;
Сделано это для того, чтобы пользователь ресурса не ощущал здержек при отсутствии подключения к другим узлам YGGtracker, в случае их временного отсутствия в сети.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439_\u0440\u0435\u0436\u0438\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:8,&amp;quot;range&amp;quot;:&amp;quot;6939-8223&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;пассивный_режим&quot;&gt;Пассивный режим&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Пассивный режим представляет собой обмен данными посредством фидов штатного &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;. 
Данный формат взаимодействия использует расписание crontab для создания локального и сбора удалённых фидов, оглашенных посредством манифеста отдельно взятого узла.
&lt;/p&gt;

&lt;p&gt;
Использование такого подхода во многом востребовано, поскольку позволяет актуализировать данные в случае, когда один из узлов был временно недоступен при синхронизации в активном режиме.
&lt;/p&gt;

&lt;p&gt;
Для идентификации данных, используется пара IPv6 пользователя и географически независимая метка времени (unixtime) контента.
&lt;/p&gt;

&lt;p&gt;
Первичные ключи (идентификаторы) экспортируются отдающими, но не импортируются принимающими узлами и необходимы только для оптимизации памяти, при локальном построении реестров связей.
&lt;/p&gt;

&lt;p&gt;
На данный момент, протокол поддерживает следующие фиды:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/manifest.json - в этом файле указаны основные настройки узла, такие как версия &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;, пути к фидам, сводки данных, настройки модерации, условия контента, а также перечень других узлов; принимающий узел использует этот файл для анализа и фильтрации данных. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/users.json - реестр пользователей*&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/magnets.json - реестр раздач*&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/downloads.json - реестр истории загрузок*&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/comments.json - реестр комментариев*&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/stars.json - реестр наборы избранных*&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; /api/views.json - реестр истории просмотров*&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
* от пользователей в группе Distributed
&lt;/p&gt;

&lt;p&gt;
Фиды генерируются по расписанию в статичные дампы, поэтому обращение к ним не оказывает нагрузки на раздающий сервер. 
Интервал импорта и экспорта обновлений зависит от отдельно взятого узла, как правило, в зависимости от активности сети.
&lt;/p&gt;

&lt;p&gt;
Время последнего обновления также указывается в поле updated файла manifest.json
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u043f\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0439_\u0440\u0435\u0436\u0438\u043c&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:9,&amp;quot;range&amp;quot;:&amp;quot;8224-11213&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit10&quot; id=&quot;установка&quot;&gt;Установка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:10,&amp;quot;range&amp;quot;:&amp;quot;11214-11246&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;системные_требования&quot;&gt;Системные требования&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для организации узла YGGtracker потребуется наличие программных пакетов Sphinx, Memcached, Crontab, Nginx / Apache, MySQL и PHP.
При наличии данного &lt;abbr title=&quot;Программное обеспечение&quot;&gt;ПО&lt;/abbr&gt;, наличие root или &lt;abbr title=&quot;Virtual Private Server&quot;&gt;VPS&lt;/abbr&gt; не обязательно.
&lt;/p&gt;

&lt;p&gt;
Сервер YGGtracker не взаимодействует с сервисом Yggdrasil напрямую, но в оригинальной реализации, должен работать на узле, принимающем подключения с диапазона 0200::/7 локально или посредством прокси-шлюза.
&lt;/p&gt;

&lt;p&gt;
Требования к процессору и оперативной памяти, во многом зависят от количества посетителей и объема данных, в частности, в режиме распределенного узла - размеров JSON фидов. 
В случае локального каталога, требования к серверу не больше чем, к обычному веб сайту.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435_\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:11,&amp;quot;range&amp;quot;:&amp;quot;11247-12417&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit12&quot; id=&quot;mysql&quot;&gt;MySQL&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Устанавливаем сервер из репозитория:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;apt install mysql-server&lt;/pre&gt;

&lt;p&gt;
Выполняем предварительную настройку безопасности утилитой:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mysql_secure_installation&lt;/pre&gt;

&lt;p&gt;
Добавляем базу данных, пользователя, указываем пароль и уровень доступа:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mysql -u root -p
mysql &amp;gt; CREATE DATABASE IF NOT EXISTS yggtracker;
mysql &amp;gt; CREATE USER &amp;#039;yggtracker&amp;#039;@&amp;#039;localhost&amp;#039; IDENTIFIED BY &amp;#039;YGGTRACKER_PASSWORD&amp;#039;;
mysql &amp;gt; GRANT SELECT, INSERT, UPDATE, DELETE on *.* TO &amp;#039;yggtracker&amp;#039;@&amp;#039;localhost&amp;#039; WITH GRANT OPTION;
mysql &amp;gt; FLUSH PRIVILEGES;
mysql &amp;gt; quit;&lt;/pre&gt;

&lt;p&gt;
Теперь можно приступить к импорту структуры базы данных.
&lt;/p&gt;

&lt;p&gt;
Проект и структура данных, расположены в файле /database/yggtracker.mwb. 
&lt;/p&gt;

&lt;p&gt;
Открыть данный формат можно официальным клиентом &lt;a href=&quot;https://www.mysql.com/products/workbench/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://www.mysql.com/products/workbench/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;MySQL Workbench&lt;/a&gt;.
Для импорта структуры, удобно использовать подключение по SSH, с помощью утилиты Database - Synchronize Model.
&lt;/p&gt;

&lt;p&gt;
* при подключении посредством адреса IPv6, может быть ошибка на этапе верификации хоста, обойти её можно добавив вместо &lt;abbr title=&quot;Internet Protocol&quot;&gt;IP&lt;/abbr&gt; - виртуального хоста в файл /etc/hosts или использовать IPv4.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;MySQL&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mysql&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:12,&amp;quot;range&amp;quot;:&amp;quot;12418-14009&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit13&quot; id=&quot;sphinx&quot;&gt;Sphinx&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;https://sphinxsearch.com/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://sphinxsearch.com/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Sphinx&lt;/a&gt; - поисковый сервер с открытым исходным кодом, поддерживающий широкий спектр настроек, включая морфологию, словоформы, 
а также имеет встроенные алгоритмы релевантности, включая удобную выборку посредством языка SphinxQL. 
&lt;/p&gt;

&lt;p&gt;
Помимо прочего, Sphinx ориентирован на быстродействие, в виду хранения поисковых индексов в оперативной памяти.
&lt;/p&gt;

&lt;p&gt;
Установка, как и в случае других пакетов, доступна из штатных репозиториев большинства дистрибутивов (включая ARM платформы):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;apt install sphinxsearch&lt;/pre&gt;

&lt;p&gt;
Далее, необходимо отредактировать файл конфигурации. 
Базовый пример также доступен /example/environment/sphinx.conf
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;nano /etc/sphinxsearch/sphinx.conf&lt;/pre&gt;

&lt;p&gt;
Используя пример из официального репозитория, указываем только актуальные параметры подключения к БД, остальные настройки можно оставить по-умолчанию.
&lt;/p&gt;

&lt;p&gt;
Сохраняем файл и запускаем сервис:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;searchd&lt;/pre&gt;

&lt;p&gt;
* иногда, запуск сервиса завершается ошибкой «FATAL: failed to create pid file &amp;#039;/run/sphinxsearch/searchd.pid&amp;#039;: No such file or directory». Чтобы это исправить, необходимо вручную создать директорию:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mkdir /run/sphinxsearch&lt;/pre&gt;

&lt;p&gt;
Теперь можно проверить работу индексатора, выполнив команду:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;indexer --all --rotate&lt;/pre&gt;

&lt;p&gt;
Для штатной работы YGGtracker, также указываем обновление индексов по расписанию crontab:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;@reboot searchd
@reboot indexer --all --rotate

* * * * * indexer magnet --rotate&lt;/pre&gt;

&lt;p&gt;
* в перспективе, планируется использование дельта-индексов, но в виду текущего объема данных в сети, в качестве временной меры, индекс обновляется ежеминутно.
&lt;/p&gt;

&lt;p&gt;
** если сервер Sphinx не запускается при перезагрузке системы, можно добавить в crontab перед командой searchd - конструкцию sleep или использовать 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;systemctl enable sphinxsearch.service&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Sphinx&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;sphinx&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:3,&amp;quot;secid&amp;quot;:13,&amp;quot;range&amp;quot;:&amp;quot;14010-16874&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;веб-сервер&quot;&gt;Веб-сервер&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0412\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:14,&amp;quot;range&amp;quot;:&amp;quot;16875-16906&amp;quot;} --&gt;
&lt;h4 class=&quot;sectionedit15&quot; id=&quot;nginx&quot;&gt;Nginx&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
Настройка веб-сервера может отличаться, в зависимости от потребностей. 
&lt;/p&gt;

&lt;p&gt;
В данном примере, Nginx используется для веб-сервисов в сети Yggdrasil, расположенных в поддиректориях. 
В частности, для YGGtracker будет использоваться адрес вида &lt;a href=&quot;http://[IP]/yggtracker&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;http://[IP]/yggtracker&quot; rel=&quot;ugc nofollow noopener&quot;&gt;http://[IP]/yggtracker&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Устанавливаем зависимости:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;apt install nginx memcached php-fpm php-memcached php-mysql php-pdo php-curl&lt;/pre&gt;

&lt;p&gt;
Поскольку работа с &lt;abbr title=&quot;Domain Name System&quot;&gt;DNS&lt;/abbr&gt; не подразумевается, редактируем стандартный файл настроек, предварительно создав его резервную копию:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

nano /etc/nginx/sites-available/default&lt;/pre&gt;

&lt;p&gt;
Актуальный пример содержимого также доступен в файле /example/environment/nginx
&lt;/p&gt;

&lt;p&gt;
Ниже приведен пример текущей версии, с комментариями:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;server {
	# Слушаем подключения только с IPv6, на 80 порту
	listen [::]:80 default;

	# Разрешаем доступ к ресурсу только в сети Yggdrasil
	allow 0200::/7;
	deny  all;

	# Оставляем по-умолчанию
	root /var/www/html;

	# Добавим поддержку файлов PHP
	index index.html index.htm index.nginx-debian.html index.php;

	# Название хоста и DNS в примере не используется
	server_name _;

	# Обработка ошибок 404
	location / {
		try_files $uri $uri/ =404;
	}

	# Подключаем сокет PHP актуальной версии
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;

		# Версию PHP можно узнать командой php -v
		fastcgi_pass unix:/run/php/php8.1-fpm.sock;
	}

	# Запрещаем доступ к случайно загруженным на хост скрытым файлам вроде .vscode, .git и тд, не смотря на то, что они находятся уровнем выше
	location ~ /\. {
		deny all;
	}
}&lt;/pre&gt;

&lt;p&gt;
Сохраняем и тестируем конфигурацию:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;nginx -t&lt;/pre&gt;

&lt;p&gt;
Перезапускаем сервер nginx:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;service nginx restart&lt;/pre&gt;

&lt;p&gt;
* на работающем сервере, перезапуск веб-сервера нежелателен, поэтому при внесении правок в конфигурацию, достаточно выполнить:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;service nginx reload&lt;/pre&gt;

&lt;p&gt;
Веб-сервер готов к работе.
&lt;/p&gt;

&lt;p&gt;
При этом, в корне веб-сервера, будет отображено стандартное приветствие nginx. 
Этот путь можно использовать для основного приветствия, домашней странички или использовать 302 редирект на директорию /yggtracker.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Nginx&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nginx&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:15,&amp;quot;range&amp;quot;:&amp;quot;16907-20118&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;yggtracker&quot;&gt;YGGtracker&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Установка из репозитория на GitHub включает межверсионные обновления и рекомендуется только для разработчиков.
&lt;/p&gt;

&lt;p&gt;
Для установки стабильного релиза, используется пакетный менеджер &lt;a href=&quot;https://getcomposer.org/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://getcomposer.org/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Composer&lt;/a&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;apt install composer&lt;/pre&gt;

&lt;p&gt;
Устанавливаем первую версию YGGtracker:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;composer create-project yggverse/yggtracker=1.0.0&lt;/pre&gt;

&lt;p&gt;
При использовании примера &lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/archive:yggdrasil:bittorrent:yggtracker:v1#nginx&quot; class=&quot;wikilink1&quot; title=&quot;archive:yggdrasil:bittorrent:yggtracker:v1&quot; data-wiki-id=&quot;archive:yggdrasil:bittorrent:yggtracker:v1&quot;&gt;конфигурации сервера Nginx&lt;/a&gt;, установить проект в целевую директорию можно командой:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;composer create-project yggverse/yggtracker /var/www/YGGverse/YGGtracker&lt;/pre&gt;

&lt;p&gt;
Настраиваем доступы для веб-сервера:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;chown -R www-data:www-data /var/www/YGGverse/YGGtracker
chmod -R 0770 /var/www/YGGverse/YGGtracker&lt;/pre&gt;

&lt;p&gt;
При удаленной работе с файлами, удобно добавить пользователя в группу www-data
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;usermod -a -G www-data $USER&lt;/pre&gt;

&lt;p&gt;
В целях безопасности, файлы приложения расположены уровнем выше публичной директории.
На текущем примере конфигурации, для доступа из сети, создадим ссылки:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;ln -s /var/www/YGGverse/YGGtracker/src/public /var/www/html/yggtracker&lt;/pre&gt;

&lt;p&gt;
При первом обращении к сайту, автоматически будут созданы файлы среды окружения (src/config/.env и src/config/env.default.php).
&lt;/p&gt;

&lt;p&gt;
Актуальная структура файла конфигурации, доступна в файле example/environment/env.example.php
&lt;/p&gt;

&lt;p&gt;
Редактируем, указывая подключение к серверам MySQL, Sphinx, memcached а также локальные настройки узла, например лимиты и правила ресурса.
&lt;/p&gt;

&lt;p&gt;
В частности, обращаем внимание на следующие константы:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;
// Подключение к серверу MySQL

define(&amp;#039;DB_PORT&amp;#039;, 3306);
define(&amp;#039;DB_HOST&amp;#039;, &amp;#039;localhost&amp;#039;);
define(&amp;#039;DB_NAME&amp;#039;, &amp;#039;&amp;#039;);
define(&amp;#039;DB_USERNAME&amp;#039;, &amp;#039;&amp;#039;);
define(&amp;#039;DB_PASSWORD&amp;#039;, &amp;#039;&amp;#039;);

// Добавляем модераторов, используя IPv6 в диапазоне 0200::/7 

define(&amp;#039;MODERATOR_IP_LIST&amp;#039;, (array)
  [
    &amp;#039;127.0.0.1&amp;#039;,
    // ...
  ]
);

// Если не хотим работать в децентрализованном формате - указываем false

define(&amp;#039;API_ENABLED&amp;#039;, true);&lt;/pre&gt;

&lt;p&gt;
Остальные настройки можно оставить по-умолчанию или изменить под свои требования.
&lt;/p&gt;

&lt;p&gt;
В режиме распределённого узла, при обмене данными, производится сверка совместимости условий манифеста.
Поэтому при несоответствии настроек, контент частично или полностью может быть проигнорирован, например, если длина заголовков вне диапазона принимающей стороны.
&lt;/p&gt;

&lt;p&gt;
Для максимальной совместимости, лучше использовать стандартный набор правил или предложить настройки другим участникам сети, посредством отправки PR.
&lt;/p&gt;

&lt;p&gt;
Подробности взаимодействия узлов и тонкая настройка &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt;, будет рассмотрена в отдельном разделе.
В ближайшее время планируется добавление поддержки мета-тегов, с помощью которых, можно интегрировать импорт и экспорт тематических данных, например для книжных, музыкальных или видео-каталогов.
&lt;/p&gt;

&lt;p&gt;
Завершая установку приложения, добавим расписание в crontab (актуальная версия расписаний и рекомендуемые интервалы, также указаны в файле /example/environment/crontab):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;* * * * * /usr/bin/php /YGGtracker/src/crontab/scrape.php      &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
* * * * * /usr/bin/php /YGGtracker/src/crontab/export/push.php &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
0 5 * * * /usr/bin/php /YGGtracker/src/crontab/import/feed.php &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
0 0 * * * /usr/bin/php /YGGtracker/src/crontab/export/feed.php &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
0 0 * * * /usr/bin/php /YGGtracker/src/crontab/sitemap.php     &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;/pre&gt;

&lt;p&gt;
После завершения конфигурации, можно вручную загрузить данные публичных профилей из других узлов:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;php /YGGtracker/src/crontab/import/feed.php&lt;/pre&gt;

&lt;p&gt;
Для эффективного обмена данными с другими участниками сети YGGtracker, также можно добавить свой узел в файл /src/config/nodes.json
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;YGGtracker&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;yggtracker&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:16,&amp;quot;secid&amp;quot;:16,&amp;quot;range&amp;quot;:&amp;quot;20119-25600&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;дополнительные_сервисы&quot;&gt;Дополнительные сервисы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Чтобы сбалансировать нагрузку на экосистему Yggdrasil при активном обмене файлами, не лишним будет организовать и использовать ориентированный на это &lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:public_peer&quot; class=&quot;wikilink1&quot; title=&quot;yggdrasil:public_peer&quot; data-wiki-id=&quot;yggdrasil:public_peer&quot;&gt;публичный пир&lt;/a&gt;, 
а также добавить его в файл /src/config/peers.json.
&lt;/p&gt;

&lt;p&gt;
О том, как настроить собственный торрент-трекер, описано в статье &lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:opentracker&quot; class=&quot;wikilink1&quot; title=&quot;yggdrasil:bittorrent:opentracker&quot; data-wiki-id=&quot;yggdrasil:bittorrent:opentracker&quot;&gt;Opentracker&lt;/a&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435_\u0441\u0435\u0440\u0432\u0438\u0441\u044b&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:25,&amp;quot;secid&amp;quot;:17,&amp;quot;range&amp;quot;:&amp;quot;25601-26228&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit18&quot; id=&quot;ссылки&quot;&gt;Ссылки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
&lt;a href=&quot;http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]/yggdrasil:bittorrent:yggtracker&quot; class=&quot;wikilink1&quot; title=&quot;yggdrasil:bittorrent:yggtracker&quot; data-wiki-id=&quot;yggdrasil:bittorrent:yggtracker&quot;&gt; Индексная страница проекта &lt;/a&gt; &lt;br/&gt;

&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0421\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u0441\u0441\u044b\u043b\u043a\u0438&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:25,&amp;quot;secid&amp;quot;:18,&amp;quot;range&amp;quot;:&amp;quot;26229-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Wed, 22 Oct 2025 08:13:21 +0000</pubDate>
        </item>
    </channel>
</rss>
