Update README with Steam launch scripts, shm sizing, Moonlight setup, and troubleshooting; add рекомендации.md and ignore local SSH keys. Co-authored-by: Cursor <cursoragent@cursor.com>
4.5 KiB
Проверенные рекомендации
Ниже только те пункты, которые подтверждаются текущей конфигурацией проекта и практикой запуска на сервере.
1) Healthcheck Sunshine
Текущий вариант ["CMD", "pgrep", "sunshine"] рабочий в этой сборке: в контейнере есть /usr/bin/sunshine, процесс виден как sunshine.
healthcheck:
test: ["CMD", "pgrep", "sunshine"]
interval: 30s
timeout: 10s
retries: 3
2) Entrypoint и tini
- Контейнер стартует через
tini→/entrypoint.sh→sunshine. tiniнужен, чтобы fluxbox и другие дочерние процессы не превращались в zombie и панель задач оставалась видимой.- Проверка:
docker exec game-player-1 cat /proc/1/comm→tini.
3) Shared memory (/dev/shm)
- Для Steam CEF обязательно
shm_size: "2gb"вdocker-compose.yml. - При 64 MB (дефолт Docker) в
cef_log.txtпоявляетсяLess than 64MB of free space— окно входа мигает. - После изменения
shm_sizeнужен--force-recreate, а не простоrestart.
docker exec game-player-1 df -h /dev/shm
4) Права на volume Steam
Проблема прав на bind-mount критична. Правильный подход — точечный chown в entrypoint.sh и start-steam.sh:
mkdir -p /home/steam/.local/share/Steam /tmp/xdg-steam /home/steam/tmp
ln -sfn /home/steam/.local/share/Steam /home/steam/.steam
chown -R steam:steam /home/steam /tmp/xdg-steam
Не рекомендуется: chmod -R 777 /DATA/AppData/game-server/players/.
5) Xorg dummy и ввод Moonlight
- Используется минимальный
xorg-dummy.confбез привязки к/dev/input/mice. - Добавление
InputDeviceс физическим устройством может вернуть проблему, когда ввод уходит в хостовую консоль. - Ввод Moonlight обрабатывается через Sunshine/XTest в изолированном X-сессии
:99.
6) Запуск Steam (start-steam.sh)
Текущий подход:
- Запуск от
runuser -u steamсDISPLAY=:99,XDG_RUNTIME_DIR=/tmp/xdg-steam,TMPDIR=/home/steam/tmp - Двухфазный старт:
-silent -no-cef-sandbox, затем однократноsteam://open/gamepadui - Блокировка
flock— защита от двойного запуска при быстрых кликах в Moonlight - Если Steam уже работает и UI виден — процесс не убивается
keep-steam-window.shдержит окно «Sign in to Steam» на экране (без растягивания на 1920×1080)
Не использовать прямой -gamepadui -fullscreen в apps.json — это вызывает ChunkLoadError и нестабильность CEF.
7) System DBus
Steam webhelper требует рабочий system DBus. В entrypoint.sh и start-steam.sh DBus поднимается автоматически:
dbus-daemon --system --fork
Проверка:
docker exec game-player-1 runuser -u steam -- \
dbus-send --system --print-reply --dest=org.freedesktop.DBus \
/org/freedesktop/DBus org.freedesktop.DBus.ListNames
8) Что проверить на хосте
- Установлен
nvidia-container-toolkit. - User namespaces для Steam:
Ожидается
sysctl kernel.unprivileged_userns_clone1. - Контейнеры со смягчёнными профилями (как в
docker-compose.yml):security_opt: - seccomp:unconfined - apparmor:unconfined
9) Быстрая проверка после перезапуска
docker compose ps
docker compose logs --tail=200 player1
docker exec -it game-player-1 bash -lc '
cat /proc/1/comm
pgrep -a sunshine
pgrep -a "steam -srt" || true
df -h /dev/shm
DISPLAY=:99 xwininfo -root -tree | grep -iE "Sign in|1918x" || true
'
Если сервисы healthy, а Steam не открывается в Moonlight — смотреть steam-app.log, cef_log.txt, webhelper-linux.txt и дерево окон на DISPLAY=:99.