From dd11d7f35a26d0a90161e2617241edb70713ee40 Mon Sep 17 00:00:00 2001 From: Stavros Iliopoulos Date: Mon, 4 Sep 2023 20:51:50 +0300 Subject: [PATCH] Add unmanic and fix transmission-vpn. (#1133) --- apps/transmission-vpn/config.json | 2 +- apps/transmission-vpn/docker-compose.yml | 2 +- apps/unmanic/config.json | 21 +++++++++++ apps/unmanic/docker-compose.yml | 43 +++++++++++++++++++++++ apps/unmanic/metadata/description.md | 30 ++++++++++++++++ apps/unmanic/metadata/logo.jpg | Bin 0 -> 21984 bytes 6 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 apps/unmanic/config.json create mode 100644 apps/unmanic/docker-compose.yml create mode 100644 apps/unmanic/metadata/description.md create mode 100644 apps/unmanic/metadata/logo.jpg diff --git a/apps/transmission-vpn/config.json b/apps/transmission-vpn/config.json index 8af5ffe5..a9532f72 100644 --- a/apps/transmission-vpn/config.json +++ b/apps/transmission-vpn/config.json @@ -11,7 +11,7 @@ }, "id": "transmission-vpn", "tipi_version": 3, - "version": "5.1.1@sha256:c5a66e4c9df0b326310b81cfcd7fa1c0cd61ebeaf60b4651188c94b8afde3aca", + "version": "5.1.1", "categories": [ "utilities", "security" diff --git a/apps/transmission-vpn/docker-compose.yml b/apps/transmission-vpn/docker-compose.yml index e438f9b8..b7c38ae4 100644 --- a/apps/transmission-vpn/docker-compose.yml +++ b/apps/transmission-vpn/docker-compose.yml @@ -1,6 +1,6 @@ services: transmission-vpn: - image: haugene/transmission-openvpn:5.1.1@sha256:c5a66e4c9df0b326310b81cfcd7fa1c0cd61ebeaf60b4651188c94b8afde3aca + image: haugene/transmission-openvpn:5.1.1 container_name: transmission-vpn cap_add: - NET_ADMIN diff --git a/apps/unmanic/config.json b/apps/unmanic/config.json new file mode 100644 index 00000000..c214d555 --- /dev/null +++ b/apps/unmanic/config.json @@ -0,0 +1,21 @@ +{ + "$schema": "../schema.json", + "name": "Unmanic", + "port": 8256, + "available": true, + "exposable": true, + "id": "unmanic", + "tipi_version": 1, + "version": "0.2.4", + "categories": [ + "utilities", + "data", + "media" + ], + "description": "Unmanic gives you the power to automate the management of any file library.", + "short_desc": "Unmanic - Library Optimiser.", + "author": "Unmanic", + "source": "https://github.com/Unmanic/unmanic", + "website": "https://docs.unmanic.app/", + "form_fields": [] +} diff --git a/apps/unmanic/docker-compose.yml b/apps/unmanic/docker-compose.yml new file mode 100644 index 00000000..a4abb4dc --- /dev/null +++ b/apps/unmanic/docker-compose.yml @@ -0,0 +1,43 @@ +version: "3.5" +services: + unmanic: + image: josh5/unmanic:0.2.4 + restart: unless-stopped + container_name: unmanic + privileged: true + ports: + - ${APP_PORT}:8888 + networks: + - tipi_main_network + environment: + - PUID=${TIPI_UID} + - PGID=${TIPI_GID} + volumes: + - ${APP_DATA_DIR}/data/config:/config + - ${ROOT_FOLDER_HOST}/data:/library + - ${APP_DATA_DIR}/data/temp:/tmp/unmanic + labels: + # Main + traefik.enable: true + traefik.http.middlewares.unmanic-web-redirect.redirectscheme.scheme: https + traefik.http.services.unmanic.loadbalancer.server.port: 8888 + # Web + traefik.http.routers.unmanic-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.unmanic-insecure.entrypoints: web + traefik.http.routers.unmanic-insecure.service: unmanic + traefik.http.routers.unmanic-insecure.middlewares: unmanic-web-redirect + # Websecure + traefik.http.routers.unmanic.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.unmanic.entrypoints: websecure + traefik.http.routers.unmanic.service: unmanic + traefik.http.routers.unmanic.tls.certresolver: myresolver + # Local domain + traefik.http.routers.unmanic-local-insecure.rule: Host(`unmanic.${LOCAL_DOMAIN}`) + traefik.http.routers.unmanic-local-insecure.entrypoints: web + traefik.http.routers.unmanic-local-insecure.service: unmanic + traefik.http.routers.unmanic-local-insecure.middlewares: unmanic-web-redirect + # Local domain secure + traefik.http.routers.unmanic-local.rule: Host(`unmanic.${LOCAL_DOMAIN}`) + traefik.http.routers.unmanic-local.entrypoints: websecure + traefik.http.routers.unmanic-local.service: unmanic + traefik.http.routers.unmanic-local.tls: true diff --git a/apps/unmanic/metadata/description.md b/apps/unmanic/metadata/description.md new file mode 100644 index 00000000..2127f155 --- /dev/null +++ b/apps/unmanic/metadata/description.md @@ -0,0 +1,30 @@ +Unmanic - Library Optimiser +=========================== + +![UNMANIC - Library Optimiser](https://github.com/unmanic/unmanic/raw/master/logo.png) + +--- + +Unmanic is a simple tool for optimising your file library. You can use it to convert your files into a single, uniform format, manage file movements based on timestamps, or execute custom commands against a file based on its file size. + +Simply configure Unmanic pointing it at your library and let it automatically manage that library for you. + +Unmanic provides you with the following main functions: + +- A scheduler built in to scan your whole library for files that do not conform to your configured file presets. Files found requiring processing are then queued. +- A file/directory monitor. When a file is modified, or a new file is added in your library, Unmanic is able to again test that against your configured file presets. Like the first function, if this file requires processing, it is added to a queue for processing. +- A handler to manage running multiple file manipulation tasks at a time. +- A Web UI to easily configure, manage and monitor the progress of your library optimisation. + +You choose how you want your library to be. + +Some examples of how you may use Unmanic: + +- Trans-code video or audio files into a uniform format using FFmpeg. +- Identify (and remove if desired) commercials in DVR recordings shortly after they have completed being recorded. +- Move files from one location to another after a configured period of time. +- Automatically execute FileBot rename files in your library as they are added. +- Compress files older than a specified age. +- Run any custom command against files matching a certain extension or above a configured file size. + +The Docker container is currently based `linuxserver.io` Ubuntu focal image. \ No newline at end of file diff --git a/apps/unmanic/metadata/logo.jpg b/apps/unmanic/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6d3f4b6bf904f76e600bc277e527667005556b8 GIT binary patch literal 21984 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 literal 0 HcmV?d00001