Installer EmulatorJS avec Docker
Guide d'installation de EmulatorJS sous Docker.
Au sommaire :
- 1-Qu'est-ce que EmulatorJS ?
- 2-Prérequis
- 3-Déploiement
- 4-Configuration
- 5-Où trouver les roms de jeux ?
1-Qu'est-ce que EmulatorJS
EmulatorJS est une application qui vous permet de scanner vos jeux rétro et d'y jouer directement sur votre navigateur web grâce à RetroArch.
L'application se compose de deux éléments :
- Un backend NodeJS - Pour le téléchargement/la numérisation des roms, la génération/gestion des fichiers de configuration nécessaires pour faire pointer le frontend vers eux, et le téléchargement des ressources artistiques nécessaires.
- un front-end statique basé sur le web - un mélange de fichiers JSON pour les métadonnées, d'images png pour les logos et les fonds d'écran, de vidéos pour les aperçus de jeux, et la logique de base pour le lancement et l'exécution des jeux.
Toutes les contenus (images, vidéos, interfaces) sont hébergées sur le protocole IPFS et réparties sur plusieurs grands fournisseurs avec des serveurs de partage donc pensez à ouvrir le port 4001 de votre box pour participer à l'effort collectif.
Note : il est également compatible avec le navigateur Edge des consoles Xbox One.
Pour la liste des émulateurs supportés :
- 3DO- https://www.emulatorjs.com/3do.html
- Arcade- https://github.com/libretro/mame2003-plus-libretro
- Atari 2600- https://github.com/libretro/stella2014-libretro
- Atari 7800- https://github.com/libretro/prosystem-libretro
- Colecovision- https://github.com/libretro/blueMSX-libretro
- Doom- https://github.com/libretro/libretro-prboom
- Game Boy Advance- https://github.com/libretro/vba-next
- Game Boy Color- https://github.com/libretro/Gearboy
- Game Boy- https://github.com/libretro/Gearboy
- Jaguar- https://github.com/libretro/virtualjaguar-libretro
- Atari LYNX- https://github.com/libretro/libretro-handy
- MSX- https://github.com/libretro/blueMSX-libretro
- Nintendo 64- https://www.emulatorjs.com/n64.html
- Nintendo DS- https://github.com/libretro/melonDS
- Nintendo Entertainment System- https://github.com/libretro/libretro-fceumm
- Neo Geo Pocket (color)- https://github.com/libretro/beetle-ngp-libretro
- Odyssey2- https://github.com/libretro/libretro-o2em
- PC Engine (TurboGrafx-16)- https://github.com/libretro/beetle-pce-fast-libretro
- Playstation- https://github.com/libretro/beetle-psx-libretro
- Sega 32x- https://www.emulatorjs.com/sega32x.html
- Sega CD- https://github.com/libretro/Genesis-Plus-GX
- Sega Game Gear- https://github.com/libretro/Genesis-Plus-GX
- Sega Mega Drive- https://github.com/libretro/Genesis-Plus-GX
- Sega Master System- https://github.com/libretro/Genesis-Plus-GX
- Sega Saturn- https://github.com/libretro/yabause
- Sega SG-1000- https://github.com/libretro/Genesis-Plus-GX
- Super Nintendo- https://github.com/libretro/snes9x
- Vectrex- https://github.com/libretro/libretro-vecx
- Virtual Boy- https://github.com/libretro/beetle-vb-libretro
- Wonderswan (color)- https://github.com/libretro/beetle-wswan-libretro
C'est plutôt pas mal!!!
2-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer et sécuriser l'application sur l'internet public, il vous faudra déployer Traefik et Authelia.
3-Déploiement
Commencez par créer un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration.
version: "3.9"
networks:
web:
services:
traefik:
container_name: traefik
image: traefik:latest
restart: always
network:
web:
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${APPDATA}/traefik/logs:/logs
- ${APPDATA}/traefik/traefik.yml:/traefik.yml
- ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
- ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.traefik-dash.entrypoints=websecure
- traefik.http.routers.traefik-dash.rule=Host(`traefik.<votredomaine>.ovh`)
- traefik.http.routers.traefik-dash.service=api@internal
- "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
authelia:
image: authelia/authelia
container_name: authelia
volumes:
- ${APPDATA}/authelia:/config
networks:
- web
labels:
- traefik.enable=true
- traefik.http.routers.authelia.entrypoints=websecure
- traefik.http.routers.authelia.rule=Host(`authelia.<votre_nom_de_domaine>`)
- traefik.http.routers.authelia.tls.certresolver=letsencrypt
ports:
- 9091:9091
restart: unless-stopped
healthcheck:
disable: true
environment:
- TZ=${TZ}
emulatorjs:
image: lscr.io/linuxserver/emulatorjs:latest
container_name: emulatorjs
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- SUBFOLDER= / #optional
volumes:
- ${APPDATA}/emulatorjs:/config
- ${MEDIAS}/games:/data
networks:
- web
ports:
- 3000:3000
- 80:80
- 4001:4001 #optional
restart: unless-stopped
labels:
- traefik.enable=true
- traefik.http.routers.emulatorjs.entrypoints=websecure
- traefik.http.routers.emulatorjs.rule=Host(`votre_nom_de_domaine`)
- traefik.http.routers.emulatorjs.service=emulatorjs-svc
- traefik.http.services.emulatorjs-svc.loadbalancer.server.port=80
- traefik.http.routers.emulatorjs.tls.certresolver=lets-encrypt
- 'traefik.http.routers.emulatorjs.middlewares=chain-authelia@file'
Déployez l'application avec la commande suivante.
docker compose up -d
Avant d'accéder à EmulatorJS, tapez l'adresse IP du serveur suivi de son numéro de port (3000) pour accéder à l'interface d'administration.
4-Configuration
Cliquez sur "Download" pour télécharger les fichiers de base (merci aux contributeurs de IPFS).
Cliquez sur "File Management" puis sur le support que vous souhaitez (sega32x pour faire facile) et faites double clique sur le dossier "roms".
Faites un clique-droit, cliquez sur "Upload" et "Sélect. fichiers" pour ajouter vos roms
Normalement vous devriez retrouver vos jeux à l'endroit prévu.
Ensuite, allez dans "Rom Management" et cliquez sur "Scan" pour que les jeux soient visibles à travers l'interface (l'application détecte automatiquement l'ajout de roms).
EmulatorJS va télécharger les logos et les vidéos de chaque jeu.
Ensuite, sur la gauche, cliquez sur "sega32x qui vient d'être ajouté.
Si tout est en rouge, c'est que tout les sont identifiés. Cliquez sur "Download All Available Arts" pour téléchargez les logos et les vidéos de présentation des jeux.
Si tout est vert, cela signifie que chaque jeu dispose de son logo et sa vidéo de présentation.
Maintenant, branchez une manette à votre PC et tapez l'adresse IP de votre machine virtuelle ou conteneur LXC suivi du port (9005 dans la configuration Docker Compose).
Félicitation!!!!! Vous avez configurer votre instance EmulatorJS comme un chef!!!!
Note : si vos jeux apparaissent pas ou mal, nettoyez le cache de votre navigateur pour actualiser.
5-Où trouver les roms de jeux ?
Pour les débutants, vous vous posez la question "ou puis-je trouver des roms ?".
Réponse : Internet Archive is your friend!!!!!
Cliquez sur le lien suivant et allez vous créé un identifiant pour pouvoir télécharger les romset qui vous intéresse.
Internet Archive est une bibliothèque à but non lucratif regroupant des millions de livres, de films, de logiciels, de musique, de sites web et bien plus encore, tous gratuits.
Donc je vous épargne les messages habituels du type "pirater c'est mal m'voyez".
Sources :