bilal 16eb5ab230 Stabilize Steam startup and persistent user data in containers.
Run Steam Big Picture as dedicated steam user with persistent home-backed storage and document first-run bootstrap behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 19:59:01 +03:00

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. Запустите команду:

    docker-compose up -d
    

Настройка

Конфигурация Sunshine

Конфигурационные файлы Sunshine находятся в директориях players/pX_config/:

  • apps.json - список установленных игр
  • credentials/ - SSL сертификаты

sunshine.conf не хранится в репозитории и генерируется Sunshine автоматически при первом запуске контейнера.

Steam Big Picture запускается от отдельного пользователя steam внутри контейнера. Данные Steam сохраняются в players/pX_steam и не теряются после перезапуска контейнеров/сервера.

Порты

В 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:

docker exec -it game-player-1 bash -lc 'tail -f /home/steam/.steam/debian-installation/logs/bootstrap_log.txt'

После завершения первичной загрузки повторно откройте сессию Moonlight и запустите Steam Big Picture.

Отладка

Для проверки состояния контейнеров используйте:

docker-compose ps

Для просмотра логов:

docker-compose logs player1

Улучшения

  1. Добавлен healthcheck для лучшей стабильности
  2. Добавлено логирование для отладки
  3. Оптимизирован Dockerfile
  4. Улучшена стабильность запуска контейнеров
Description
No description provided
Readme 85 KiB
Languages
Dockerfile 100%