EdyTheCow / docker-media-center

Docker Media Center running Jellyfin under Traefik, fully automated and production ready solution
105 stars 9 forks source link

404 jellyfin and traefik #3

Closed cprpolo closed 3 months ago

cprpolo commented 11 months ago

Here is my history:

cprpolo commented 11 months ago

image

I'm using portainer and the logs from jellyfin:

[migrations] started [migrations] no migrations found usermod: no changes ─────────────────────────────────────── ██╗ ███████╗██╗ ██████╗ ██║ ██╔════╝██║██╔═══██╗ ██║ ███████╗██║██║ ██║ ██║ ╚════██║██║██║ ██║ ███████╗███████║██║╚██████╔╝ ╚══════╝╚══════╝╚═╝ ╚═════╝ Brought to you by linuxserver.io ─────────────────────────────────────── To support the app dev(s) visit: Jellyfin: https://opencollective.com/jellyfin To support LSIO projects visit: https://www.linuxserver.io/donate/ ─────────────────────────────────────── GID/UID ─────────────────────────────────────── User UID: 1000 User GID: 1000 ─────────────────────────────────────── [custom-init] No custom files found, skipping... failed to load external entity "/config/network.xml" [19:43:13] [INF] [1] Main: Jellyfin version: 10.8.10 [19:43:13] [INF] [1] Main: Environment Variables: ["[JELLYFIN_CACHE_DIR, /config/cache]", "[JELLYFIN_WEB_DIR, /usr/share/jellyfin/web]", "[JELLYFIN_DATA_DIR, /config/data]", "[JELLYFIN_CONFIG_DIR, /config]", "[JELLYFIN_LOG_DIR, /config/log]"] [19:43:13] [INF] [1] Main: Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"] [19:43:13] [INF] [1] Main: Operating system: Linux [19:43:13] [INF] [1] Main: Architecture: X64 [19:43:13] [INF] [1] Main: 64-Bit Process: True [19:43:13] [INF] [1] Main: User Interactive: True [19:43:13] [INF] [1] Main: Processor count: 4 [19:43:13] [INF] [1] Main: Program data path: /config/data [19:43:13] [INF] [1] Main: Web resources path: /usr/share/jellyfin/web [19:43:13] [INF] [1] Main: Application directory: /usr/lib/jellyfin/bin/ [19:43:13] [INF] [1] Jellyfin.Server.Migrations.MigrationRunner: Applying migration 'CreateNetworkConfiguration' [19:43:13] [INF] [1] Jellyfin.Server.Migrations.MigrationRunner: Migration 'CreateNetworkConfiguration' applied successfully [19:43:13] [INF] [1] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /config/cache [19:43:13] [INF] [1] Emby.Server.Implementations.ApplicationHost: Loading assemblies [19:43:14] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN addresses : [10.0.0.0/8,172.16.0.0/12,192.168.0.0/16] [19:43:14] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN exclusions : [] [19:43:14] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: [10.0.0.0/8,172.16.0.0/12,192.168.0.0/16] [19:43:14] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind addresses: [] [19:43:14] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind exclusions: [] [19:43:16] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: TMDb 10.8.10.0 [19:43:16] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Studio Images 10.8.10.0 [19:43:16] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: OMDb 10.8.10.0 [19:43:16] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: MusicBrainz 10.8.10.0 [19:43:16] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: AudioDB 10.8.10.0 [19:43:16] [INF] [1] Main: Kestrel listening on Any IP4 Address [19:43:16] [WRN] [1] Microsoft.AspNetCore.DataProtection.Repositories.EphemeralXmlRepository: Using an in-memory repository. Keys will not be persisted to storage. [19:43:16] [WRN] [1] Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager: Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits. [19:43:16] [WRN] [1] Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager: No XML encryptor configured. Key {b9d7abd2-cfe9-42b9-960e-50ed289040fb} may be persisted to storage in unencrypted form. [19:43:16] [INF] [1] Emby.Server.Implementations.ApplicationHost: Running startup tasks [19:43:16] [INF] [1] Emby.Server.Implementations.ScheduledTasks.TaskManager: Daily trigger for Extract Chapter Images set to fire at 2023-07-30 02:00:00.000 +02:00, which is 06:16:43.2803240 from now. [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Found ffmpeg version 5.1.3 [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available decoders: ["libdav1d", "av1", "av1_cuvid", "av1_qsv", "h264", "h264_qsv", "h264_cuvid", "hevc", "hevc_qsv", "hevc_cuvid", "mpeg2video", "mpeg2_qsv", "mpeg2_cuvid", "mpeg4", "mpeg4_cuvid", "msmpeg4", "vc1_qsv", "vc1_cuvid", "vp8", "libvpx", "vp8_cuvid", "vp8_qsv", "vp9", "libvpx-vp9", "vp9_cuvid", "vp9_qsv", "aac", "ac3", "dca", "flac", "mp3", "truehd"] [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available encoders: ["libx264", "h264_amf", "h264_nvenc", "h264_qsv", "h264_v4l2m2m", "h264_vaapi", "libx265", "hevc_amf", "hevc_nvenc", "hevc_qsv", "hevc_vaapi", "mpeg4", "msmpeg4", "libvpx", "libvpx-vp9", "aac", "libfdk_aac", "ac3", "dca", "flac", "libmp3lame", "libopus", "truehd", "libvorbis", "srt"] [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available filters: ["deinterlace_qsv", "deinterlace_vaapi", "hwupload_cuda", "hwupload_vaapi", "overlay_opencl", "overlay_qsv", "overlay_vaapi", "overlay_cuda", "procamp_vaapi", "scale_cuda", "scale_opencl", "scale_qsv", "scale_vaapi", "tonemap_cuda", "tonemap_opencl", "tonemap_vaapi", "vpp_qsv", "yadif_cuda", "zscale", "alphasrc"] [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Available hwaccel types: ["cuda", "vaapi", "qsv", "drm", "opencl", "vulkan"] [19:43:17] [INF] [1] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: FFmpeg: /usr/lib/jellyfin-ffmpeg/ffmpeg [19:43:17] [INF] [1] Emby.Server.Implementations.ApplicationHost: ServerId: 6741fe504fb74e6397fe1694b4498a1e [19:43:17] [INF] [1] Emby.Server.Implementations.ApplicationHost: Executed all pre-startup entry points in 0:00:00.090945 [19:43:17] [INF] [1] Emby.Server.Implementations.ApplicationHost: Core startup complete [19:43:17] [INF] [1] Emby.Server.Implementations.ApplicationHost: Executed all post-startup entry points in 0:00:00.1054301 [19:43:17] [INF] [1] Main: Startup complete 0:00:04.3303974 [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'AccessSchedule' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'ActivityLog' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'CustomItemDisplayPreferences' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'DisplayPreferences' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'HomeSection' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'ImageInfo' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'ItemDisplayPreferences' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'Permission' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'Preference' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'ApiKey' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'Device' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'DeviceOptions' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [19:43:18] [WRN] [13] Microsoft.EntityFrameworkCore.Model.Validation: The entity type 'User' is configured to use schema 'jellyfin', but SQLite does not support schemas. This configuration will be ignored by the SQLite provider. [ls.io-init] done. [19:43:19] [INF] [13] Emby.Server.Implementations.ScheduledTasks.TaskManager: StartupTrigger fired for task: Update Plugins [19:43:19] [INF] [13] Emby.Server.Implementations.ScheduledTasks.TaskManager: Queuing task PluginUpdateTask [19:43:19] [INF] [17] Emby.Server.Implementations.ScheduledTasks.TaskManager: Executing Update Plugins [19:43:20] [INF] [10] Emby.Server.Implementations.ScheduledTasks.TaskManager: Update Plugins Completed after 0 minute(s) and 0 seconds [19:43:20] [INF] [10] Emby.Server.Implementations.ScheduledTasks.TaskManager: ExecuteQueuedTasks

