{% set tpl = ix_lib.base.render.Render(values) %} {% set perm_container = tpl.deps.perms(values.consts.perms_container_name) %} {% set pg_config = { "user": values.consts.db_user, "password": values.paperless.db_password, "database": values.consts.db_name, "volume": values.storage.postgres_data, } %} {% set postgres = tpl.deps.postgres( values.consts.postgres_container_name, values.paperless.postgres_image_selector, pg_config, perm_container ) %} {% set redis_config = { "password": values.paperless.redis_password, "volume": {"type": "temporary", "volume_config": {"volume_name": "redis-data"}}, } %} {% set redis = tpl.deps.redis(values.consts.redis_container_name, "redis_image", redis_config, perm_container) %} {% set perms_config = {"uid": values.run_as.user, "gid": values.run_as.group, "mode": "check"} %} {% set paperless_container = tpl.add_container(values.consts.paperless_container_name, "image") %} {% do paperless_container.set_user(0, 0) %} {% do paperless_container.add_caps(["CHOWN", "DAC_OVERRIDE", "FOWNER", "SETGID", "SETUID"]) %} {% do paperless_container.healthcheck.set_test("curl", {"port": values.network.web_port.port_number}) %} {% do paperless_container.add_port(values.network.web_port) %} {% do paperless_container.environment.add_env("PAPERLESS_TIME_ZONE", values.TZ) %} {% do paperless_container.environment.add_env("PAPERLESS_BIND_ADDR", "0.0.0.0") %} {% do paperless_container.environment.add_env("PAPERLESS_PORT", values.network.web_port.port_number) %} {% do paperless_container.environment.add_env("USERMAP_UID", values.run_as.user) %} {% do paperless_container.environment.add_env("USERMAP_GID", values.run_as.group) %} {% do paperless_container.environment.add_env("PAPERLESS_DATA_DIR", values.consts.data_path) %} {% do paperless_container.environment.add_env("PAPERLESS_MEDIA_ROOT", values.consts.media_path) %} {% do paperless_container.environment.add_env("PAPERLESS_CONSUMPTION_DIR", values.consts.consume_path) %} {% do paperless_container.environment.add_env("PAPERLESS_TRASH_DIR", values.consts.trash_path if values.paperless.enable_trash else "") %} {% do paperless_container.environment.add_env("PAPERLESS_SECRET_KEY", values.paperless.secret_key) %} {% do paperless_container.environment.add_env("PAPERLESS_ADMIN_USER", values.paperless.admin_user) %} {% do paperless_container.environment.add_env("PAPERLESS_ADMIN_MAIL", values.paperless.admin_mail) %} {% do paperless_container.environment.add_env("PAPERLESS_ADMIN_PASSWORD", values.paperless.admin_password) %} {% do paperless_container.environment.add_env("PAPERLESS_DBENGINE", "postgresql") %} {% do paperless_container.environment.add_env("PAPERLESS_DBHOST", values.consts.postgres_container_name) %} {% do paperless_container.environment.add_env("PAPERLESS_DBPORT", 5432) %} {% do paperless_container.environment.add_env("PAPERLESS_DBNAME", values.consts.db_name) %} {% do paperless_container.environment.add_env("PAPERLESS_DBUSER", values.consts.db_user) %} {% do paperless_container.environment.add_env("PAPERLESS_DBPASS", values.paperless.db_password) %} {% do paperless_container.environment.add_env("PAPERLESS_REDIS", redis.get_url("redis")) %} {% do paperless_container.environment.add_user_envs(values.paperless.additional_envs) %} {% do paperless_container.depends.add_dependency(values.consts.redis_container_name, "service_healthy") %} {% do paperless_container.depends.add_dependency(values.consts.postgres_container_name, "service_healthy") %} {% do paperless_container.add_storage(values.consts.data_path, values.storage.data) %} {% do perm_container.add_or_skip_action("data", values.storage.data, perms_config) %} {% do paperless_container.add_storage(values.consts.media_path, values.storage.media) %} {% do perm_container.add_or_skip_action("media", values.storage.media, perms_config) %} {% do paperless_container.add_storage(values.consts.consume_path, values.storage.consume) %} {% do perm_container.add_or_skip_action("consume", values.storage.consume, perms_config) %} {% if values.paperless.enable_trash %} {% do paperless_container.add_storage(values.consts.trash_path, values.storage.trash) %} {% do perm_container.add_or_skip_action("trash", values.storage.trash, perms_config) %} {% endif %} {% for store in values.storage.additional_storage %} {% do paperless_container.add_storage(store.mount_path, store) %} {% do perm_container.add_or_skip_action(store.mount_path, store, perms_config) %} {% endfor %} {% if perm_container.has_actions() %} {% do perm_container.activate() %} {% do redis.container.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %} {% do postgres.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %} {% do paperless_container.depends.add_dependency(values.consts.perms_container_name, "service_completed_successfully") %} {% endif %} {% if values.paperless.enable_tika_gotenberg %} {% set tika_container = tpl.add_container(values.consts.tika_container_name, "tika_image") %} {% do tika_container.set_user(values.consts.tika_run_user, values.consts.tika_run_group) %} {% do tika_container.healthcheck.set_test("wget", {"port": values.consts.tika_port, "path": "/tika", "spider": False}) %} {% set gotenberg_container = tpl.add_container(values.consts.gotenberg_container_name, "gotenberg_image") %} {% do gotenberg_container.set_user(values.consts.gotenberg_run_user, values.consts.gotenberg_run_user) %} {% do gotenberg_container.set_command([ "gotenberg", "--api-port=%d"|format(values.consts.gotenberg_port), "--chromium-disable-javascript=%s"|format(values.paperless.gotenberg_chromium_disable_javascript|string|lower), "--chromium-allow-list=%s"|format(values.paperless.gotenberg_chromium_allow_list_regex or '""'), ]) %} {% do gotenberg_container.healthcheck.set_test("curl", {"port": values.consts.gotenberg_port, "path":"/health"}) %} {% do paperless_container.environment.add_env("PAPERLESS_TIKA_ENABLED", 1) %} {% do paperless_container.environment.add_env("PAPERLESS_TIKA_ENDPOINT", "http://%s:%s" | format(values.consts.tika_container_name, values.consts.tika_port)) %} {% do paperless_container.environment.add_env("PAPERLESS_TIKA_GOTENBERG_ENDPOINT", "http://%s:%s" | format(values.consts.gotenberg_container_name, values.consts.gotenberg_port)) %} {% do paperless_container.depends.add_dependency(values.consts.tika_container_name, "service_healthy") %} {% do paperless_container.depends.add_dependency(values.consts.gotenberg_container_name, "service_healthy") %} {% endif %} {% do tpl.portals.add(values.network.web_port) %} {{ tpl.render() | tojson }}