Files
2026-06-09 18:40:21 +02:00

143 lines
7.4 KiB
Markdown

---
title: Games on Whales
created: 2026-06-07
updated: 2026-06-07
type: app
tags: [catalogue, gaming, game-streaming, sunshinedeck, docker, bash]
confidence: high
contested: false
sources: [https://selfh.st/apps/?search=Games+on+Whales]
---
# Games on Whales 🐳
> Wrapper Docker pour Moonlight/Sunshine qui transforme un serveur Linux en plateforme de streaming de jeux gaming AAA à la Steam Remote Play / NVIDIA GameStream, en HTML5 ou client natif.
| Métadonnée | Valeur |
| :--- | :--- |
| **Site web** | https://games-on-whales.github.io |
| **GitHub** | https://github.com/games-on-whales/gow |
| **License** | MIT |
| **Langage** | Bash / Docker |
| **Étoiles** | 126 |
| **Dernière MAJ** | 2025 |
| **Catégorie** | [[cat-gaming]] |
## Description
Games on Whales (GoW) est un projet open source qui répond à une question simple : « et si mon serveur headless Linux, sans écran, sans clavier ni GPU gaming à demeure, pouvait faire tourner mes jeux AAA et les streamer vers n'importe quel client léger, partout dans le monde ? » Il encapsule **Sunshine** (serveur de streaming GameStream/Apollo open source, fork de NVIDIA GameStream) et un ensemble de daemons Linux dans des conteneurs Docker spécialisés, pilotés par un superviseur Bash.
L'architecture sépare proprement les responsabilités. Un conteneur `base` virtualise une session X11/Wayland avec Xvfb ou un GPU réel via `/dev/dri` (Intel/AMD/NVIDIA). Un conteneur `sunshine` expose le serveur de streaming sur le réseau et gère l'appairage des clients Moonlight. Un conteneur `wolf` (optionnel) prend en charge l'input mapping (clavier, souris, manette) et le forwarding audio via PulseAudio/PipeWire. Enfin des conteneurs applicatifs lancent les jeux : Steam, Heroic (Epic/GOG), Bottles, Lutris, ou des binaires natifs. Chaque conteneur peut être démarré/arrêté individuellement via l'API gRPC exposée par le superviseur.
L'output peut être consommé aussi bien par le client Moonlight natif (Windows, macOS, Linux, Android, iOS, TV, Steam Deck) que par un client web HTML5 basé sur WebRTC (projet `wolf-ui`). Cela permet de jouer depuis un navigateur sans rien installer, y compris depuis un Chromebook ou un iPad. La latence, en local LAN, descend sous les 20 ms avec encodage matériel (NVENC, VAAPI, QSV) ; en WAN, elle dépend de la bande passante et de l'encoder choisi (H.264, HEVC, AV1).
## Installation
### Docker Compose (méthode officielle)
```yaml
version: "3.8"
services:
gow:
image: gamesonwhales/gow:latest
container_name: gow
privileged: true
restart: unless-stopped
network_mode: host # requis pour streaming basse latence
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/.X11-unix:/tmp/.X11-unix
- ./config:/config
- ./games:/games
devices:
- /dev/dri:/dev/dri # GPU Intel/AMD
# NVIDIA : installer nvidia-container-toolkit et décommenter
# - /dev/nvidia0:/dev/nvidia0
# - /dev/nvidiactl:/dev/nvidiactl
# - /dev/nvidia-uvm:/dev/nvidia-uvm
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- ENABLE_VNC=true
- SUNSHINE_PASSWORD=changeme
```
### Prérequis Linux
```bash
# Ubuntu 24.04
sudo apt install -y docker.io docker-compose-v2 nvidia-driver-550 nvidia-container-toolkit
sudo usermod -aG docker $USER
# Lier le socket X
sudo chmod 777 /tmp/.X11-unix
# Activer les cgroups v2 (requis par Sunshine)
sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=1"
```
### Installation bare-metal
Le dépôt propose un script d'amorçage qui installe systemd, configure les cgroups et déploie les conteneurs ; cependant la voie **Docker Compose est recommandée** pour l'isolation, la portabilité et la mise à jour.
## Configuration
Le fichier `config/gow.conf` (ou variables d'environnement) contrôle :
- **GPU** : choix VAAPI (Intel/AMD), NVENC (NVIDIA), ou software x264. Vérifier via `vainfo` ou `nvidia-smi` côté hôte.
- **Encoder** : H.264 (compatibilité max), HEVC (H.265, meilleurs débits), AV1 (NVIDIA RTX 40+, Intel Arc).
- **Résolution / framerate** : 720p60, 1080p60, 1440p120, 4K60 selon GPU et bande passante.
- **Bitrate** : adaptatif de 5 à 150 Mbps.
- **Audio** : PulseAudio/PipeWire sink virtuel, bitrate opus, son surround 5.1/7.1.
- **Input** : auto-mapping clavier/souris, support manette Xbox/PS5/DualSense, gyro, touchpad.
- **Sessions** : Sunshine permet multi-utilisateurs avec mots de passe et pin appairage.
- **Wake-on-LAN** : réveil du serveur à la connexion d'un client.
L'API gRPC exposée par GoW permet de lister, lancer, arrêter, suspendre des sessions et d'inspecter les métriques Prometheus. Un dashboard Web UI (projet `wolf-ui`) affiche l'état en temps réel, la liste des clients connectés et un bouton « Play » par jeu.
## Alternatives
### Open Source
- **Sunshine** standalone — sans wrapper Docker, configuration manuelle Sunshine.
- **Moonlight** — client (non serveur) open source pour GameStream/Sunshine.
- **Steam Remote Play** — fonctionnalité intégrée à Steam, bridée au catalogue Steam.
- **Parsec** (gratuit pour usage personnel) — fermé mais populaire, faible latence.
- **Neko** — navigateur distant + apps, plus orienté collaboration que gaming.
- **Selkies-GStreamer** — équivalent Google, base sur GStreamer WebRTC.
- **Wolf (projet upstream)** — version Rust/WebAssembly du client, intégré à GoW.
### Propriétaires
- **NVIDIA GeForce NOW** — cloud gaming loué, pas auto-hébergé.
- **Xbox Cloud Gaming (xCloud)** — Microsoft, pas auto-hébergé.
- **Amazon Luna** — cloud gaming Amazon, pas auto-hébergé.
- **Boosteroid**, **Shadow PC** — VM gaming distantes.
## Sécurité
Games on Whales donne un accès distant quasi-total à votre machine (clavier/souris/manette) — la surface d'attaque est élevée :
- **Authentification forte Sunshine** : activer le pin à 4 chiffres + mot de passe utilisateur, jamais désactiver.
- **TLS** : Sunshine supporte HTTPS via certificat Let's Encrypt (acme.sh ou Caddy en reverse proxy). En LAN un certificat auto-signé est acceptable, mais en WAN TLS est **obligatoire** (WebRTC et Sunshine chiffrent déjà en SRTP/DTLS, le TLS ajoute l'authentification du serveur).
- **Fail2ban** sur les ports Sunshine (47984, 47989, 47990, 47998, 48010) contre les scans d'appairage.
- **WireGuard/Tailscale** : préférez un VPN maillé à une exposition publique, surtout pour les sessions de bureau à distance.
- **Pare-feu** : n'ouvrir que les ports Sunshine vers l'IP du client (ou un sous-réseau VPN).
- **Sandbox conteneurs** : limiter `capabilities` (uniquement `SYS_ADMIN` pour Sunshine), désactiver le réseau en `--internal` pour les conteneurs de jeu et n'exposer que Sunshine en `network_mode: host`.
- **Mises à jour** : Sunshine et GoW publient fréquemment des correctifs de sécurité ; automatiser avec Watchtower ou Renovate.
- **Désactiver le VNC** (`ENABLE_VNC=false`) en production, sauf pour debug local.
## Ressources
- Site officiel : https://games-on-whales.github.io
- GitHub : https://github.com/games-on-whales/gow
- Wiki : https://github.com/games-on-whales/gow/wiki
- Discord : https://discord.gg/Y8dNbWuT3q
- Sunshine (upstream) : https://github.com/LizardByte/Sunshine
- Moonlight (client) : https://moonlight-stream.org
- Wiki Arch — Game streaming : https://wiki.archlinux.org/title/Game_streaming
## Pages Liées
- [[cat-gaming]]
- [[recettes-docker-compose]]
- [[app-sunshine]]
- [[app-traefik]]
- [[app-wireguard]]
- [[app-jellyfin]]