and from traefik:

time="2023-07-29T17:43:11Z" level=info msg="Configuration loaded from file: /etc/traefik/traefik.toml" time="2023-07-29T17:43:11Z" level=error msg="service \"portainer\" error: port is missing" providerName=docker container=portainer-6da5d61a09c0bd65750339f4854ae221871af3b18f94029c7228dce17578aede time="2023-07-29T17:43:11Z" level=error msg="service \"portainer\" error: port is missing" providerName=docker container=portainer-6da5d61a09c0bd65750339f4854ae221871af3b18f94029c7228dce17578aede

EdyTheCow commented 11 months ago

The htpasswd shouldn't matter for Jellyfin specifically because it's not even using it, Jellyfin has its own authentication so htpasswd is irrelevant in this case.

Could you show me your .env file? Also, is the file "acme.json" populated with anything or is it empty?

cprpolo commented 11 months ago

.env file:

Containers prefix

COMPOSE_PROJECT_NAME=dmc

Data location for storing media, downloads and configs

DATA_DIR=../data SERVICES_DIR=../services

Timezone

TIMEZONE=Europe/Oslo

Linux user/group ID for file permissions

User ID

ENV_PUID=1000

Group ID

ENV_PGID=1000

Domain

DOMAIN=chickenkiller.com

Subdomains for accessing services

SUB_DOMAIN_JELLYFIN=jellyfincp SUB_DOMAIN_TRANSMISSION=transmissioncp SUB_DOMAIN_SONARR=sonarrcp SUB_DOMAIN_RADARR=radarr SUB_DOMAIN_PROWLARR=prowlarr SUB_DOMAIN_JELLYSEERR=jellyseerr

