# Game Server с использованием Sunshine и Steam Этот проект предоставляет Docker-конфигурацию для запуска игрового сервера с использованием Sunshine и Steam, позволяя запускать игры на нескольких клиентах одновременно. ## Структура проекта - `Dockerfile` - файл для создания Docker-образа с Sunshine и Steam - `docker-compose.yml` - конфигурация для запуска нескольких контейнеров - `players/` - директория с конфигурациями и данными для каждого игрока - `p1_config/`, `p2_config/`, `p3_config/`, `p4_config/` - конфигурации для каждого клиента - `p1_steam/`, `p2_steam/`, `p3_steam/`, `p4_steam/` - данные Steam для каждого клиента ## Особенности - Поддержка 4 одновременных клиентов - Использование NVIDIA GPU для ускорения работы - Автоматическое восстановление контейнеров - Healthcheck для мониторинга состояния - Логирование для отладки ## Требования - Docker и Docker Compose - NVIDIA драйверы - NVIDIA Container Toolkit - 2x Tesla K80 (суммарно 4 GPU-чипа) ## Установка 1. Убедитесь, что у вас установлен Docker и Docker Compose 2. Склонируйте репозиторий 3. Настройте пути к папкам Steam в `docker-compose.yml` 4. Проверьте назначение GPU-чипов в `NVIDIA_VISIBLE_DEVICES`: - `player1` -> GPU `1` - `player2` -> GPU `2` - `player3` -> GPU `3` - `player4` -> GPU `4` GPU `0` в этой конфигурации обычно занят отдельной видеокартой (например, Quadro) и не используется для игровых контейнеров. 5. Запустите команду: ```bash docker-compose up -d ``` ### APT кэширующий прокси (опционально) Если у вас есть `apt-cacher-ng` (например `http://192.168.1.60:3142`), можно ускорить сборку образов: 1. Создайте `.env` рядом с `docker-compose.yml`: ```bash echo 'APT_PROXY=http://192.168.1.60:3142' > .env ``` 2. Пересоберите контейнеры: ```bash docker compose up -d --build ``` Прокси передается в `Dockerfile` через build-arg `APT_PROXY` и автоматически записывается в `/etc/apt/apt.conf.d/01proxy` при сборке. ## Настройка ### Конфигурация Sunshine Конфигурационные файлы Sunshine находятся в директориях `players/pX_config/`: - `apps.json` - список установленных игр - `credentials/` - SSL сертификаты `sunshine.conf` не хранится в репозитории и генерируется Sunshine автоматически при первом запуске контейнера. `Steam Big Picture` запускается от отдельного пользователя `steam` внутри контейнера. Данные Steam сохраняются в `players/pX_steam` и не теряются после перезапуска контейнеров/сервера. Важно: для корректной обработки ввода из Moonlight в контейнерах используется `Xorg dummy` (вместо `Xvfb`) и проброс `/run/udev` в контейнер. Это нужно, чтобы виртуальные устройства ввода Sunshine попадали в тот же X-сеанс, который стримится. ### Порты В Moonlight при ручном добавлении указывается один адрес в формате `IP:base_port`. `base_port` для каждого клиента: - `player1` -> `47989` (можно просто `IP`, это дефолт) - `player2` -> `48019` - `player3` -> `48049` - `player4` -> `48079` Порты проброшены для каждого клиента отдельно (формат: `host:container`): - `player1` - TCP: `47984-47990:47984-47990` - TCP/UDP: `48010:48010` - UDP: `47998-48000:47998-48000` - `player2` - TCP: `48014-48020:47984-47990` - TCP/UDP: `48040:48010` - UDP: `48028-48030:47998-48000` - `player3` - TCP: `48044-48050:47984-47990` - TCP/UDP: `48070:48010` - UDP: `48058-48060:47998-48000` - `player4` - TCP: `48074-48080:47984-47990` - TCP/UDP: `48100:48010` - UDP: `48088-48090:47998-48000` Moonlight использует `base_port` и вычисляет остальные порты автоматически. ### Первый запуск Steam При первом запуске Steam скачивает и распаковывает клиент (может занять 10-20 минут, в зависимости от канала). В это время в Moonlight может отображаться пустой/черный рабочий стол. Проверка прогресса для `player1`: ```bash docker exec -it game-player-1 bash -lc 'tail -f /home/steam/.local/share/Steam/debian-installation/logs/bootstrap_log.txt' ``` После завершения первичной загрузки повторно откройте сессию Moonlight и запустите `Steam Big Picture`. Если запуск Steam прерывается после выхода из терминала (`Hangup`), используйте лог: ```bash docker exec -it game-player-1 bash -lc 'tail -f /home/steam/steam-app.log' ``` ## Отладка Для проверки состояния контейнеров используйте: ```bash docker-compose ps ``` Для просмотра логов: ```bash docker-compose logs player1 ``` ## Улучшения 1. Добавлен healthcheck для лучшей стабильности 2. Добавлено логирование для отладки 3. Оптимизирован Dockerfile 4. Улучшена стабильность запуска контейнеров