> ## Documentation Index
> Fetch the complete documentation index at: https://nexohub.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Конфигурация прокси

> plugins/nexohub/config.yml на вашем прокси Velocity или BungeeCord.

Всё находится здесь. Бэкендам нужны только адрес и секрет.

```yaml theme={null}
http:
  bind: 0.0.0.0
  port: 8085
  public_address: ""
  secret: ""

packs:
  host: hermes
  mixed_content: false

groups: {}
servers: {}

notify:
  webhook_url: ""
```

На новой установке секрет генерируется автоматически при первом запуске. Скопируйте его
на каждый бэкенд — и готово.

## Откуда берётся пак

```yaml theme={null}
packs:
  host: hermes
```

| | |
| - | - |
| `hermes` | собственный хостинг Nexo. Без аккаунта, без ключей, ничего вашего не раскрывается. По умолчанию |
| `polymath` | более старый бесплатный хостинг Nexo |
| `s3` | любой S3-бакет: AWS, Cloudflare R2, Backblaze, Hetzner |
| `lobfile` | lobfile.com, нужен API-ключ |
| `proxy` | пак раздаёт ваш прокси |

Всё, кроме `proxy`, — это тип пак-сервера Nexo, поэтому сам хостинг настраивается обычным
для Nexo способом в `Pack.server`. Если выбрать `proxy`, дополнительно нужен открытый для
игроков `http.port` и `http.public_address`, указывающий на адрес, доступный извне вашей
сети. См. [хостинг](/ru/guides/hosting).

<Note>
  Мультипаку нужен хостинг, URL которого содержит хэш пака: `hermes`, `s3` или `proxy`.
  NexoHub предупреждает при запуске, если вы выбрали один из двух других вариантов при
  включённом мультипаке.
</Note>

## Ваши бэкенды используют разные HUD или модели?

```yaml theme={null}
packs:
  mixed_content: false
```

`false`, если у всех одни и те же. Каждый бэкенд собирает одно и то же, поэтому у них
общий пак и одна загрузка без необходимости что-либо объединять.

`true`, если они различаются. Хаб выдаёт каждому бэкенду объединение всего, что они
сгенерировали, слитое в один пак, — так что HUD, определённый только на pvp, всё равно
виден игроку на lobby. Это единственный способ доставить ассеты BetterHUD и ModelEngine
на другие бэкенды, поскольку их файлы остаются на сервере, где вы их установили.

