ctf-ad-mirror-tool-rust/docs/configuration.md

75 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Конфигурация и ForcAD
## Где хранится
Обычный запуск: `./target/release/mirror-tool --config mirror.toml`.
Шаблон — `mirror.example.toml`; файл выбирается флагом `--config`.
Локальное демо этого проекта использует `data/demo/mirror.toml`, а изменения
из панели — `data/demo/state.json`. Оба файла исключены из Git. Это тестовая
конфигурация loopback с публичным тестовым паролем, не конфигурация для игры.
В `[web]` задаётся `state_file`. Относительный путь считается от каталога TOML.
После первого сохранения из UI список команд/сервисов загружается из state-файла,
а сеть, мониторинг, web и scoreboard — по-прежнему из TOML. Изменение `[[teams]]`
или `[[services]]` в TOML не заменяет существующее сохранённое состояние.
Чтобы заново импортировать стартовую топологию, остановите процесс, переместите
state-файл в резервную копию и запустите процесс снова. Не удаляйте рабочее
состояние во время работы.
## ForcAD
1. В начало TOML, **перед секциями**, добавьте адрес своей команды:
```toml
main_team_ip = "192.0.2.10"
```
2. Добавьте секцию с адресом scoreboard вашей авторизованной игры:
```toml
[scoreboard]
kind = "forcad"
url = "http://scoreboard.example:8080"
poll_interval_ms = 3000
stale_after_ms = 15000
```
Это примеры адресов, их нужно заменить. Используется Engine.IO 4 / Socket.IO
namespace `/game_events`; URL задаётся корневой, без `/socket.io`, query и токенов.
ForcAD-соединение постоянное; `poll_interval_ms` не означает новый handshake
каждые 3 секунды. После изменения TOML нужен перезапуск процесса.
3. Через «Команды» добавьте IP каждой команды и **точное имя из scoreboard**.
Название сервиса тоже должно совпадать с именем задания в scoreboard.
IP существующей команды менять нельзя: добавьте новую и выберите её в маршруте.
Для прямого IP у custom-прокси отдельная команда не нужна.
4. В настройках сервиса (клик по названию) задайте адрес/порт слушателя и
реальный upstream-порт. Например, прокси `0.0.0.0:18080`, сервис команд `8080`.
Кружок выбирает primary; строка — реплику. Затем включите прокси.
5. Робот включает автоматический выбор **из назначенных реплик**. Статус TCP,
свежесть scoreboard и cooldown влияют на решение. Открытые TCP-сессии сохраняют
прежний upstream, новые используют выбранный. Системные маршруты не меняются.
Кнопка ⓘ показывает состояние scoreboard и краткую инструкцию. Верхняя полоска
сервиса относится к своей команде (`main_team_ip`), а не к выбранному upstream.
Серый статус означает отсутствие свежих данных, а не успех checker.
Пароль обычного процесса задаётся в `MIRROR_PASSWORD` (минимум 12 символов),
не в TOML. Тестовый fixture для настоящей игры не используйте; запускайте бинарник
напрямую с собственным конфигом и паролем. Реальная игра этой проверкой не затрагивалась.
## Повторяемое локальное демо
```sh
python3 scripts/ui_fixture.py target/release/mirror-tool --data-dir data/demo
```
Утилита сохраняет существующий TOML/state и не перезаписывает их. Без `--data-dir`
всё состояние временное. Для отдельной проверки используйте `--port-offset 100`:
панель 16800, proxy 18181, echo upstream 18182. Не запускайте второй fixture на
тех же портах или с той же папкой состояния. Смещение применяется к новому шаблону;
у существующего TOML порты остаются как записано в файле.