Aller au contenu principal

Jellyfin sur Google Cloud Run

Jellyfin sur Google Cloud Run

Jellyfin est un serveur multimédia auto-hébergé, gratuit et open source (GPLv2), qui permet de diffuser vos propres films, séries, musiques, photos et chaînes de télévision en direct. Écrit en .NET/C# et maintenu comme fork communautaire d'Emby, il ne comporte ni pistage, ni publicité, ni offre premium. Ce module déploie Jellyfin sur Cloud Run v2 au-dessus du socle App_CloudRun, qui provisionne et gère l'infrastructure Google Cloud partagée.

Ce guide se concentre sur les services cloud qu'utilise Jellyfin et sur la manière de les explorer et de les exploiter depuis la console Google Cloud et la ligne de commande. Pour les mécanismes communs à toute application Cloud Run — identité du service, entrée et équilibrage de charge, mise à l'échelle et simultanéité, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC Service Controls, sauvegardes et cycle de vie du déploiement — reportez-vous au guide du socle App_CloudRun plutôt que de les répéter ici.


1. Vue d'ensemble​

Jellyfin s'exécute comme un conteneur .NET unique sur Cloud Run v2. Le déploiement assemble un ensemble ciblé de services Google Cloud :

FonctionnalitéService Google CloudRemarques
CalculCloud Run v2Serveur multimédia .NET, 1 vCPU / 1 GiB par défaut, limité à une seule instance active
PersistanceCloud Storage + GCS FUSELe répertoire /config (bases SQLite, métadonnées, plugins) est adossé à un bucket GCS
Base de donnéesSQLite interne (embarquée)Pas de Cloud SQL — Jellyfin conserve tout son état dans des fichiers SQLite sous /config
SecretsSecret ManagerClé d'API facultative générée automatiquement ; aucun secret cryptographique obligatoire
EntréeURL Cloud Run / Cloud Load Balancinginternal par défaut ; équilibreur de charge HTTPS externe + domaine personnalisé en option
Distribution des imagesArtifact RegistryL'image jellyfin/jellyfin y est copiée en miroir avant le déploiement

