Installer Kyoo avec Docker
Kyoo

Installer Kyoo avec Docker

Table des matières

GitHub - zoriya/Kyoo: A portable and vast media library solution.
A portable and vast media library solution. Contribute to zoriya/Kyoo development by creating an account on GitHub.

Fouillant Github je suis tombé sur Kyoo. En lisant le début de la description je vois:

The next-generation open-source media browser that redefines your streaming experience.

Le navigateur multimédia open source de nouvelle génération qui redéfinit votre expérience de streaming.

Cela a piqué ma curiosité. De plus comme il se propose comme alternative à Plex et Jellyfin, je ne pouvais que le tester.

Kyoo stands out as a powerful alternative to Plex and Jellyfin.

Autrement dit, une alternative puissante à Plex et Jellyfin.

Ce qui m'a vite bluffé c'est le transcodage. Souvent je transpire avec Jellyfin pour le configurer correctement. D'ailleurs, je lis tout sans transcodage finalement. 😆

Ici, il n'y a rien à faire et c'est bigrement efficace et rapide pour sauter d'une définition à une autre. C'est très réussi.

De plus j'ai vu qu'il y avait une application Android, mais finalement tout est déjà responsive, de base. Faites votre choix.

L'interface est bien finie. En tout cas à mon humble avis.

Ah, j'allais oublier, nul besoin de classer ou renommer vos fichiers ou dossiers. Il s'occupe de tout au niveau de l'Ui. Puissant non? Il détecte automatiquement le(s) fichier(s) ajouté(s) ou supprimé(s).

Pour des raisons évidentes de droits d'auteurs, je vais vous renvoyer vers la démo Kyoo et non pas de mes tests persos.

Démo Kyoo:

Kyoo
A portable and vast media library solution.

Bienvenue dans Kyoo, le navigateur multimédia open source de nouvelle génération qui redéfinit votre expérience de streaming. Conçu à partir de zéro, Kyoo se distingue comme une alternative puissante à Plex et Jellyfin. Libérez tout le potentiel de votre médiathèque avec des fonctionnalités de pointe et un engagement à être gratuit et open source.

⚡Caractéristiques

  • Transcodage dynamique : transcodez vos médias dans n'importe quelle qualité, modifiez-les à la volée avec la qualité automatique et parcourez votre vidéo sans effort, sans attendre le transcodeur.
  • Historique des vidéos regardées automatiquement : profitez de l'historique des vidéos regardées automatiquement en continuant à regarder, ce qui vous permet de reprendre rapidement votre série ou de découvrir de nouveaux épisodes.
  • Récupération intelligente des métadonnées : faites l'expérience d'une récupération intelligente des métadonnées, même pour les fichiers aux noms étranges, grâce à la puissance de deviner et de themovedb. Il utilise même le thème pour une gestion améliorée des anime.
  • Accès multiplateforme : accédez à Kyoo sur les clients Android et Web, en vous assurant que vos médias sont à portée de main où que vous alliez.
  • Recherche optimisée par Meilisearch : utilisez notre système de recherche avancé et résistant aux fautes de frappe, optimisé par Meilisearch, pour des résultats ultra-rapides.
  • Prise en charge du nettoyage rapide : parcourez vos médias sans effort grâce à la prise en charge du nettoyage rapide, améliorant ainsi votre contrôle sur la lecture.
  • Téléchargement et assistance hors ligne : profitez de la liberté de télécharger et de regarder hors ligne, avec l'historique des vidéos regardées mis à jour de manière transparente lorsque vous vous reconnectez.
  • Prise en charge améliorée des sous-titres : Kyoo va au-delà des bases avec une prise en charge améliorée des sous-titres, notamment les formats SSA/ASS et les polices personnalisables.
  • Disponible en anglais et en français!

💾 L'installation

  1. Créez votre compose.yml dans le dossier ou vous comptez installer Kyoo:
sudo nano compose.yml
  1. On colle ça dedans:
x-transcoder: &transcoder-base
  image: ghcr.io/zoriya/kyoo_transcoder:4.7
  networks:
    default:
      aliases:
        - transcoder
  restart: unless-stopped
  env_file:
    - ./.env
  environment:
    - GOCODER_PREFIX=/video
  volumes:
    - ${LIBRARY_ROOT}:/video:ro
    - ${CACHE_ROOT}:/cache
    - metadata:/metadata

