diff --git a/arty.yml b/arty.yml index c0f1f25..af1974e 100644 --- a/arty.yml +++ b/arty.yml @@ -78,7 +78,7 @@ envs: UTIL_JOPLIN_DB_NAME: joplin # PairDrop UTIL_DROP_TRAEFIK_HOST: drop.pivoine.art - # Media Stack (Jellyfin, Filestash) + # Media Stack (Jellyfin, Filestash, Pinchflat) MEDIA_TRAEFIK_ENABLED: true MEDIA_COMPOSE_PROJECT_NAME: media MEDIA_JELLYFIN_IMAGE: jellyfin/jellyfin:latest @@ -86,6 +86,8 @@ envs: MEDIA_FILESTASH_IMAGE: machines/filestash:latest MEDIA_FILESTASH_TRAEFIK_HOST: filestash.media.pivoine.art MEDIA_FILESTASH_CANARY: true + MEDIA_PINCHFLAT_IMAGE: ghcr.io/kieraneglin/pinchflat:latest + MEDIA_PINCHFLAT_TRAEFIK_HOST: pinchflat.media.pivoine.art # Dev (Gitea + Coolify) DEV_TRAEFIK_ENABLED: true DEV_COMPOSE_PROJECT_NAME: dev diff --git a/media/compose.yaml b/media/compose.yaml index 40058da..b2c54a9 100644 --- a/media/compose.yaml +++ b/media/compose.yaml @@ -63,6 +63,37 @@ services: - 'traefik.docker.network=${NETWORK_NAME}' - 'com.centurylinklabs.watchtower.enable=${WATCHTOWER_LABEL_ENABLE}' + # Pinchflat - YouTube download manager + pinchflat: + image: ${MEDIA_PINCHFLAT_IMAGE:-ghcr.io/kieraneglin/pinchflat:latest} + container_name: ${MEDIA_COMPOSE_PROJECT_NAME}_pinchflat + restart: unless-stopped + volumes: + - pinchflat_config:/config + - /mnt/hidrive/users/valknar/Downloads/pinchflat:/downloads + environment: + TZ: ${TIMEZONE:-Europe/Berlin} + networks: + - compose_network + labels: + - 'traefik.enable=${MEDIA_TRAEFIK_ENABLED}' + # HTTP to HTTPS redirect + - 'traefik.http.middlewares.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-redirect-web-secure.redirectscheme.scheme=https' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web.middlewares=${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-redirect-web-secure' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web.rule=Host(`${MEDIA_PINCHFLAT_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web.entrypoints=web' + # HTTPS router with Authelia SSO protection + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure.rule=Host(`${MEDIA_PINCHFLAT_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure.tls.certresolver=resolver' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure.entrypoints=web-secure' + - 'traefik.http.middlewares.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure-compress.compress=true' + - 'traefik.http.routers.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure.middlewares=${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure-compress,net-authelia,security-headers@file' + # Service + - 'traefik.http.services.${MEDIA_COMPOSE_PROJECT_NAME}-pinchflat-web-secure.loadbalancer.server.port=8945' + - 'traefik.docker.network=${NETWORK_NAME}' + # Watchtower + - 'com.centurylinklabs.watchtower.enable=${WATCHTOWER_LABEL_ENABLE}' + volumes: jellyfin_config: name: ${MEDIA_COMPOSE_PROJECT_NAME}_jellyfin_config @@ -70,6 +101,8 @@ volumes: name: ${MEDIA_COMPOSE_PROJECT_NAME}_jellyfin_cache filestash_data: name: ${MEDIA_COMPOSE_PROJECT_NAME}_filestash_data + pinchflat_config: + name: ${MEDIA_COMPOSE_PROJECT_NAME}_pinchflat_config networks: compose_network: