2025-05-09, 05:00 AM
I have extensively reviewed other posts in this forum but have not yet found a solution unfortunately. Thank you for any suggestions.
The LG TV is a C7 running WebOS 3.9.
What works:
What does not work:
Looking at Caddy logs shows that the app is making requests for the JS resources, so I know that it's successfully connected to the server.
I am familiar with the common nginx issue where X-Frame-Options is set, but Caddy does not set this header by default, to my knowledge (you can see in the logs it does not appear)
I verified this with curl:
Other things I have tried/checked:
Relevant piece of docker-compose:
The LG TV is a C7 running WebOS 3.9.
What works:
- Web, Android app, Samsung TV (Tizen) app, WebOS TV web browser-- all can connect to Jellyfin over HTTPS via the Caddy proxy.
- WebOS app-- can connect if I expose the Jellyfin port and connect over HTTP
What does not work:
- WebOS app-- once I try to connect over HTTPS, it shows the logo but does not load the app.
Looking at Caddy logs shows that the app is making requests for the JS resources, so I know that it's successfully connected to the server.
Code:
{"level":"info","ts":1746764928.4870903,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/System/Info/Public","headers":{"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept":["*/*"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001101052,"size":210,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"X-Response-Time-Ms":["0.3611"],"Content-Type":["application/json; charset=utf-8"],"Server":["Caddy","Kestrel"]}}
{"level":"info","ts":1746764928.5009344,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/manifest.json","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept":["*/*"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001231364,"size":291,"status":200,"resp_headers":{"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.4606"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["application/json"],"Accept-Ranges":["bytes"],"Server":["Caddy","Kestrel"],"Etag":["\"1dba66021b2d28d\""]}}
{"level":"info","ts":1746764928.586816,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/index.html","headers":{"Accept-Language":["en-US"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Connection":["keep-alive"],"Accept":["text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001829482,"size":2124,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Encoding":["gzip"],"Content-Type":["text/html"],"X-Response-Time-Ms":["0.6772"],"Etag":["\"1dba66021b2f47b\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Vary":["Accept-Encoding"],"Accept-Ranges":["bytes"]}}
{"level":"info","ts":1746764928.6406188,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/runtime.bundle.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002920122,"size":26154,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b21180\""],"Vary":["Accept-Encoding"],"Server":["Caddy","Kestrel"],"Content-Type":["text/javascript"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"X-Response-Time-Ms":["0.7881"]}}
{"level":"info","ts":1746764928.6777678,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41096","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/main.jellyfin.7d6eaeb032d03eb0ae47.css?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["text/css,*/*;q=0.1"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.004908314,"size":16799,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Content-Type":["text/css"],"Etag":["\"1dba66021b3cd93\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.2917"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"]}}
{"level":"info","ts":1746764928.6858945,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.lodash-es.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.014939171,"size":9574,"status":200,"resp_headers":{"Content-Type":["text/javascript"],"Etag":["\"1dba66021b2b19c\""],"X-Response-Time-Ms":["4.5452"],"Vary":["Accept-Encoding"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"]}}
{"level":"info","ts":1746764928.6900296,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41104","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40mui.icons-material.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.00215927,"size":8553,"status":200,"resp_headers":{"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Vary":["Accept-Encoding"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"X-Response-Time-Ms":["0.4333"],"Content-Type":["text/javascript"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Etag":["\"1dba66021b2a90d\""]}}
{"level":"info","ts":1746764928.6910307,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/37869.088680d7e7a2eede3618.css?5472a04be7afaf932b1a","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["text/css,*/*;q=0.1"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.019617045,"size":21796,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Type":["text/css"],"Vary":["Accept-Encoding"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"X-Response-Time-Ms":["4.5847"],"Etag":["\"1dba66021b36d7c\""]}}
{"level":"info","ts":1746764928.7033637,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41096","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40tanstack.query-core.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002816095,"size":27199,"status":200,"resp_headers":{"Accept-Ranges":["bytes"],"Vary":["Accept-Encoding"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Etag":["\"1dba66021b35cf3\""],"X-Response-Time-Ms":["0.7308"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Server":["Caddy","Kestrel"],"Content-Type":["text/javascript"]}}
{"level":"info","ts":1746764928.7178416,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40tanstack.react-query.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001622614,"size":2790,"status":200,"resp_headers":{"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.6049"],"Content-Type":["text/javascript"],"Server":["Caddy","Kestrel"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b2ce88\""],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Alt-Svc":["h3=\":443\"; ma=2592000"]}}
{"level":"info","ts":1746764928.7198467,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41104","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.date-fns.esm.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002142083,"size":17588,"status":200,"resp_headers":{"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["text/javascript"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"],"Vary":["Accept-Encoding"],"Etag":["\"1dba66021b3f3c5\""],"X-Response-Time-Ms":["0.3626"]}}
{"level":"info","ts":1746764928.7210393,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41092","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40jellyfin.sdk.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.05011647,"size":111076,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"X-Response-Time-Ms":["17.8329"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b99cdb\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"]}}
{"level":"info","ts":1746764928.7282162,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.core-js.bundle.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.010206904,"size":70706,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"X-Response-Time-Ms":["0.7346"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Server":["Caddy","Kestrel"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b01945\""],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"]}}
{"level":"info","ts":1746764928.7466137,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41106","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.react-transition-group.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001203485,"size":3297,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"X-Response-Time-Ms":["0.44"],"Content-Type":["text/javascript"],"Content-Encoding":["gzip"],"Vary":["Accept-Encoding"],"Etag":["\"1dba66021b2f213\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"]}}
{"level":"info","ts":1746764928.74801,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40popperjs.core.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002013277,"size":7757,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"],"Vary":["Accept-Encoding"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Etag":["\"1dba66021b29da3\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["text/javascript"],"X-Response-Time-Ms":["1.0752"],"Content-Encoding":["gzip"]}}
{"level":"info","ts":1746764928.7526782,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41096","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.axios.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002320069,"size":24563,"status":200,"resp_headers":{"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Etag":["\"1dba66021b3e823\""],"X-Response-Time-Ms":["0.5492"],"Accept-Ranges":["bytes"],"Server":["Caddy","Kestrel"],"Vary":["Accept-Encoding"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Type":["text/javascript"]}}
{"level":"info","ts":1746764928.763255,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41106","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.webcomponents.js.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001369504,"size":14126,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"Etag":["\"1dba66021b24a99\""],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["text/javascript"],"Content-Encoding":["gzip"],"Server":["Caddy","Kestrel"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.3209"]}}
{"level":"info","ts":1746764928.7639866,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41104","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.react-dom.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.005830535,"size":48719,"status":200,"resp_headers":{"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.5067"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b3264a\""],"Content-Type":["text/javascript"]}}
{"level":"info","ts":1746764928.7652102,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41092","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.jquery.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.004282378,"size":35450,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"],"Server":["Caddy","Kestrel"],"X-Response-Time-Ms":["0.4259"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Etag":["\"1dba66021b38480\""]}}
{"level":"info","ts":1746764928.7663093,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.resize-observer-polyfill.bundle.js?5472a04be7afaf932b1a","headers":{"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.001002701,"size":2718,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Etag":["\"1dba66021b2cf81\""],"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.3233"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Type":["text/javascript"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"]}}
{"level":"info","ts":1746764928.7691197,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.regenerator-runtime.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.000865707,"size":2756,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Content-Type":["text/javascript"],"X-Response-Time-Ms":["0.2768"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Vary":["Accept-Encoding"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Etag":["\"1dba66021b2cbcc\""],"Content-Encoding":["gzip"]}}
{"level":"info","ts":1746764928.7704265,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41096","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.jellyfin-apiclient.bundle.js?5472a04be7afaf932b1a","headers":{"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002207234,"size":23614,"status":200,"resp_headers":{"Alt-Svc":["h3=\":443\"; ma=2592000"],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"],"X-Response-Time-Ms":["0.3992"],"Server":["Caddy","Kestrel"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b38659\""],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"]}}
{"level":"info","ts":1746764928.7948933,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41104","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.history.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002472252,"size":181,"status":200,"resp_headers":{"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Etag":["\"1dba66021b2d14d\""],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"],"Vary":["Accept-Encoding"],"X-Response-Time-Ms":["0.0969"],"Content-Type":["text/javascript"],"Accept-Ranges":["bytes"]}}
{"level":"info","ts":1746764928.7951174,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.dompurify.bundle.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.003081815,"size":9407,"status":200,"resp_headers":{"Vary":["Accept-Encoding"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"],"Etag":["\"1dba66021b287cf\""],"X-Response-Time-Ms":["0.3404"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["text/javascript"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Encoding":["gzip"]}}
{"level":"info","ts":1746764928.7961736,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.intersection-observer.bundle.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.005635705,"size":3369,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Encoding":["gzip"],"Vary":["Accept-Encoding"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"X-Response-Time-Ms":["0.4946"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Type":["text/javascript"],"Accept-Ranges":["bytes"],"Etag":["\"1dba66021b2f2d7\""]}}
{"level":"info","ts":1746764928.7966588,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41096","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.%40remix-run.router.bundle.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.004735374,"size":26837,"status":200,"resp_headers":{"Server":["Caddy","Kestrel"],"Accept-Ranges":["bytes"],"X-Response-Time-Ms":["0.3809"],"Vary":["Accept-Encoding"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Type":["text/javascript"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Etag":["\"1dba66021b3cca0\""]}}
{"level":"info","ts":1746764928.7968755,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41092","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.react-router-dom.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.005080871,"size":6993,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Server":["Caddy","Kestrel"],"X-Response-Time-Ms":["0.3741"],"Etag":["\"1dba66021b292a5\""],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"],"Content-Encoding":["gzip"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Accept-Ranges":["bytes"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"]}}
{"level":"info","ts":1746764928.8037574,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41106","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/node_modules.react-router.bundle.js?5472a04be7afaf932b1a","headers":{"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.011583772,"size":5251,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Vary":["Accept-Encoding"],"Content-Type":["text/javascript"],"X-Response-Time-Ms":["0.4946"],"Accept-Ranges":["bytes"],"Content-Encoding":["gzip"],"Etag":["\"1dba66021b2e21b\""]}}
{"level":"info","ts":1746764928.8203483,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41104","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/37869.bundle.js?5472a04be7afaf932b1a","headers":{"Connection":["keep-alive"],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002917326,"size":27839,"status":200,"resp_headers":{"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Accept-Ranges":["bytes"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Vary":["Accept-Encoding"],"Etag":["\"1dba66021b3c5a2\""],"X-Response-Time-Ms":["0.5519"],"Content-Type":["text/javascript"],"Content-Encoding":["gzip"]}}
{"level":"info","ts":1746764928.8218846,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41090","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/serviceworker.js?5472a04be7afaf932b1a","headers":{"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"],"Accept":["*/*"]},"tls":{"resumed":false,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.002949938,"size":428,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Content-Encoding":["gzip"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Content-Type":["text/javascript"],"Accept-Ranges":["bytes"],"Vary":["Accept-Encoding"],"Server":["Caddy","Kestrel"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"X-Response-Time-Ms":["0.3364"],"Etag":["\"1dba66021b2d280\""]}}
{"level":"info","ts":1746764928.8423955,"logger":"http.log.access","msg":"handled request","request":{"remote_ip":"192.168.2.21","remote_port":"41094","client_ip":"192.168.2.21","proto":"HTTP/1.1","method":"GET","host":"jellyfin.mydomain.com","uri":"/web/main.jellyfin.bundle.js?5472a04be7afaf932b1a","headers":{"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (Web0S; Linux/SmartTV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 WebAppManager"],"Accept-Encoding":["gzip,deflate"],"Accept-Language":["en-us,en"],"Connection":["keep-alive"]},"tls":{"resumed":true,"version":771,"cipher_suite":49195,"proto":"http/1.1","server_name":"jellyfin.mydomain.com"}},"bytes_read":0,"user_id":"","duration":0.023498814,"size":146876,"status":200,"resp_headers":{"Date":["Fri, 09 May 2025 04:28:48 GMT"],"Last-Modified":["Sat, 05 Apr 2025 19:22:55 GMT"],"Alt-Svc":["h3=\":443\"; ma=2592000"],"Content-Encoding":["gzip"],"Content-Type":["text/javascript"],"Accept-Ranges":["bytes"],"X-Response-Time-Ms":["0.2997"],"Server":["Caddy","Kestrel"],"Etag":["\"1dba66021b57036\""],"Vary":["Accept-Encoding"]}}
I am familiar with the common nginx issue where X-Frame-Options is set, but Caddy does not set this header by default, to my knowledge (you can see in the logs it does not appear)
I verified this with curl:
Code:
$ curl --head -i https://jellyfin.mydomain.com/web/
HTTP/2 200
accept-ranges: bytes
alt-svc: h3=":443"; ma=2592000
content-type: text/html
date: Fri, 09 May 2025 04:34:55 GMT
etag: "1db2e0a053d2a7b"
last-modified: Sun, 03 Nov 2024 16:04:11 GMT
server: Caddy
server: Kestrel
x-response-time-ms: 3.4156
content-length: 9723
Other things I have tried/checked:
- Ensured reverse proxy subnet is set in Networking settings (it's set to 172.19.0.0/16 which is the subnet of the bridge network, and I've verified that proper IPs are showing up in Jellyfin logs)
- Rolling jellyfin back as far as 10.9.8
- Rolling back caddy-docker-proxy several releases
- Reinstalling jellyfin-webos both from the WebOS appstore as well as the Homebrew channel
- Manually unsetting X-Frame-Options headers in my Caddyfile just in case they were somehow set
- Downloaded the oldest version of Chrome I could find ( v48 ) to see if jellyfin-web was breaking with older Chrome versions
Relevant piece of docker-compose:
Code:
caddy:
container_name: caddy
image: homeall/caddy-reverse-proxy-cloudflare:2025.05.06
environment:
- CADDY_INGRESS_NETWORKS=caddy
labels:
caddy.email: $CF_EMAIL
caddy.acme_dns: "cloudflare {env.CF_API_TOKEN}"
caddy.log:
caddy.log.include: http.log.access
caddy.log.level: WARN
caddy_0: (internal)
caddy_0.@internal: remote_ip private_ranges
caddy_0.@external: not remote_ip private_ranges
caddy_0.reverse_proxy: "@internal {args[:]}"
caddy_0.respond: "@external `Forbidden` 403"
caddy_1: ${HOSTNAME}.${DOMAIN}
caddy_1.import: internal ${HOSTNAME}.${DOMAIN}:5000
org.hotio.pullio.update: ${PULLIO_UPDATE}
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- caddyData:/data
restart: unless-stopped
jellyfin:
container_name: jellyfin
image: ghcr.io/hotio/jellyfin:release
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
- UMASK=002
volumes:
- /etc/localtime:/etc/localtime:ro
labels:
caddy: jellyfin.${DOMAIN}
caddy.import: internal "{{upstreams 8096}}"
caddy.log:
healthcheck:
test: [ "CMD", "curl", "--fail", "https://jellyfin.${DOMAIN}/health" ]
interval: 1m
start_period: 30s
networks:
- caddy
volumes:
- ${DOCKERCONFDIR}/jellyfin:/config
- ${DOCKERSTORAGEDIR}/media:/data/media
devices:
- /dev/dri:/dev/dri