services:
  back:
    image: ghcr.io/zoriya/kyoo_back:4.7
    restart: unless-stopped
    cpus: 1.5
    environment:
      - TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666}
    env_file:
      - ./.env
    depends_on:
      postgres:
        condition: service_healthy
      meilisearch:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      migrations:
        condition: service_completed_successfully
    volumes:
      - kyoo:/metadata
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.api.rule=PathPrefix(`/api/`)"
      - "traefik.http.routers.api.middlewares=api-sp"
      - "traefik.http.middlewares.api-sp.stripprefix.prefixes=/api"
      - "traefik.http.middlewares.api-sp.stripprefix.forceSlash=false"

  migrations:
    image: ghcr.io/zoriya/kyoo_migrations:4.7
    restart: "no"
    depends_on:
      postgres:
        condition: service_healthy
    env_file:
      - ./.env

  front:
    image: ghcr.io/zoriya/kyoo_front:4.7
    restart: unless-stopped
    environment:
      - KYOO_URL=${KYOO_URL:-http://back:5000}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.front.rule=PathPrefix(`/`)"

  scanner:
    image: ghcr.io/zoriya/kyoo_scanner:4.7
    restart: unless-stopped
    depends_on:
      back:
        condition: service_healthy
    env_file:
      - ./.env
    environment:
      - KYOO_URL=${KYOO_URL:-http://back:5000}
    volumes:
      - ${LIBRARY_ROOT}:/video:ro

  matcher:
    image: ghcr.io/zoriya/kyoo_scanner:4.7
    command: matcher
    restart: unless-stopped
    depends_on:
      back:
        condition: service_healthy
    env_file:
      - ./.env
    environment:
      - KYOO_URL=${KYOO_URL:-http://back:5000}

  autosync:
    image: ghcr.io/zoriya/kyoo_autosync:4.7
    restart: on-failure
    depends_on:
      rabbitmq:
        condition: service_healthy
    env_file:
      - ./.env

  transcoder:
    <<: *transcoder-base
    profiles: ['', 'cpu']

  transcoder-nvidia:
    <<: *transcoder-base
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    environment:
      - GOCODER_PREFIX=/video
      - GOCODER_HWACCEL=nvidia
    profiles: ['nvidia']

  transcoder-vaapi:
    <<: *transcoder-base
    devices:
      - /dev/dri:/dev/dri
    environment:
      - GOCODER_PREFIX=/video
      - GOCODER_HWACCEL=vaapi
      - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
    profiles: ['vaapi']
  # qsv is the same setup as vaapi but with the hwaccel env var different
  transcoder-qsv:
    <<: *transcoder-base
    devices:
      - /dev/dri:/dev/dri
    environment:
      - GOCODER_PREFIX=/video
      - GOCODER_HWACCEL=qsv
      - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
    profiles: ['qsv']

  traefik:
    image: traefik:v3.1
    restart: unless-stopped
    command:
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entryPoints.web.address=:8901"
      - "--accesslog=true"
    ports:
      - "8901:8901"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  postgres:
    image: postgres:15
    restart: unless-stopped
    env_file:
      - ./.env
    volumes:
      - db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5

  meilisearch:
    image: getmeili/meilisearch:v1.4
    restart: unless-stopped
    volumes:
      - search:/meili_data
    environment:
      - MEILI_ENV=production
    env_file:
      - .env
    healthcheck:
      test: ["CMD", "wget", "--no-verbose", "--spider", "http://meilisearch:7700/health"]
      interval: 30s
      timeout: 5s
      retries: 5

  rabbitmq:
    image: rabbitmq:3-alpine
    restart: on-failure
    environment:
      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
    healthcheck:
      test: rabbitmq-diagnostics -q ping
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 10s

volumes:
  kyoo:
  db:
  metadata:
  search:
  1. Maintenant passons à la création du fichier .env:
sudo nano .env
  1. Collez ça dedans:
# vi: ft=sh
# shellcheck disable=SC2034


# Useful config options

# Library root can either be an absolute path or a relative path to your docker-compose.yml file.
LIBRARY_ROOT=./video
# You should set this to a path where kyoo can write large amount of data, this is used as a cache by the transcoder.
# It will automatically be cleaned up on kyoo's startup/shutdown/runtime.
CACHE_ROOT=/tmp/kyoo_cache
LIBRARY_LANGUAGES=en
# A pattern (regex) to ignore video files.
LIBRARY_IGNORE_PATTERN=".*/[dD]ownloads?/.*"

# If this is true, new accounts wont have any permissions before you approve them in your admin dashboard.
REQUIRE_ACCOUNT_VERIFICATION=true
# Specify permissions of guest accounts, default is no permissions.
UNLOGGED_PERMISSIONS=
# but you can allow anyone to use your instance without account by doing:
# UNLOGGED_PERMISSIONS=overall.read,overall.play
# You can specify this to allow guests users to see your collection without behing able to play videos for example:
# UNLOGGED_PERMISSIONS=overall.read

# Specify permissions of new accounts.
DEFAULT_PERMISSIONS=overall.read,overall.play

# Hardware transcoding (equivalent of --profile docker compose option).
COMPOSE_PROFILES=cpu # cpu (no hardware acceleration) or vaapi or qsv or nvidia
# the preset used during transcode. faster means worst quality, you can probably use a slower preset with hwaccels
# warning: using vaapi hwaccel disable presets (they are not supported).
GOCODER_PRESET=fast


# The following value should be set to a random sequence of characters.
# You MUST change it when installing kyoo (for security)
# You can input multiple api keys separated by a ,
KYOO_APIKEYS=t7H5!@4iMNsAaSJQ49pat4jprJgTcF656if#J3

# Keep those empty to use kyoo's default api key. You can also specify a custom API key if you want.
# go to https://www.themoviedb.org/settings/api and copy the api key (not the read access token, the api key)
THEMOVIEDB_APIKEY=
# go to https://thetvdb.com/api-information/signup and copy the api key
TVDB_APIKEY=
# you can also input your subscriber's pin to support TVDB
TVDB_PIN=


# The url you can use to reach your kyoo instance. This is used during oidc to redirect users to your instance.
PUBLIC_URL=http://localhost:5000

# Use a builtin oidc service (google, discord, trakt, or simkl):
# When you create a client_id, secret combo you may be asked for a redirect url. You need to specify https://YOUR-PUBLIC-URL/api/auth/logged/YOUR-SERVICE-NAME
OIDC_DISCORD_CLIENTID=
OIDC_DISCORD_SECRET=
# Or add your custom one:
OIDC_SERVICE_NAME=YourPrettyName
OIDC_SERVICE_LOGO=https://url-of-your-logo.com
OIDC_SERVICE_CLIENTID=
OIDC_SERVICE_SECRET=
OIDC_SERVICE_AUTHORIZATION=https://url-of-the-authorization-endpoint-of-the-oidc-service.com/auth
OIDC_SERVICE_TOKEN=https://url-of-the-token-endpoint-of-the-oidc-service.com/token
OIDC_SERVICE_PROFILE=https://url-of-the-profile-endpoint-of-the-oidc-service.com/userinfo
OIDC_SERVICE_SCOPE="the list of scopes space separeted like email identity"
# Token authentication method as seen in https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication
# Supported values: ClientSecretBasic (default) or ClientSecretPost
# If in doubt, leave this empty.
OIDC_SERVICE_AUTHMETHOD=ClientSecretBasic
# on the previous list, service is the internal name of your service, you can add as many as you want.


# Following options are optional and only useful for debugging.

# To debug the front end, you can set the following to an external backend
KYOO_URL=

# Database things
POSTGRES_USER=KyooUser
POSTGRES_PASSWORD=KyooPassword
POSTGRES_DB=kyooDB
POSTGRES_SERVER=postgres
POSTGRES_PORT=5432

# Read by the api container to know if it should run meilisearch's migrations/sync
# and download missing images. This is a good idea to only have one instance with this on
# Note: it does not run postgres migrations, use the migration container for that.
RUN_MIGRATIONS=true

MEILI_HOST="http://meilisearch:7700"
MEILI_MASTER_KEY="ghvjkgisbgkbgskegblfqbgjkebbhgwkjfb"

RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_DEFAULT_USER=kyoo
RABBITMQ_DEFAULT_PASS=aohohunuhouhuhhoahothonseuhaoensuthoaentsuhha
  1. On installe l'application:
docker-compose up -d

ou avec docker-compose V2:

docker compose up -d
  1. Rendez-vous sur l'ip:port, le port par défaut est 8901:
http://ip:8901

👤 Création du compte

Une fois la page lancée, cliquez sur Inscrivez-vous:

Remplissez les questions habituelles et cliquez sur Créer un compte:


🇫🇷 Mettre Kyoo en français, si ce n'est pas déjà le cas

En haut à droite vous cliquez sur votre compte et sélectionnez Paramètres:

Maintenez vous pouvez choisir le français:


📍 Où mettre ses fichiers vidéos?

Connectez vous à votre serveur et, suivant ou vous avez installé l’application, ça sera dans le dossier video qui se trouve dans le dossier d’installation de Kyoo:

Si vous constatez que vous n'avez pas le droit d'écrire dans le dossier vidéo, tapez cette commande dans votre terminal:

id

Ce qui retourne, dans mon cas:

Relevez votre uid et gid et tapez cette commande à la racine du dossier où est installé Kyoo, en prenant soin d'adapter la commande avec votre propre uid et gid:

sudo chown 1000:1000 video

🌐 Disponibilité

Sur votre navigateur préféré.

Il existe également une application Android dédiée.


zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.