Support APT_PROXY build arg in Docker/Compose, document setup, and include a safe .env.example template for local cache usage. Co-authored-by: Cursor <cursoragent@cursor.com>
139 lines
6.0 KiB
Markdown
139 lines
6.0 KiB
Markdown
# 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 при ручном добавлении указывается один адрес в формате `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. Улучшена стабильность запуска контейнеров
|
||
|