From 91909e32dbccb67d6def6485ea6f4bd4c15a9c44 Mon Sep 17 00:00:00 2001 From: porroe Date: Fri, 25 Aug 2023 14:48:40 -0700 Subject: [PATCH] added audiobookshelf --- apps/audiobookshelf/config.json | 19 ++++++++++ apps/audiobookshelf/docker-compose.yml | 40 ++++++++++++++++++++ apps/audiobookshelf/metadata/description.md | 2 + apps/audiobookshelf/metadata/logo.jpg | Bin 0 -> 22197 bytes 4 files changed, 61 insertions(+) create mode 100644 apps/audiobookshelf/config.json create mode 100644 apps/audiobookshelf/docker-compose.yml create mode 100644 apps/audiobookshelf/metadata/description.md create mode 100644 apps/audiobookshelf/metadata/logo.jpg diff --git a/apps/audiobookshelf/config.json b/apps/audiobookshelf/config.json new file mode 100644 index 00000000..6e6a2a76 --- /dev/null +++ b/apps/audiobookshelf/config.json @@ -0,0 +1,19 @@ +{ + "$schema": "../schema.json", + "name": "Audiobookshelf", + "available": true, + "exposable": true, + "port": 8003, + "id": "audiobookshelf", + "tipi_version": 1, + "version": "latest", + "categories": [ + "books", + "media" + ], + "description": "Audiobookshelf is a self-hosted audiobook server for managing and playing your audiobooks. Audiobookshelf has a clean, accessible design that's loaded with features but not overly complicated.", + "short_desc": "Audiobookshelf is a self-hosted audiobook and podcast server.", + "author": "advplyr", + "source": "https://github.com/advplyr/audiobookshelf", + "form_fields": [] +} diff --git a/apps/audiobookshelf/docker-compose.yml b/apps/audiobookshelf/docker-compose.yml new file mode 100644 index 00000000..30dcacc4 --- /dev/null +++ b/apps/audiobookshelf/docker-compose.yml @@ -0,0 +1,40 @@ +version: "3.7" +services: + audiobookshelf: + container_name: audiobookshelf + image: ghcr.io/advplyr/audiobookshelf:latest + restart: unless-stopped + ports: + - ${APP_PORT}:80 + volumes: + - ${ROOT_FOLDER_HOST}/media/data/books/spoken:/audiobooks + - ${ROOT_FOLDER_HOST}/media/data/podcasts:/podcasts + - ${APP_DATA_DIR}/config:/config + - ${APP_DATA_DIR}/metadata:/metadata + networks: + - tipi_main_network + labels: + # Main + traefik.enable: true + traefik.http.middlewares.audiobookshelf-web-redirect.redirectscheme.scheme: https + traefik.http.services.audiobookshelf.loadbalancer.server.port: 80 + # Web + traefik.http.routers.audiobookshelf-insecure.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.audiobookshelf-insecure.entrypoints: web + traefik.http.routers.audiobookshelf-insecure.service: audiobookshelf + traefik.http.routers.audiobookshelf-insecure.middlewares: audiobookshelf-web-redirect + # Websecure + traefik.http.routers.audiobookshelf.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.audiobookshelf.entrypoints: websecure + traefik.http.routers.audiobookshelf.service: audiobookshelf + traefik.http.routers.audiobookshelf.tls.certresolver: myresolver + # Local domain + traefik.http.routers.audiobookshelf-local-insecure.rule: Host(`audiobookshelf.${LOCAL_DOMAIN}`) + traefik.http.routers.audiobookshelf-local-insecure.entrypoints: web + traefik.http.routers.audiobookshelf-local-insecure.service: audiobookshelf + traefik.http.routers.audiobookshelf-local-insecure.middlewares: audiobookshelf-web-redirect + # Local domain secure + traefik.http.routers.audiobookshelf-local.rule: Host(`audiobookshelf.${LOCAL_DOMAIN}`) + traefik.http.routers.audiobookshelf-local.entrypoints: websecure + traefik.http.routers.audiobookshelf-local.service: audiobookshelf + traefik.http.routers.audiobookshelf-local.tls: true diff --git a/apps/audiobookshelf/metadata/description.md b/apps/audiobookshelf/metadata/description.md new file mode 100644 index 00000000..b19a366f --- /dev/null +++ b/apps/audiobookshelf/metadata/description.md @@ -0,0 +1,2 @@ +# AudiobookShelf +Audiobookshelf is a self-hosted audiobook and podcast server. \ No newline at end of file diff --git a/apps/audiobookshelf/metadata/logo.jpg b/apps/audiobookshelf/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2ae8a3c95b53f717d0047d95cef4f67262bd1ca GIT binary patch literal 22197 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 literal 0 HcmV?d00001