В Sourcemod есть расширение для обработки крашей Accelerator, которое в свою очередь отправляет данные во внешний сервис под названием Throttle для постобработки, вывода статистики по крашам, представляя более удобный интерфейс для просмотра информации по крашу. Throttle размешен на сервере автора расширения. По умолчанию, обычно туда и уходят сведения о краше с вашего сервера. Но далеко не всем по разным причинам подходит ресурс Throttle от автора расширения, поэтому я бы хотел в данной статье рассказать, как его запустить у себя локально так, чтобы данные о краше уходили на ваш сервер Throttle и были видны только вам.

Так как код Throttle был написан давно, обновляется редко, использует старые компоненты, запускать мы его будем в Docker. Разворачивать с нуля его на локалке или сервере - гиблое дело, занимает много времени, что даже опытный разработчик завоет, пока его соберет. Учитывая, что оно подымается локально, нам нужно будет сделать его доступным вовне с помощью Ngrok, чтобы игровой сервер мог отправлять запросы к нашему локальному Throttle. Но обо всем по порядку.

1. На вашем компьютере должен быть установлен Docker и плагин к нему - Compose. По умолчанию, в новых версиях Docker этот плагин уже идет в составе. Решить этот вопрос можно просто - устанавливаем на свой компьютер Docker Desktop. Переходим на страницу по ссылке, крутим вниз и выбираем вашу ОС для скачивания:

1736696239866.png
2. Устанавливаем его на компьютер. Возможно установщик попросит перезагрузить компьютер - делаем. Запускаем Docker Desktop, пока что на этом все с этой программой.
3. Скачиваем к себе репозиторий webman/throttle-dockerized с докеризованной версией Throttle. Клонируем его. Если не знаете, что это, то просто переходим по ссылке, справа будет зеленая кнопка Code, нажимаем, скачиваем ZIP-архив:

1736696813200.png

4. Распаковываем архив в удобном месте, открываем через текстовый редактор файл docker/ngrok/ngrok.yml. Здесь в поле authtoken вместо your_token надо будет прописать токен, полученный от сервиса Ngrok.
5. Локально поднятый Throttle будет доступен только на нашем компьютере и никому больше не виден, а игровому серверу для отправки сведений о краше нужно будет отправлять на какой-то публичный адрес, который доступен в интернете. Решить эту проблему поможет сервис Ngrok. Он выдаст нам публичный адрес, который будет перенаправлять все запросы на наш локальный Throttle. Регистрируемся по ссылке, заполняем требуемые данные, активируем почту. Для работы нам достаточно будет бесплатной версии продукта. Для жителей РФ стоит иметь в виду, что Ngrok ограничивает доступ к своему сервису. Как получить к нему доступ в таком случае, я думаю сообразите. Ваше решение должно применяться на все время, пока работает Throttle.
6. После регистрации в личном кабинете слева в меню находим Getting Started > Your authtoken. Переходим, сверху будет блок с вашим токеном, копируем его и вставляем в упомянутый выше файл docker/ngrok/ngrok.yml:
1736697622634.png
7. Теперь у нас все готово для запуска. Открываем командную строку или терминал и переходим в папку, куда вы распаковали архив с проектом. В новых версиях Windows можно внутри папки нажать правой кнопкой и выбрать пункт открытия папки в терминале/Shell/командной строке (не знаю, как точно называется). В терминале вводим команду docker compose up -d. Ждем, пока все необходимые для работы компоненты скачаются и запустяться. Если все идет хорошо, то у запущенных сервисов будут статусы выделены зеленым цветом (Started, Healthty и т.д.). Если что-то пошло не так, пишем в тему, приложив логи, скрины (об этом ниже будет написано)
8. После того, как все успешно запущено, можно перейти в браузер и открыть URL: http://localhost:8001. Убеждаемся, что видна главная страница Throttle. Может не открыться с первого раза, выдавая ошибку 502, перезагрузите страницу через некоторое время - запускается не сразу. Особенностью данной версии проекта является то, что здесь отключена авторизация, поэтому краши можно смотреть быстро и свободно без лишней головной боли с аутентификацией.
9. Тем временем, Ngrok скорее всего после запуска сервиса выдал нам публичный адрес. Слева в меню будет пункт Endpoints. Переходим, должен отобразиться ваш уникальный публичный адрес:
1736698277373.png

10. Нажимаем на этот адрес, попадаем в карточку эндпоинта, копируем его к себе:
1736698652785.png
11. Используем этот эндпоинт для настроек Accelerator. На игровом сервере открываем файл addons/sourcemod/configs/core.cfg, редактируем переменные соответствующим образом:
Настройки Accelerator:
"MinidumpUrl" "http://your-unique-public-address.ngrok-free.app/submit"
"MinidumpSymbolUrl" "http://your-unique-public-address.ngrok-free.app/symbols/submit"
"MinidumpBinaryUrl" "http://your-unique-public-address.ngrok-free.app/binary/submit"
Нужно вместо http://your-unique-public-address.ngrok-free.app указать эндпоинт, который вы скопировали на предыдущем шаге. Сохраняем изменения в файле, загружаем на сервер.

12. Крашим сервер :D или дожидаемся пока он уйдет туда, главное не выключать Throttle до этого времени и не перезагружать компьютер. После перезагрузки докер скорее всего заново все запустит (если Docker Desktop включен при запуске), но Ngrok выдаст уже другой публичный адрес и старый станет недействителен, и, соответственно, данные о краше не отправлятся
13. Если сервер крашнулся, то вы можете понаблюдать, какие запросы приходят в Throttle через мониторинг Ngrok. В карточке эндпоинта сверху в углу есть кнопка Inspect Traffic, переходим по ней:

1736699375123.png
На странице мониторинга будут отображены запросы submit, symbols/submit. Если данные о краше загружаются успешно, то будет код 200 (успешно). Если это не так, то открываем проблемный запрос в мониторинге, смотрим что отправляет Throttle в ответе (вкладка Response).
14. После отправки всех сведений о краше, Accelerator сообщит об этом в консоли и логах сервера. В логах сервера будет уникальный CRASH ID, копируем его, переходим в наш Throttle по адресу http://localhost:8001, вбиваем туда указанный CRASH ID и смотрим, из-за чего сервер крашнулся.
15. Если Throttle больше не нужен, то выключаем его командой docker compose down --remove-orphans. В ином случае, если Docker Desktop у вас включается при запуске компьютера, то он будет автоматически запускать его всегда.

Если что-то пошло не так, можно изучить логи запущенных сервисов командами:
Команды для отладки:
docker compose exec -it throttle cat /var/www/throttle/logs/main.log
docker compose logs throttle
docker compose logs ngrok
docker compose logs webserver
docker compose logs database
docker compose logs redis
Запускать их нужно так же в папке с проектом, откуда его запускали.

На этом все! Я потратил много времени на то, чтобы разобраться, как его запустить и заставить работать.
Буду благодарен, если оставите положительную реакцию или комментарий :)