Document current architecture and operational practices.
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>
This commit is contained in:
108
рекомендации.md
Normal file
108
рекомендации.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Проверенные рекомендации
|
||||
|
||||
Ниже только те пункты, которые подтверждаются текущей конфигурацией проекта и практикой запуска на сервере.
|
||||
|
||||
## 1) Healthcheck Sunshine
|
||||
|
||||
Текущий вариант `["CMD", "pgrep", "sunshine"]` рабочий в этой сборке: в контейнере есть `/usr/bin/sunshine`, процесс виден как `sunshine`.
|
||||
|
||||
```yaml
|
||||
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`.
|
||||
|
||||
```bash
|
||||
docker exec game-player-1 df -h /dev/shm
|
||||
```
|
||||
|
||||
## 4) Права на volume Steam
|
||||
|
||||
Проблема прав на bind-mount критична. Правильный подход — точечный `chown` в `entrypoint.sh` и `start-steam.sh`:
|
||||
|
||||
```bash
|
||||
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 поднимается автоматически:
|
||||
|
||||
```bash
|
||||
dbus-daemon --system --fork
|
||||
```
|
||||
|
||||
Проверка:
|
||||
|
||||
```bash
|
||||
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) Что проверить на хосте
|
||||
|
||||
1. Установлен `nvidia-container-toolkit`.
|
||||
2. User namespaces для Steam:
|
||||
```bash
|
||||
sysctl kernel.unprivileged_userns_clone
|
||||
```
|
||||
Ожидается `1`.
|
||||
3. Контейнеры со смягчёнными профилями (как в `docker-compose.yml`):
|
||||
```yaml
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
- apparmor:unconfined
|
||||
```
|
||||
|
||||
## 9) Быстрая проверка после перезапуска
|
||||
|
||||
```bash
|
||||
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`.
|
||||
Reference in New Issue
Block a user