Installer EmulatorJS avec Docker

Guide d'installation de EmulatorJS sous Docker.

Installer EmulatorJS avec Docker
emulatorjs docker

Au sommaire :

  • 1-Qu'est-ce que EmulatorJS ?
  • 2-Prérequis
  • 3-Déploiement
  • 4-Configuration
  • 5-Exposer son instance avec Traefik

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 :

C'est plutôt pas mal!!!

2-Prérequis

Pour déployer EmulatorJS, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

Virtualiser Ubuntu Server sur Proxmox VE
Guide d’installation de Ubuntu Server sur Proxmox VE avec mes meilleurs réglages.

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Sécurisation et exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

Installer Traefik avec Docker
Guide d’installation de Traefik.

Gestion des accès avec Authelia : Pour renforcer la sécurité, implémentez une solution de gestion des accès telle qu'Authelia. Ce guide vous fournira les étapes nécessaires :

Installer Authelia avec Docker
Guide d’installation de 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.

networks:
# default network
  default:
    driver: bridge

services:

  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
    ports:
      - 3000:3000
      - 80:80
      - 4001:4001 #optional
    restart: unless-stopped

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.

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.

no-intro_romsets directory listing

Donc je vous épargne les messages habituels du type "pirater c'est mal m'voyez".

5-Exposer son instance avec Traefik et Authelia

5-Exposer son instance avec Traefik et Authelia

Voici la configuration avec Traefik et Authelia.

Cochez la section ports si vous ne souhaitez pas accéder à l'application en local.

Ensuite, si vous avez suivi les guides de Traefik et Authelia, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur internet et activer l'authentification SFA ou MFA.

Comme d'habitude, suivez les parties 6 et 7 du guide de Traefik pour ouvrir les ports de votre box internet et ajouter les entrées DNS pour pouvoir accéder à l'application.

Et n'oubliez JAMAIS :

  • D'éditer le fichier "configuration.yml" de Authelia.
  • D'ajouter le nom de domaine de l'application
  • De redémarrer l'application avec "docker compose restart authelia" pour que la modification soit prise en compte.
networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
      - ${APPDATA}/traefik/shared:/shared
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.rule=Host(`traefik.<domain_name>`)
      - traefik.http.routers.traefik.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.<domain_name>`)
      - 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(`emulatorjs.<domain_name>`)
      - 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'
Self Hosted Web Based Emulation | LinuxServer.io