<Warning>
  Не устанавливайте `true` вместе с генератором, который вы выключили (`off`) в
  [generators](#settings). Он нумерует сам по себе, и его объединение подсовывает одному
  бэкенду модели другого.
</Warning>

## Группы и настройки для отдельных серверов

Большинству сетей ничего из этого не нужно. Это на случай, когда четыре сервера хотят одно
и то же, а вам удобнее сказать это один раз.

Файлы кладутся в `nexo-data/`, а настройки — в `config.yml`, теми же тремя слоями:

| Слой | Файлы | Настройки |
| - | - | - |
| все | `_shared/` | `defaults:` |
| часть бэкендов | `groups/<name>/` | `groups.<name>:` |
| один бэкенд | `servers/<name>/` | `servers.<name>:` |

Каждый слой имеет приоритет над предыдущим.

```yaml theme={null}
groups:
  minigames:
    servers: [bedwars, skywars]
    poll_seconds: 30

servers:
  pvp:
    prune: false
```

Группа только со списком бэкендов тоже работает и наслаивает только файлы.

### Настройки

Всё из этой таблицы можно указать в любом из трёх слоёв.

| Настройка | По умолчанию | Что делает |
| - | - | - |
| `reload_after_sync` | `true` | перезагружать Nexo при получении новых файлов |
| `reload_timeout_seconds` | `60` | сколько времени даётся Nexo на сборку пака, прежде чем она считается неудачной |
| `poll_seconds` | `60` | как часто бэкенд переспрашивает хаб. `0` — никогда не спрашивает |
| `prune` | `true` | удалять файлы, которыми владеет хаб и которых у него больше нет, чтобы бэкенд не разъезжался |
| `exclude` | `[]` | пути в `plugins/`, которые бэкенд никогда не получает |
| `contribute` | `true` | публиковать то, что там собирают BetterHUD и подобные |
| `contribute_exclude` | `[]` | записи `external_packs/`, которые бэкенд оставляет себе |
| `generated_prefixes` | `[generated-]` | папки в `external_packs/`, имя которых начинается с одного из этих префиксов, считаются выводом плагина. См. [плагины, собирающие свои ассеты](/ru/guides/plugin-packs) |
| `preserve` | `Pack.server` | настройки, которые отправка никогда не должна перезаписывать |
| `mirror_obfuscation_cache` | `true` | переиспользовать обфускацию, уже выполненную другим бэкендом |
| `obfuscation_wait_seconds` | `180` | сколько её ждать |
| `generators` | | см. ниже |

`generators` определяет, что NexoHub делает для одного плагина, собирающего ассеты:

```yaml theme={null}
generators:
  betterhud: share-files
```

`managed` — значение по умолчанию: оно держит нумерацию этого плагина на хабе, так что
бэкенды согласованы, не храня файлы друг друга. `share-files` вместо этого рассылает его
файлы по сети. `off` не трогает его вовсе. Ключи: `betterhud`, `bettermodel`,
`modelengine`, `mythichud`, `animotions`, `overdrive` и `tooltips`.

`share-files` действует для каждого бэкенда отдельно. Свои файлы отправляют и чужие получают
только бэкенды, для которых он задан, поэтому сервер, оставленный на `managed`, хранит только
свои модели, даже если другие делятся своими. Задайте его для
[группы](#groups-and-per-server-settings), чтобы делиться только между некоторыми серверами.

`share-files` нужен, только если бэкенд при запуске сообщает, что использует версию,
за которой NexoHub не может следить. Он сам называет ключ, который нужно установить.

<Note>
  Бэкенд, задавший одну из этих настроек в собственном `config.yml`, сохраняет своё значение
  и сообщает об этом при запуске. Удалите строку там, чтобы вернуть управление хабу. См.
  [конфигурацию моста](/ru/reference/bridge-config#overriding-the-hub-on-one-backend).
</Note>

## Уведомления

```yaml theme={null}
notify:
  webhook_url: ""
  events: [push, validation_failed, reload_failed, collision, version_drift, rollback, stage]
```

Подойдёт всё, что принимает `{"content": "..."}`, так что вебхук Discord работает. Пустое
значение ничего не отправляет. Уберите `push` из `events`, чтобы слышать только о том,
что требует вашего внимания.

## Всё остальное

Вряд ли вы будете это трогать.

| Настройка | По умолчанию | Что делает |
| - | - | - |
| `http.bind` | `0.0.0.0` | интерфейс, на котором слушает хаб |
| `http.api_address` | `""` | вынести маршруты только для бэкендов на отдельный порт: `8086` или `"10.0.0.1:8086"`. Пустое значение — общий с публичным. См. [доступность извне](/ru/guides/exposure) |
| `sync.watch` | `true` | отправлять автоматически при изменении `nexo-data/` |
| `sync.debounce_seconds` | `3` | сколько ждать, пока правки устаканятся |
| `sync.validate` | `true` | парсить каждый файл перед отправкой и не отправлять ничего, если хоть один не парсится |
| `sync.snapshots` | `20` | сколько версий `nexo-data/` хранить для `/nexohub rollback` |
| `sync.push_on_server_populate` | `true` | догонять бэкенд при входе его первого игрока |
| `packs.collect_generated` | `true` | при выключении сгенерированный вывод отклоняется по всей сети |
| `packs.share_sources` | `true` | при выключении исходные файлы генераторов отклоняются по всей сети |
| `packs.keep` | `5` | сколько zip-архивов паков хранить на диске. Используемый никогда не удаляется |
| `packs.verify_hash` | `true` | отклонять загрузку, байты которой не совпадают с её хэшем |
| `packs.claim_timeout_seconds` | `120` | через сколько другой бэкенд может повторить зависшую загрузку |

Большинство из них поставляются закомментированными. Они всё равно работают, если их
прописать.

<Note>
  `packs.hosting` и `packs.delegate` заменены на `packs.host`, `packs.contributions` — на
  `packs.mixed_content`, а `http.api_port`/`http.api_bind` — на `http.api_address`. Все
  старые написания продолжают работать, так что менять ничего не нужно.
</Note>

## Файлы, которые пишет хаб

| Путь | Содержимое |
| - | - |
| `config.yml` | этот файл |
| `.hubstate.json` | что каждый бэкенд сообщил в последний раз |
| `packurls.json` | опубликованные внешние ссылки, только при делегировании |
| `packchoices.json` | какой пак раздаёт сеть |
| `nexo-data/` | ваши файлы |
| `packs/`, `contributions/`, `sources/`, `snapshots/` | то, что хранит хаб |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.