Valeurs par défaut judicieuses à connaître d'emblée :

  • Il n'y a pas de base de données externe. Jellyfin stocke l'intégralité de sa bibliothèque — les bases SQLite, le XML de configuration, les métadonnées, les illustrations, les plugins, le cache de transcodage et les journaux — dans un unique répertoire /config. Aucune instance Cloud SQL, aucun job db-init et aucun Redis ne sont provisionnés (database_type = NONE).
  • /config doit persister d'une révision à l'autre. Sur Cloud Run, le chemin /config est adossé à un bucket Cloud Storage monté via GCS FUSE (enable_gcs_storage_volume = true). Sans /config persistant, chaque nouvelle révision démarre avec une bibliothèque vide et relance l'assistant de premier démarrage.
  • Le conteneur écoute sur le port 8096. Cloud Run achemine le trafic HTTP vers le port web/API par défaut de Jellyfin. L'interface web et l'assistant de configuration initiale sont servis sur /web (et /) ; GET /health renvoie Healthy (200, sans authentification).
  • Il n'existe aucun identifiant par défaut. Au premier accès, l'assistant de configuration vous guide dans la création du compte administrateur et l'ajout des bibliothèques multimédias. Rien n'est utilisable tant que ce compte n'existe pas.
  • Une seule instance active est la valeur par défaut. min_instance_count = 1 maintient le serveur multimédia démarré (évitant la latence d'un démarrage à froid en pleine lecture) et max_instance_count = 1 conserve une bibliothèque SQLite unique et partagée sur un seul volume. N'exécutez pas plusieurs réplicas — des écritures concurrentes sur un même fichier SQLite corrompent la bibliothèque.
  • Cloud Run convient surtout à un usage léger ou de démonstration. La latence de GCS FUSE et le modèle d'exécution sans état de Cloud Run, limité par un délai par requête, font de cette variante un bon choix pour l'évaluation et un usage personnel léger — mais pas pour un transcodage intensif ni pour de nombreux flux simultanés. Pour une vraie médiathèque, déployez Jellyfin_GKE avec un PVC en mode bloc.
  • L'authentification par clé d'API est facultative et désactivée par défaut. enable_api_key = false. L'authentification principale repose sur le compte administrateur créé par l'assistant ; des clés d'API par application se créent dans l'application sous Dashboard → API Keys.

Cloud Run ou GKE — choisissez le bon hébergement pour votre bibliothèque. Cloud Run (ce module) monte /config depuis un bucket GCS via FUSE. C'est simple, limité à une seule instance active, et idéal pour une démonstration ou une petite bibliothèque personnelle avec une lecture directe occasionnelle. La latence d'E/S de FUSE et le modèle de délai par requête le rendent peu adapté au transcodage en direct ou à une diffusion multi-utilisateur soutenue. Jellyfin_GKE s'exécute en StatefulSet avec un véritable PVC en mode bloc sur /config, offrant une sémantique de système de fichiers correcte pour SQLite et le cache de transcodage — le choix recommandé pour un serveur multimédia de production, avec NFS en option pour les grandes médiathèques.


2. Services Google Cloud et comment les explorer​

Toutes les commandes supposent que PROJECT et REGION sont définies. Les noms des services et des ressources figurent dans les sorties du déploiement.

A. Cloud Run — le service Jellyfin​

Jellyfin s'exécute comme un service Cloud Run v2. La bibliothèque étant un magasin SQLite unique sur un seul volume, le service est limité à une instance au lieu d'être mis à l'échelle automatiquement. Chaque déploiement crée une révision immuable ; le trafic peut être réparti entre les révisions pour des déploiements progressifs sûrs.

  • Console : Cloud Run → sélectionnez le service pour voir les révisions, le trafic, les journaux et les métriques.
  • CLI :
    gcloud run services list --project "$PROJECT" --region "$REGION"
    gcloud run services describe <service-name> --project "$PROJECT" --region "$REGION"
    gcloud run revisions list --service <service-name> --project "$PROJECT" --region "$REGION"

Consultez App_CloudRun pour la mise à l'échelle, la simultanéité, l'environnement d'exécution et la répartition du trafic.

B. Magasin de configuration persistant (SQLite sur /config)​

Jellyfin n'a aucune base de données externe. Tout son état — les bases SQLite de la bibliothèque et de la lecture, le XML de configuration, les métadonnées et illustrations en cache, les plugins installés, le cache de transcodage et les journaux — se trouve sous /config (JELLYFIN_CONFIG_DIR = /config). Il n'y a ni instance Cloud SQL, ni Auth Proxy, ni Job d'initialisation pour créer un schéma ; Jellyfin crée et migre ses propres bases SQLite au premier démarrage.

Comme tout ce qui compte est un fichier sous /config, rendre ce répertoire persistant revient à rendre persistant le serveur tout entier. Sur Cloud Run, il est adossé à un bucket Cloud Storage (voir ci-dessous).

  • Inspecter la configuration montée sur la révision en cours :
    gcloud run services describe <service-name> --region "$REGION" \
    --format='value(spec.template.spec.containers[0].volumeMounts)'

C. Cloud Storage — le bucket /config​

Un bucket Cloud Storage dédié (suffixe de nom storage) est provisionné automatiquement et monté sur /config via GCS FUSE (enable_gcs_storage_volume = true, environnement d'exécution gen2). Le bucket est de classe STANDARD, avec force_destroy = true, sans gestion des versions et avec public_access_prevention = enforced. Des buckets supplémentaires peuvent être déclarés via storage_buckets.

  • Console : Cloud Storage → Buckets.
  • CLI :
    gcloud storage buckets list --project "$PROJECT"
    gcloud storage ls gs://<storage-bucket>/ # bucket name is in the Outputs

Consultez App_CloudRun pour les options de montage GCS FUSE et CMEK.

D. Configuration initiale et médiathèque​

Au premier accès, Jellyfin sert un assistant de configuration interactif sur /web (et /) qui crée le compte administrateur, définit la langue préférée et vous permet d'ajouter des bibliothèques multimédias (films, séries, musique, photos). Rien n'est authentifié ni utilisable tant que vous n'avez pas terminé l'assistant — il n'existe aucun identifiant par défaut.

Les bibliothèques multimédias pointent vers des chemins à l'intérieur du conteneur. Sur Cloud Run, les médias sont servis depuis le volume /config monté ou depuis des montages GCS FUSE supplémentaires ; pour les grandes médiathèques, préférez la variante GKE avec un stockage en mode bloc ou NFS.

  • Accéder à l'assistant / à l'interface web :
    gcloud run services describe <service-name> --region "$REGION" \
    --format='value(status.url)'
    # open <url>/web in a browser (requires ingress=all or an LB/IAP path)

E. Secret Manager et la clé d'API facultative​

Jellyfin n'exige aucun secret cryptographique obligatoire — il n'y a ni clé de chiffrement, ni JWT, ni mot de passe maître à gérer. Lorsque enable_api_key = true, le module génère une valeur aléatoire de 32 caractères et la stocke dans Secret Manager sous le nom secret-<prefix>-<app>-api-key. Bogue connu : la sortie secret_ids de Jellyfin_Common associe cette valeur à la clé de variable d'environnement QDRANT__SERVICE__API_KEY — un reste de copier-coller du module Qdrant_Common dont le module Jellyfin a été cloné — et Jellyfin_CloudRun la transmet telle quelle via module_secret_env_vars. Jellyfin ne dispose d'aucun mécanisme pour lire une clé d'API depuis une variable d'environnement (son Dockerfile est une fine enveloppe non modifiée, sans point d'entrée personnalisé pour en consommer une) ; aujourd'hui, enable_api_key = true ne crée donc qu'un secret Secret Manager orphelin — il ne permet pas aux appelants externes de s'authentifier. Le seul moyen d'obtenir une clé d'API utilisable est de la créer dans l'application sous Dashboard → API Keys ; l'authentification principale reste le compte administrateur créé par l'assistant.

  • Console : Security → Secret Manager.
  • CLI :
    gcloud secrets list --project "$PROJECT"
    gcloud secrets versions access latest --secret=<secret-name> --project "$PROJECT"

Consultez App_CloudRun pour les détails d'injection et de rotation.

F. Réseau et entrée​

Par défaut, ingress_settings = "internal", si bien que le service n'est joignable que depuis le VPC — ce qui convient à un serveur multimédia privé. Définissez ingress_settings = "all" pour obtenir une URL run.app publique, ou ajoutez un équilibreur de charge HTTPS externe avec un domaine personnalisé, Cloud CDN et Cloud Armor. Le contrôle de sortie VPC régit la connectivité sortante.

  • Console : Cloud Run (URL du service) ; Network services → Load balancing.
  • CLI :
    gcloud run services describe <service-name> --region "$REGION" --format='value(status.url)'
    gcloud compute addresses list --project "$PROJECT"

Consultez App_CloudRun.

G. Cloud Logging et Monitoring​

Les journaux du conteneur sont envoyés vers Cloud Logging ; les métriques Cloud Run sont envoyées vers Cloud Monitoring, avec en option des tests de disponibilité et des règles d'alerte.

  • Console : Logging → Logs Explorer ; Monitoring → Dashboards / Alerting.
  • CLI :
    gcloud run services logs read <service-name> --project "$PROJECT" --region "$REGION" --limit 50

3. Comportement de l'application Jellyfin​

  • Aucun Job d'initialisation. Jellyfin n'a besoin d'aucune étape db-init — il crée et migre ses propres bases SQLite sous /config lors de son premier démarrage. Laissez initialization_jobs vide, sauf si vous avez des tâches personnalisées de chargement de données.
  • L'assistant de premier démarrage crée l'administrateur. L'assistant de configuration /web vous guide dans la création du compte administrateur et l'ajout des bibliothèques. Tant qu'il n'est pas terminé, le serveur n'a ni utilisateurs ni contenu.
  • /config est l'unique source de vérité — rendez-le persistant. Tout l'état de la bibliothèque se trouve sur le volume /config adossé à GCS. Supprimer ce bucket ou le faire pointer ailleurs efface la bibliothèque, les plugins et les utilisateurs. GCS FUSE n'étant pas un véritable système de fichiers POSIX, limitez Cloud Run à un usage léger ou de démonstration et migrez une vraie bibliothèque vers la variante GKE avec PVC en mode bloc.
  • L'image personnalisée est une fine enveloppe. Le Dockerfile est ARG JELLYFIN_VERSION=10.10.3 / FROM jellyfin/jellyfin:${JELLYFIN_VERSION} ; ainsi image_source = "custom" et le socle la copie en miroir dans Artifact Registry (enable_image_mirroring = true). application_version = "latest" se résout en la version épinglée 10.10.3 via l'argument de build propre à l'application JELLYFIN_VERSION — il n'est pas écrasé par l'injection générique APP_VERSION du socle.
  • Chemin de santé. Les sondes de démarrage et de vivacité ciblent GET /health, qui renvoie Healthy (200) sans authentification une fois le serveur prêt. La sonde de démarrage accorde un délai initial de 15 secondes avec une fenêtre de nouvelles tentatives généreuse ; la sonde de vivacité interroge toutes les 30 secondes.
  • Le transcodage est gourmand en CPU et sans GPU. Cloud Run ne dispose d'aucun GPU : privilégiez les clients en lecture directe. Augmentez cpu_limit pour le transcodage en direct et memory_limit pour les grandes bibliothèques.
  • Inspecter l'image et les montages de la révision en cours :
    gcloud run services describe <service-name> \
    --region "$REGION" --project "$PROJECT" \
    --format='value(spec.template.spec.containers[0].image)'

4. Variables de configuration​

Les variables sont regroupées exactement comme elles apparaissent sur la plateforme de déploiement. Seuls les paramètres propres à Jellyfin ou notables pour lui sont listés ; toutes les autres entrées sont héritées de App_CloudRun avec leur comportement standard.

Groupe 1 — Projet et identité​

VariableValeur par défautDescription
project_id(obligatoire)Projet Google Cloud cible.
regionus-central1Région du service et des ressources régionales.

Groupe 2 — Environnement de déploiement​

VariableValeur par défautDescription
tenant_iddemoSuffixe court qui rend les noms de ressources uniques par environnement.
support_users[]Adresses e-mail bénéficiant de l'accès au projet et des alertes de surveillance.
resource_labels{}Libellés appliqués à toutes les ressources.

Groupe 3 — Identité de l'application​

VariableValeur par défautDescription
application_namejellyfinNom de base des ressources. Ne pas modifier après le premier déploiement.
application_display_nameJellyfin Media ServerNom lisible affiché dans la console.
description(définie)Description du service.
application_versionlatestTag de l'image Jellyfin ; latest est épinglé sur 10.10.3 via l'argument de build JELLYFIN_VERSION.
enable_api_keyfalseGénère une clé d'API aléatoire dans Secret Manager. Recommandé pour tout déploiement joignable hors du VPC.

Groupe 4 — Exécution et mise à l'échelle​

VariableValeur par défautDescription
deploy_applicationtrueDéfinissez false pour ne provisionner que l'infrastructure.
cpu_limit1000mCPU par instance ; augmentez-le pour le transcodage en direct.
memory_limit1GiMémoire par instance ; augmentez-la pour les grandes bibliothèques.
min_instance_count1Gardez 1 pour rester actif et éviter les démarrages à froid en pleine lecture.
max_instance_count1Gardez 1. Une bibliothèque SQLite partagée sur un seul volume — n'exécutez jamais plusieurs réplicas.
container_port8096Port web/API de Jellyfin.
execution_environmentgen2Gen2 requis pour les montages GCS FUSE et NFS.
timeout_seconds300Durée maximale d'une requête (0 à 3600 secondes).
enable_cloudsql_volumefalseJellyfin n'utilise pas Cloud SQL — laissez false.
container_protocolhttp1HTTP/1.1 ; h2c uniquement pour HTTP/2 en clair.
enable_image_mirroringtrueCopie en miroir jellyfin/jellyfin dans Artifact Registry.
traffic_split[]Répartit le trafic entre les révisions pour des déploiements progressifs.
max_revisions_to_retain7Inopérant dans ce module ; le socle gère la conservation des révisions.

Groupe 5 — Contrôle d'accès et d'entrée​

VariableValeur par défautDescription
ingress_settingsinternalinternal garde le serveur privé au VPC ; définissez all pour une URL publique.
vpc_egress_settingPRIVATE_RANGES_ONLYN'achemine via le VPC que le trafic RFC 1918.
enable_iapfalseExige une connexion Google devant Jellyfin.
iap_authorized_users / iap_authorized_groups[]Qui peut accéder via IAP.

Groupe 6 — Variables d'environnement et secrets​

VariableValeur par défautDescription
environment_variables{}Paramètres supplémentaires non secrets injectés dans la révision.
secret_environment_variables{}Mappage variable d'environnement → nom du secret Secret Manager.
secret_propagation_delay30Nombre de secondes d'attente après la création d'un secret avant de poursuivre.
secret_rotation_period2592000sFréquence des notifications de rotation de Secret Manager.

Groupe 7 — Sauvegarde et restauration​

VariableValeur par défautDescription
backup_schedule0 2 * * *Cron (UTC) de la sauvegarde automatique du bucket /config.
backup_retention_days7Rétention ; augmentez-la en production.
enable_backup_import / backup_source / backup_uri / backup_formatoptions de restaurationRestaure un instantané de /config lors du déploiement (tar par défaut).

Groupe 8 — CI/CD et Binary Authorization​

Intégration Cloud Build / Cloud Deploy standard de App_CloudRun — voir App_CloudRun. Entrées principales : enable_cicd_trigger, github_repository_url, github_token, enable_cloud_deploy, enable_binary_authorization.

Groupe 9 — Initialisation personnalisée et SQL​

enable_custom_sql_scripts, custom_sql_scripts_bucket, custom_sql_scripts_path, custom_sql_scripts_use_root — sans objet pour Jellyfin (pas de base de données SQL) ; conservées pour la compatibilité avec le socle. Ce groupe contient également nfs_instance_name / nfs_instance_base_name pour la découverte NFS.

Groupe 10 — Équilibreur de charge, CDN et rétention des images​

VariableValeur par défautDescription
enable_cloud_armorfalseProvisionne un équilibreur de charge HTTPS global + Cloud Armor WAF.
admin_ip_ranges[]Plages CIDR exemptées des règles WAF.
application_domains[]Noms de domaine personnalisés pour l'équilibreur de charge HTTPS.
enable_cdnfalseActive Cloud CDN sur le backend de l'équilibreur de charge HTTPS.
max_images_to_retain / delete_untagged_images / image_retention_days7 / true / 30Politique de nettoyage d'Artifact Registry.

Groupe 11 — Stockage et système de fichiers​

VariableValeur par défautDescription
create_cloud_storagetrueProvisionne le bucket /config de Jellyfin (créé automatiquement) et d'éventuels buckets supplémentaires.
storage_buckets[]Buckets GCS supplémentaires en plus du bucket storage provisionné automatiquement.
enable_nfsfalseProvisionne Cloud Filestore (NFS) ; à activer pour les grandes médiathèques partagées.
nfs_mount_path/mnt/nfsChemin de montage dans le conteneur.
gcs_volumes[]Montages de volumes GCS FUSE supplémentaires (le bucket /config est ajouté automatiquement).
manage_storage_kms_iam / enable_artifact_registry_cmekfalseOptions CMEK.

Groupe 12 — Backend de base de données​

VariableValeur par défautDescription
database_typeNONEFixé à NONE par Jellyfin_Common — Jellyfin utilise SQLite embarqué, sans Cloud SQL.
database_password_length32Inopérant ; transmis pour la compatibilité avec le socle.
enable_auto_password_rotation / rotation_propagation_delay_secdésactivéSans objet — pas de base de données SQL.
db_*_env_var_name / service_url_env_var_name""Alias de variables d'environnement supplémentaires facultatifs ; laissez vide pour Jellyfin.

Groupe 13 — Jobs et tâches planifiées​

VariableValeur par défautDescription
initialization_jobs[]Jellyfin n'a besoin d'aucun job d'initialisation ; n'en fournissez que pour des tâches personnalisées de chargement de données.
cron_jobs[]Jobs Cloud Run facultatifs pour les tâches de maintenance.

Groupe 14 — Observabilité et santé​

VariableValeur par défautDescription
startup_probeHTTP /health, délai de 15 sSonde de démarrage ; /health renvoie 200 une fois prêt.
liveness_probeHTTP /health, délai de 30 sSonde de vivacité.
startup_probe_configHTTP /healthSonde de démarrage structurée alternative.
health_check_configHTTP /healthSonde de vivacité structurée alternative.
uptime_check_config{ enabled=false, path="/health" }Test de disponibilité Cloud Monitoring.
alert_policies[]Règles d'alerte basées sur des métriques.

Groupe 23 — VPC Service Controls et journalisation d'audit​

VariableValeur par défautDescription
enable_vpc_scfalseApplique un périmètre VPC-SC (nécessite organization_id).
vpc_cidr_ranges / vpc_sc_dry_run[] / trueCIDR du niveau d'accès / mode simulation (dry-run).
enable_audit_loggingfalseJournaux d'audit Cloud détaillés.

5. Sorties​

Renvoyées lors d'un déploiement réussi — le moyen le plus rapide de localiser et d'explorer les ressources en cours d'exécution.

SortieDescription
service_nameNom du service Cloud Run.
jellyfin_urlURL du service pour l'interface web / l'API de Jellyfin (interne au VPC lorsque ingress_settings = internal).
service_locationRégion dans laquelle s'exécute le service.
stage_servicesURL des services propres à chaque étape (Cloud Deploy).
load_balancer_ip / load_balancer_urlIP / URL de l'équilibreur de charge HTTPS externe (lorsqu'il est activé).
storage_bucketsBuckets Cloud Storage créés (y compris le bucket /config).
network_name / network_exists / regionsRéseau VPC, présence, régions.
container_image / container_registryImage déployée et dépôt Artifact Registry.
monitoring_enabled / monitoring_notification_channels / uptime_check_namesÉtat de la surveillance, canaux, tests de disponibilité.
initialization_jobsNoms des éventuels jobs de configuration (vide pour un déploiement Jellyfin par défaut).
deployment_id / tenant_id / resource_prefixIdentifiants de nommage.
project_id / project_numberIdentifiants du projet.
cicd_enabled / github_repository_url / github_repository_owner / github_repository_name / cicd_configurationÉtat et détails de la CI/CD.
artifact_registry_repository / cloudbuild_trigger_name / cloudbuild_trigger_idRegistre et déclencheur de build.
vpc_sc_enabled / vpc_sc_perimeter_name / vpc_sc_dry_run_modeÉtat de VPC-SC.
audit_logging_enabled / artifact_registry_cmek_enabledÉtat de la journalisation d'audit et de CMEK.

6. Pièges de configuration et valeurs par défaut judicieuses​

Risque : Critique (perte de données / panne / sécurité) — Élevé (service dégradé) — Moyen (coût ou dégradation partielle) — Faible (mineur).

Validation héritée au moment du plan. Ce module fait passer sa configuration par le moteur du socle App_CloudRun, qui valide les valeurs et leurs combinaisons au moment du plan — un environnement d'exécution gen1 avec des montages NFS/GCS, IAP sans identités autorisées, une valeur hors plage pour container_port/backup_retention_days/timeout_seconds. Une configuration invalide fait échouer le plan avec une erreur claire et nommée avant la création de toute ressource ; la plupart des erreurs ci-dessous sont donc détectées en amont plutôt qu'à l'apply ou à l'exécution.

ParamètreValeur judicieuseRisqueConséquence en cas d'erreur
Bucket GCS /configNe jamais le supprimer ni le faire pointer ailleursCritiqueLe bucket /config contient la bibliothèque SQLite, les utilisateurs et les métadonnées ; le supprimer efface tout le serveur.
max_instance_count1CritiquePlusieurs réplicas écrivent dans un même fichier SQLite via FUSE et corrompent la bibliothèque.
enable_backup_importfalse sauf en cas de restaurationCritiqueL'activer sans backup_uri valide fait échouer le job d'import.
execution_environmentgen2ÉlevéGen1 ne peut pas monter GCS FUSE, si bien que /config n'est jamais persistant.
min_instance_count1ÉlevéLes démarrages à froid après une mise à l'échelle à zéro interrompent les flux en cours et rechargent la bibliothèque.
memory_limit1Gi (à augmenter pour les grandes bibliothèques)ÉlevéUne mémoire insuffisante provoque l'arrêt du serveur pour manque de mémoire (OOM) pendant l'analyse ou le transcodage d'une grande bibliothèque.
cpu_limit1000m (à augmenter pour le transcodage)ÉlevéLe transcodage en direct sur Cloud Run (sans GPU) sature le CPU ; privilégiez la lecture directe.
Transcodage intensif / nombreux fluxUtilisez Jellyfin_GKEÉlevéLa latence de GCS FUSE et les délais de requête de Cloud Run rendent Cloud Run peu adapté à une diffusion soutenue.
enable_api_keyLaisser false ; actuellement non fonctionnelMoyenLe secret généré est injecté sous QDRANT__SERVICE__API_KEY (un reste de copier-coller de Qdrant_Common) — Jellyfin ne le lit jamais, il ne crée donc qu'un secret Secret Manager orphelin. Créez plutôt les clés d'API dans l'application sous Dashboard → API Keys.
ingress_settingsinternal sauf usage publicMoyenall expose le serveur multimédia à Internet — à associer à IAP ou à Cloud Armor.
backup_retention_days7 (à augmenter en production)MoyenTrop court pour récupérer un instantané plus ancien de la bibliothèque.
Assistant de premier démarrageÀ terminer immédiatementMoyenUn serveur non configuré n'a pas d'administrateur ; quiconque l'atteint peut s'approprier le compte administrateur.

Pour le comportement du socle mentionné tout au long de ce guide — identité du service, mise à l'échelle et simultanéité, entrée et équilibrage de charge, CI/CD, Cloud Armor, IAP, Binary Authorization, VPC-SC, sauvegardes et copie en miroir des images — consultez App_CloudRun. La configuration applicative propre à Jellyfin, partagée avec la variante GKE, est décrite dans Jellyfin_Common. Pour une présentation guidée, consultez le lab Jellyfin_CloudRun.

Need RAD to do something it does not do yet? Request it on the roadmap, or vote on what is already there.