docker-compose.yaml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. {% import "macros/config.sh" as config_macro %}
  2. {% set tpl = ix_lib.base.render.Render(values) %}
  3. {% set sig_helper = namespace(x=None) %}
  4. {% set c1 = tpl.add_container(values.consts.invidious_container_name, "image") %}
  5. {% set db_fetch = tpl.add_container(values.consts.db_seed_fetch_container_name, "git_image") %}
  6. {% set db_seed = tpl.add_container(values.consts.db_seed_apply_container_name, values.invidious.postgres_image_selector) %}
  7. {% set config = tpl.add_container(values.consts.config_container_name, "yq_image") %}
  8. {% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %}
  9. {% set pg_config = {
  10. "user": values.consts.db_user,
  11. "password": values.invidious.db_password,
  12. "database": values.consts.db_name,
  13. "volume": values.storage.postgres_data,
  14. } %}
  15. {% set postgres = tpl.deps.postgres(
  16. values.consts.postgres_container_name,
  17. values.invidious.postgres_image_selector,
  18. pg_config, perm_container
  19. ) %}
  20. {% set perms_config = {"uid": values.consts.run_as_user, "gid": values.consts.run_as_group} %}
  21. {% do c1.set_user(values.consts.run_as_user, values.consts.run_as_group) %}
  22. {% do c1.healthcheck.set_test("netcat", {"port": values.network.web_port.port_number}) %}
  23. {% do c1.environment.add_env("INVIDIOUS_CONFIG_FILE", "%s/config.yaml"|format(values.consts.config_path)) %}
  24. {% do c1.environment.add_user_envs(values.invidious.additional_envs) %}
  25. {% do c1.depends.add_dependency(values.consts.postgres_container_name, "service_healthy") %}
  26. {% do c1.depends.add_dependency(values.consts.config_container_name, "service_completed_successfully") %}
  27. {% do c1.add_port(values.network.web_port) %}
  28. {% do db_fetch.set_user(values.consts.run_as_user, values.consts.run_as_group) %}
  29. {% do db_fetch.healthcheck.disable() %}
  30. {% do db_fetch.restart.set_policy("on-failure", 1) %}
  31. {% do db_fetch.deploy.resources.set_profile("low") %}
  32. {% do db_fetch.configs.add("fetch_db_seed.sh", config_macro.fetch_db_seed(values=values), "/fetch_db_seed.sh", "0755") %}
  33. {% do db_fetch.set_entrypoint(["/fetch_db_seed.sh"]) %}
  34. {% do db_seed.set_user(values.consts.run_as_user, values.consts.run_as_group) %}
  35. {% do db_seed.healthcheck.disable() %}
  36. {% do db_seed.restart.set_policy("on-failure", 1) %}
  37. {% do db_seed.deploy.resources.set_profile("low") %}
  38. {% do db_seed.configs.add("apply_db_seed.sh", config_macro.apply_db_seed(values=values), "/apply_db_seed.sh", "0755") %}
  39. {% do db_seed.set_entrypoint(["/apply_db_seed.sh"]) %}
  40. {% do db_seed.depends.add_dependency(values.consts.postgres_container_name, "service_healthy") %}
  41. {% do db_seed.depends.add_dependency(values.consts.db_seed_fetch_container_name, "service_completed_successfully") %}
  42. {% do db_seed.environment.add_env("POSTGRES_USER", values.consts.db_user) %}
  43. {% do db_seed.environment.add_env("POSTGRES_DB", values.consts.db_name) %}
  44. {% do db_seed.environment.add_env("PGPASSWORD", values.invidious.db_password) %}
  45. {% do db_seed.environment.add_env("PGHOST", values.consts.postgres_container_name) %}
  46. {% do db_seed.environment.add_env("PGPORT", 5432) %}
  47. {% set cfg = namespace(x=[
  48. {"check_tables": true},
  49. {"database_url": postgres.get_url("postgres")},
  50. {"db.user": values.consts.db_user},
  51. {"db.password": values.invidious.db_password},
  52. {"db.dbname": values.consts.db_name},
  53. {"db.host": values.consts.postgres_container_name},
  54. {"db.port": 5432},
  55. {"hmac_key": values.invidious.hmac_secret},
  56. {"host_binding": "0.0.0.0"},
  57. {"port": values.network.web_port.port_number},
  58. {"admins": values.invidious.admins},
  59. {"registration_enabled": values.invidious.registration_enabled},
  60. {"login_enabled": values.invidious.login_enabled},
  61. {"captcha_enabled": values.invidious.captcha_enabled},
  62. ]) %}
  63. {% if values.invidious.enable_inv_sig_helper %}
  64. {% do cfg.x.append({"signature_server": "%s:%d" | format(values.consts.sig_helper_container_name, values.consts.internal_sig_helper_port)}) %}
  65. {% endif %}
  66. {% if values.invidious.po_token %}
  67. {% do cfg.x.append({"po_token": values.invidious.po_token}) %}
  68. {% endif %}
  69. {% if values.invidious.visitor_data %}
  70. {% do cfg.x.append({"visitor_data": values.invidious.visitor_data}) %}
  71. {% endif %}
  72. {% do config.set_user(values.consts.run_as_user, values.consts.run_as_group) %}
  73. {% do config.healthcheck.disable() %}
  74. {% do config.restart.set_policy("on-failure", 1) %}
  75. {% do config.deploy.resources.set_profile("low") %}
  76. {% do config.configs.add("config.sh", config_macro.config(values=values, cfg=cfg.x), "/setup/config.sh", "0755") %}
  77. {% do config.set_entrypoint(["/setup/config.sh"]) %}
  78. {% do config.depends.add_dependency(values.consts.db_seed_apply_container_name, "service_completed_successfully") %}
  79. {% set shared_volume_config = {"type": "temporary", "volume_config": {"volume_name": "shared"}} %}
  80. {% do db_fetch.add_storage("/shared", shared_volume_config) %}
  81. {% do db_seed.add_storage("/shared", shared_volume_config) %}
  82. {% do config.add_storage("/shared", shared_volume_config) %}
  83. {% do perm_container.add_or_skip_action("shared", shared_volume_config, perms_config) %}
  84. {% do c1.add_storage(values.consts.config_path, values.storage.config) %}
  85. {% do db_fetch.add_storage(values.consts.config_path, values.storage.config) %}
  86. {% do db_seed.add_storage(values.consts.config_path, values.storage.config) %}
  87. {% do config.add_storage(values.consts.config_path, values.storage.config) %}
  88. {% do perm_container.add_or_skip_action("config", values.storage.config, perms_config) %}
  89. {% for store in values.storage.additional_storage %}
  90. {% do c1.add_storage(store.mount_path, values.storage.config) %}
  91. {% do perm_container.add_or_skip_action(store.mount_path, store, perms_config) %}
  92. {% endfor %}
  93. {% if values.invidious.enable_inv_sig_helper %}
  94. {% set sig_helper.x = tpl.add_container(values.consts.sig_helper_container_name, "sig_helper_image") %}
  95. {% do sig_helper.x.set_user(values.consts.inv_sig_helper_run_as_user, values.consts.inv_sig_helper_run_as_group) %}
  96. {% do sig_helper.x.environment.add_env("RUST_LOG", "info") %}
  97. {% do sig_helper.x.set_init(true) %}
  98. {% do sig_helper.x.set_read_only(true) %}
  99. {% do sig_helper.x.healthcheck.disable() %}
  100. {% do sig_helper.x.set_command(["--tcp", "0.0.0.0:%d"|format(values.consts.internal_sig_helper_port)]) %}
  101. {% do c1.depends.add_dependency(values.consts.sig_helper_container_name, "service_started") %}
  102. {% endif %}
  103. {% if perm_container.has_actions() %}
  104. {% do perm_container.activate() %}
  105. {% do c1.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  106. {% do db_fetch.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  107. {% do db_seed.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  108. {% do config.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  109. {% do postgres.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %}
  110. {% endif %}
  111. {% do tpl.portals.add(values.network.web_port) %}
  112. {{ tpl.render() | tojson }}