143 lines
7.4 KiB
Markdown
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]]
|