Справочник платформы v2.0
Восемь вкладок ниже — краткая и расширенная информация без перехода на другие URL. Прямые ссылки: #install, #api, #reference и т.д.
Обзор Tura Arena
Self-hosted платформа для кастомных лиг Dota 2: сетки, lobby, судейство и интеграции. Рассчитана на любительские и полупрофессиональные турниры — от корпоративных кубков до региональных отборочных.
Турнирный движок
Bo1/Bo3/Bo5, tech win, отложенные слоты, автопродвижение по сетке.
Lobby automation
Имена, пароли, ready-check, повтор при сбое Steam worker.
Журнал аудита
Действия судей и организаторов с привязкой к match id и сессии.
Мультисезонность
Несколько турниров на одном инстансе, изоляция ключей API.
Роли
| Роль | Доступ |
|---|---|
| Owner | Сезоны, API-ключи, бэкапы, интеграции |
| Organizer | Регламент, регистрация, сетка, расписание |
| Referee | Матч, паузы, реплеи, forfeit |
| Observer | Чтение статистики и протоколов |
Установка и инфраструктура
Рекомендуемый путь — Docker Compose на Linux. Windows Server 2022 и systemd bare metal тоже поддерживаются. Полная инструкция →
git clone https://github.com/tura-arena/tura-arena.git
cd tura-arena/deploy && cp .env.example .env
docker compose up -d
curl -sS https://your-domain/health | jq
Минимальные требования
- CPU / RAM
- 4 vCPU, 8 GB RAM (пилот); 8 vCPU, 16 GB для 200+ матчей/нед
- PostgreSQL
- 15+, ежедневный pg_dump, retention 14 дней
- Redis
- 7+, persistence AOF для очереди lobby
- Steam
- Отдельный бот, Guard, без ручного входа во время турнира
Ключевые переменные
| Переменная | Назначение |
|---|---|
TURA_DATABASE_URL | PostgreSQL |
TURA_REDIS_URL | Очереди и сессии |
STEAM_ACCOUNT_JSON | Бот lobby |
TURA_PUBLIC_URL | HTTPS URL админки |
Турниры и форматы
Сетка генерируется после закрытия регистрации или вручную организатором. Каждый слот получает id для API и lobby. Подробнее →
| Формат | Сценарий |
|---|---|
| Single elimination | Быстрые кубки 8–32 команд |
| Double elimination | Лан, онлайн-лиги, optional grand final reset |
| Groups + playoffs | Отборочные сезоны, round-robin в группах |
| Swiss | Открытые квалы, фиксированное число раундов |
Swiss: tie-breakers
Порядок по умолчанию: Buchholz → head-to-head → map diff. Конфиг в tournament.yaml:
format: swiss
rounds: 5
tie_breakers: [buchholz, head_to_head, map_diff]
Регламент (чек-лист организатора)
- Лимит пауз и кто может запросить
- Stand-in: разрешены или нет, дедлайн заявки
- Ready-check (обычно 90 с) и последствия no-show
- Минимальный патч клиента и регион lobby
Админ-панель
Единый UI для расписания, очереди lobby, live-матчей и протоколов. Полное описание →
Dashboard
- Live now — GSI или ручной статус «в игре»
- Queue — глубина Redis для создания lobby
- Incidents — просроченный ready-check, споры
- Steam — connected / reconnecting / error
Действия судьи на матче
| Действие | Эффект |
|---|---|
| Start ready-check | Таймер, уведомление капитанам |
| Mark map win | Счёт серии, опционально подтверждение GSI |
| Tech win / forfeit | Продвижение в сетке + запись в аудит |
| Remake lobby | Новый пароль, закрытие старого lobby ботом |
API v2 и webhooks
JSON REST, Bearer token, события с HMAC-подписью. Спецификация →
GET /api/v2/tournaments/{id}/bracket
Authorization: Bearer tura_live_xxxxxxxx
События webhook
| type | Когда |
|---|---|
match.scheduled | Назначены команды и время |
lobby.created | Lobby в Steam готов (без пароля в теле) |
match.live | Старт игры (GSI или судья) |
match.finished | Серия завершена |
bracket.updated | Любое изменение сетки |
Лимиты
600 req/min на token, burst 60. Webhook — 5 попыток с exponential backoff. Для POST regenerate lobby поддерживается Idempotency-Key.
Live, GSI и стрим
Game State Integration даёт draft/live/end без ручного ввода. DotaTV token — для задержки трансляции и OBS-оверлеев.
Настройка GSI
В gamestate_integration_tura.cfg укажите endpoint и секрет:
"uri" "https://your-domain/gsi/dota"
"token" "your-hmac-secret"
"data"
{
"provider" 1
"map" 1
"player" 1
"hero" 1
}
Секрет должен совпадать с TURA_GSI_SECRET на сервере.
Задержка стрима
- Типичная задержка
- 5–10 мин для онлайн-лиг (настраивается per tournament)
- DotaTV
- Token выдаётся Observer; не публикуйте в открытый chat
- Анти-спoiler
- Публичная страница bracket может скрывать live-счёт до задержки
gamestate_integration клиента турнира.Команды и регистрация
Состав команд (roster) привязывается к Steam ID игроков. Капитан подтверждает заявку перед первым матчем сезона.
Способы регистрации
- Форма на портале лиги (капитан + до 10 игроков в резерве)
- CSV import (Organizer): колонки
team_name, captain_steam_id, player_steam_ids - API POST
/api/v2/teamsдля интеграции с Discord-ботом - Invite-only: закрытая регистрация + код сезона
Stand-in и замены
По умолчанию stand-in запрещён. Если регламент разрешает — Organizer включает «stand-in window» (например 24 ч до матча) и лимит использований за сезон.
Проверки перед матчем
| Проверка | Описание |
|---|---|
| Patch | Клиент ≥ TURA_PATCH_MIN |
| Roster lock | Игроки в lobby должны быть в заявке (или stand-in одобрен) |
| Region ping | Рекомендация: lobby region ближе к большинству roster |
Справочник и FAQ
Глоссарий, совместимость и ответы на частые вопросы. Версии доки: история, манифест doc-versions.json.
Глоссарий
- Practice lobby
- Кастомное lobby Dota 2, создаётся Steam-ботом платформы
- Ready-check
- Окно подтверждения готовности капитанов перед выдачей пароля
- Tech win
- Техническая победа без игры (no-show, дисквалификация по регламенту)
- GSI
- Game State Integration — HTTP callback из клиента Dota 2
- Bye
- Автопроход в сетке при нечётном числе команд
Совместимость
| Компонент | Версия |
|---|---|
| Tura Arena (app) | ≥ 2.0.0 для API v2 |
| Dota 2 client | patch ≥ 7.39 (настраивается) |
| PostgreSQL | 15 – 16 |
| Redis | 7.x |