Установка
Docker на Linux — основной путь. Вкладки ниже: env, Steam, Windows Server, эксплуатация. Ссылки: #env, #steam, #ops.
Docker Compose
API, lobby worker, PostgreSQL, Redis, nginx с TLS.
git clone https://github.com/tura-arena/tura-arena.git
cd tura-arena/deploy
cp .env.example .env
docker compose up -d
Первый запуск создаёт owner и одноразовый пароль в логе api.
Проверка
curl -sS https://your-domain/health | jq
curl -sS -H "Authorization: Bearer $TOKEN" https://your-domain/api/v2/me
Ожидаемый health: {"status":"ok","db":"ok","redis":"ok","steam":"connected"}.
Обновление
docker compose pull && docker compose up -d
docker compose exec api tura migrate
Переменные окружения
| Переменная | Обязательна | Описание |
|---|---|---|
TURA_DATABASE_URL | да | PostgreSQL connection string |
TURA_REDIS_URL | да | Очереди lobby и кэш сессий |
STEAM_ACCOUNT_JSON | да | Учётные данные бота для lobby |
TURA_PUBLIC_URL | да | HTTPS URL админки |
TURA_GSI_SECRET | нет | HMAC для GSI |
TURA_PATCH_MIN | нет | Мин. патч (default 7.39) |
TURA_API_V2_ENABLED | нет | true по умолчанию в 2.0 |
TURA_LOG_LEVEL | нет | info / debug |
Staging: отдельный URL и тестовый Steam-бот, не смешивайте с prod lobby.
Steam bot
Steam Guard обязателен. Аккаунт только для worker.
Укажите Lobby region ближе к игрокам. Между массовыми созданиями lobby — пауза из-за лимитов Valve.
Не храните
STEAM_ACCOUNT_JSON в git. Файл на сервере — chmod 600.Windows Server 2022
WSL2 + Docker или Docker Desktop; TLS через win-acme или внешний LB.
Steam worker предпочтительнее на Linux (стабильнее GC). Unit-файлы systemd — в deploy/systemd/.
Эксплуатация и ошибки
Ежедневный pg_dump, Redis AOF. Алерты на queue depth и steam: disconnected.
LoggedInElsewhere
Один worker, один IP, перезапуск, без ручного входа в бота.
Lobby не создаётся
Нужен
https в TURA_PUBLIC_URL, проверьте патч турнира и очередь Redis.GSI не приходит
URL
/gsi/dota, секрет = TURA_GSI_SECRET.