docker-compose.yaml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. {% set tpl = ix_lib.base.render.Render(values) %}
  2. {% set c1 = tpl.add_container(values.consts.jellyfin_container_name, "image") %}
  3. {% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %}
  4. {% set perm_config = {"uid": values.run_as.user, "gid": values.run_as.group, "mode": "check"} %}
  5. {% do c1.set_user(values.run_as.user, values.run_as.group) %}
  6. {% do c1.healthcheck.set_test("curl", {"port": values.consts.internal_web_port, "path": "/health"}) %}
  7. {% if values.jellyfin.publish_server_url %}
  8. {% do c1.environment.add_env("JELLYFIN_PublishedServerUrl", values.jellyfin.publish_server_url) %}
  9. {% endif %}
  10. {% do c1.environment.add_user_envs(values.jellyfin.additional_envs) %}
  11. {% if not values.network.host_network %}
  12. {% do c1.add_port(values.network.web_port, {"container_port": values.consts.internal_web_port}) %}
  13. {% do c1.add_port(values.network.https_port, {"container_port": values.consts.internal_https_port}) %}
  14. {% do c1.add_port(values.network.discovery_port, {"container_port": 7359, "protocol": "udp"}) %}
  15. {% endif %}
  16. {% do c1.add_storage("/config", values.storage.config) %}
  17. {% do perm_container.add_or_skip_action("config", values.storage.config, perm_config) %}
  18. {% do c1.environment.add_env("JELLYFIN_CACHE_DIR", "/cache") %}
  19. {% do c1.add_storage("/cache", values.storage.cache) %}
  20. {% do perm_container.add_or_skip_action("cache", values.storage.cache, perm_config) %}
  21. {% set static_transcodes_options = {
  22. "tmpfs_config": {"mode": "0777"},
  23. "volume_config": {"volume_name": "jellyfin-transcodes"},
  24. } %}
  25. {% set transcodes_storage = dict(values.storage.transcodes, **static_transcodes_options) %}
  26. {#
  27. Old installs use config and new uses cache.
  28. Even if we forced the cache dir above, old installs carry the setting via config file.
  29. So we mount the transcodes storage to both locations.
  30. #}
  31. {% do c1.add_storage("/config/transcodes", transcodes_storage) %}
  32. {% do c1.add_storage("/cache/transcodes", transcodes_storage) %}
  33. {% do perm_container.add_or_skip_action("transcodes", transcodes_storage, perm_config) %}
  34. {% for store in values.storage.additional_storage %}
  35. {% do c1.add_storage(store.mount_path, store) %}
  36. {% do perm_container.add_or_skip_action(store.mount_path, store, perm_config) %}
  37. {% endfor %}
  38. {% if perm_container.has_actions() %}
  39. {% do perm_container.activate() %}
  40. {% do c1.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  41. {% endif %}
  42. {% do tpl.portals.add(values.network.web_port, {"port": values.consts.internal_web_port if values.network.host_network else None}) %}
  43. {{ tpl.render() | tojson }}