"acme.json" is populated with many things

cprpolo commented 11 months ago

if i deploy with my own containers and config i get the same issue... 404 any other ideas? I am not sure what is wrong tbh...

EdyTheCow commented 11 months ago

Could you also show me your docker-compose.yml that's found in "dmc/compose/"?

cprpolo commented 11 months ago

Here it is: `version: "3.7"

networks: global: external: true local: external: false

services:

jellyfin: image: lscr.io/linuxserver/jellyfin:latest restart: unless-stopped

security_opt: # Required for Docker versions below 20.10.10, update Docker for long term solution. Source: https://docs.linuxserver.io/faq#jammy

#  - seccomp=unconfined
networks:
  - global
  - local
environment:
  - PUID=${ENV_PUID}
  - PGID=${ENV_PGID}
  - TZ=${TIMEZONE}
volumes:
  - ${SERVICES_DIR}/jellyfin:/config
  - ${DATA_DIR}/media:/data/media
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.dmc-jellyfin.rule=Host(`${SUB_DOMAIN_JELLYFIN}.${DOMAIN}`)"
  - "traefik.http.routers.dmc-jellyfin.tls=true"
  - "traefik.http.services.dmc-jellyfin.loadbalancer.server.port=8096"
  - "traefik.http.routers.dmc-jellyfin.tls.certresolver=letsencrypt"
  - "traefik.docker.network=global"

transmission: image: lscr.io/linuxserver/transmission:latest restart: unless-stopped networks:

`

cprpolo commented 11 months ago

is there anything else needed?

cprpolo commented 11 months ago

I'm still struggling, do you think is a bug or I am doing something stupidly wrong?

EdyTheCow commented 11 months ago

When I navigated to the jellyfin domain earlier it did say 404. Meaning it does reach Traefik and since acme.json is also populated means everything works until it comes down to Jellyfin itself.

The issue itself has something to do with Jellyfin. Have you tried running other services like transmission, sonarr, etc.? Do those work?

cprpolo commented 11 months ago

no, but it is likely the same, I can't test right now what could i check to see the issue on jellyfin?

EdyTheCow commented 11 months ago

The easiest and most straightforward thing you can test is the other services. If they do work, then it's definitely something with Jellyfin. If not, then it could be something else. Basically try to narrow down what could be the issue.

cprpolo commented 11 months ago

cool, i'll check and revert here

cprpolo commented 11 months ago

just a doubt maybe unrelated to the issue but it is related to traefik and I could not find a clarification. If i want to set service1.mydomain.com to reach my service1 and service2.mydomain.com to reach my service2, I need 2 dns entries pointing to my same public IP, right? one service1.mydomain.com and other service2.mydomain.com, correct?

but if I want mysubdomain.domain.com/service1 to reach my service1 and mysubdomain.domain.com/service2 to reach my service2 I only need a dns entry to reach my public IP on mysubdomain.domain.com, right?

and is there a limitation on traefik working only on HTTP?

Thank you in advance

EdyTheCow commented 11 months ago

Yes, it is possible to use /service1, etc. Which would result in one DNS entry. However, in that case you would have to add additional traefik labels and also make sure there's no conflicts or edge cases with the services. While it is possible, it is beyond the scope of this guide. The main reason why I chose to go with subdomains is to fully separate each service.

I am not sure why you would want to run HTTP while using traefik or even without using traefik. In any case it is highly recommended to run any services using HTTPS.

If you're only interested in running jellyfin, you should just look up the official or linuxserver docker set-up which should be more straightforward to install. If you still want to use this set-up, I would suggest trying to setup a simple traefik and nginx installation. Just to see if a service under traefik works. If that works, then try to use the same configuration with just jellyfin and traefik. The issue could be anything at this point, so it may be wise to just try installing the most simple possible thing using traefik and go from there. I am currently using this exact setup, so the issue should be somewhere on your side.

cprpolo commented 11 months ago

okay, so for https I need a certificate for each dns entry or i can use one for something like: *.mydomain.com? or not adviced?

EdyTheCow commented 11 months ago

You don't need to do anything, Traefik generates certificates automatically for every domain or subdomain you define in .env file. All of the generated certificates are stored in the acme.json file. You can actually open the file and see every certificate generated for each sub domain.

cprpolo commented 11 months ago

mmm okay, cool, good to know, thank you :) I'll let you know how it goes

cprpolo commented 11 months ago

Hi! I got a working set up for jellyfin with a mix and match of different places. I think we can close this but I also get the certificate not trust if you have any idea? :)

EdyTheCow commented 11 months ago

I am glad you finally got it working! Are you using Traefik for certificates? Could you also take a screenshot of the issue?

cprpolo commented 11 months ago

Thank you for your help!! :) yes, default traefik certificates Screenshot_20230808_061633 Screenshot_20230808_061649