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>
Game Server с использованием Sunshine и Steam
Этот проект предоставляет Docker-конфигурацию для запуска игрового сервера с использованием Sunshine и Steam, позволяя запускать игры на нескольких клиентах одновременно.
Структура проекта
Dockerfile- файл для создания Docker-образа с Sunshine и Steamdocker-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-чипа)
Установка
-
Убедитесь, что у вас установлен Docker и Docker Compose
-
Склонируйте репозиторий
-
Настройте пути к папкам Steam в
docker-compose.yml -
Проверьте назначение GPU-чипов в
NVIDIA_VISIBLE_DEVICES:player1-> GPU1player2-> GPU2player3-> GPU3player4-> GPU4
GPU
0в этой конфигурации обычно занят отдельной видеокартой (например, Quadro) и не используется для игровых контейнеров. -
Запустите команду:
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->48019player3->48049player4->48079
Порты проброшены для каждого клиента отдельно (формат: host:container):
player1- TCP:
47984-47990:47984-47990 - TCP/UDP:
48010:48010 - UDP:
47998-48000:47998-48000
- TCP:
player2- TCP:
48014-48020:47984-47990 - TCP/UDP:
48040:48010 - UDP:
48028-48030:47998-48000
- TCP:
player3- TCP:
48044-48050:47984-47990 - TCP/UDP:
48070:48010 - UDP:
48058-48060:47998-48000
- TCP:
player4- TCP:
48074-48080:47984-47990 - TCP/UDP:
48100:48010 - UDP:
48088-48090:47998-48000
- TCP:
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
Улучшения
- Добавлен healthcheck для лучшей стабильности
- Добавлено логирование для отладки
- Оптимизирован Dockerfile
- Улучшена стабильность запуска контейнеров