diff --git a/docker_compose/mediahost/crontab.bak b/docker_compose/mediahost/crontab.bak index 79a8c81..d809e34 100644 --- a/docker_compose/mediahost/crontab.bak +++ b/docker_compose/mediahost/crontab.bak @@ -31,9 +31,9 @@ */5 * * * * /home/lucas/scripts/docker_compose/docker_update_nextcloud.sh && logger "CRON_SUCCESS nextcloud" || logger "CRON_FAILURE nextcloud" */5 * * * * /home/lucas/scripts/docker_compose/node-exporter-pubip-docker-states.sh && logger "CRON_SUCCESS pubip" || logger "CRON_FAILURE pubip" -0 * * * * /home/lucas/scripts/media_editing/convert_heic.sh && logger "CRON_SUCCESS conv_heic" || logger "CRON_FAILURE conv_heic" +0 * * * * /home/lucas/scripts/media_editing/convert_heic.sh && logger "CRON_SUCCESS conv_heic" || logger "CRON_FAILURE conv_heic" 0 * * * * /home/lucas/scripts/file_processing/rename_memes_folder.sh && logger "CRON_SUCCESS rename_mem" || logger "CRON_FAILURE rename_mem" -10 * * * * /home/lucas/scripts/file_processing/rename_camera_folder.sh && logger "CRON_SUCCESS rename_cam" || logger "CRON_FAILURE rename_cam" +10 * * * * /home/lucas/scripts/file_processing/rename_camera_folder.py && logger "CRON_SUCCESS rename_cam" || logger "CRON_FAILURE rename_cam" 0 3 * * * /home/lucas/scripts/docker_compose/docker_renew_certbot.sh && logger "CRON_SUCCESS renew_cert" || logger "CRON_FAILURE renew_cert" 0 23 * * * /home/lucas/scripts/file_processing/sync_camera_to_immich.sh && logger "CRON_SUCCESS immich" || logger "CRON_FAILURE immich" 0 3 * * 0 /home/lucas/scripts/utils/download_latest_ubuntu.sh && logger "CRON_SUCCESS ubuntu" || logger "CRON_FAILURE ubuntu" diff --git a/docker_compose/mediahost/mediaarr/docker-compose.yaml b/docker_compose/mediahost/mediaarr/docker-compose.yaml index 60bfbab..404d14a 100644 --- a/docker_compose/mediahost/mediaarr/docker-compose.yaml +++ b/docker_compose/mediahost/mediaarr/docker-compose.yaml @@ -82,6 +82,20 @@ services: - VPN_TYPE=wireguard ports: - "6767:6767" # Rundfunkarr UI + rundfunkarr-at: + image: rundfunkarr:local + container_name: rundfunkarr-at + environment: + - TZ=Europe/Berlin + - PUID=1000 # User ID (id -u) + - PGID=1000 # Group ID (id -g) + - DOWNLOAD_FOLDER_PATH=/downloads-rundfunkarr + volumes: + - ./rundfunkarr-at:/app/prisma/data + - /torrent/rundfunkarr-at:/downloads-rundfunkarr + ports: + - 6768:6767 + restart: unless-stopped rundfunkarr-de: image: ghcr.io/rundfunkarr/rundfunkarr:latest container_name: rundfunkarr-de @@ -115,6 +129,7 @@ services: - VPN_TYPE=wireguard - SOCKS5_ENABLED=on - HTTPPROXY=on + - HTTP_LISTENING_ADDRESS:=8888 - SOCKSPROXY=on - TZ=Europe/Vienna - DNS_SERVER=on diff --git a/docker_compose/mediahost/mediaarr/unpackerr/unpackerr.conf b/docker_compose/mediahost/mediaarr/unpackerr/unpackerr.conf index a08cdf4..6e77a46 100644 --- a/docker_compose/mediahost/mediaarr/unpackerr/unpackerr.conf +++ b/docker_compose/mediahost/mediaarr/unpackerr/unpackerr.conf @@ -2,65 +2,80 @@ ## Unpackerr Example Configuration File ## ####################################################### ## The values are a mix of defaults and examples. ## -## Environment Variables may override all values. ## +## Env vars overlay the process, not this file. ## ## More configuration help: https://unpackerr.zip ## ## Config Generator: https://notifiarr.com/unpackerr ## ####################################################### ## Turn on debug messages in the output. Do not wrap this in quotes. ## Recommend trying this so you know what it looks like. I personally leave it on. -debug = false +#debug = false ## Disable writing messages to stdout/stderr. This silences the app. Set a log ## file below if you set this to true. Recommended when starting with systemctl. -quiet = false +#quiet = false ## Send error output to stderr instead of stdout by setting error_stderr to true. ## Recommend leaving this at false. Ignored if quiet (above) is true. -error_stderr = false +#error_stderr = false ## Setting activity to true will silence all app queue log lines with only zeros. ## Set this to true when you want less log spam. -activity = false +#activity = false ## The Starr-application activity queue is logged on an interval. ## Adjust that interval with this setting. ## Default is a minute. 2m, 5m, 10m, 30m, 1h are also perfectly acceptable. -log_queues = "1m" +#log_queues = "1m" ## Write messages to a log file. This is the same data that is normally output to stdout. ## This setting is great for Docker users that want to export their logs to a file. ## The alternative is to use syslog to log the output of the application to a file. ## Default is no log file; this is unset. ## Except on macOS and Windows, the log file gets set to "~/.unpackerr/unpackerr.log" -## log_files=0 turns off auto-rotation. +## log_files=0 turns off auto-rotation so logrotate can own the file. +## After logrotate renames the live file, send SIGHUP (`systemctl reload unpackerr`) +## to close and reopen it. Use logrotate `create` plus postrotate HUP, not copytruncate. ## Default files is 10 and size(mb) is 10 Megabytes. -#log_file = '/downloads/unpackerr.log' -log_files = 10 -log_file_mb = 10 -log_file_mode = "0600" +#log_file = '' +#log_files = 10 +#log_file_mb = 10 +#log_file_mode = "0600" + +## How many completed or failed items to keep in unpackerr.history.jsonl +## (next to the log file, or the config file if logs go to stdout). +## With neither a log file nor a config file, history stays in memory +## for this process and is not written to disk, so it does not survive +## a restart. Set `log_file` or use a config file to persist it. +## In-progress extracts are also written so a restart can resume them +## for 72 hours (Starr waiting for import, folders waiting on +## delete_after). Those in-progress rows do not count against this +## number. Imported and failed rows do. The history API still lists +## only completed or failed rows. +## `0` disables history and restart resume. +#keep_history = 400 ## How often to poll starr apps (sonarr, radarr, etc). ## Recommend 1m-5m. Uses Go Duration. -interval = "2m" +#interval = "2m" ## How often status is logged for in-progress extractions. -## Recommend 2-60s. Uses Go Duration. -progress = "15s" +## `0` uses the default `15s`. Uses Go Duration. +#progress = "15s" ## How long an item must be queued (download complete) before extraction will start. ## One minute is the historic default and works well. Set higher if your downloads ## take longer to finalize (or transfer locally). Uses Go Duration. -start_delay = "1m" +#start_delay = "1m" ## How long to wait before removing the history for a failed extraction. ## Once the history is deleted the item will be recognized as new and ## extraction will start again. Uses Go Duration. -retry_delay = "5m" +#retry_delay = "5m" ## How many times to retry a failed extraction after the first try. Default is 2 ## (3 attempts total). `0` uses that default. Pauses retry_delay between attempts. -max_retries = 2 +#max_retries = 2 ## Applies to Starr apps and to watched folders with `move_back` enabled ## (the default folder config extracts into a sidecar tree and does not @@ -75,61 +90,117 @@ max_retries = 2 ## until it leaves the Starr queue (folders are untracked). Bounded by ## max_retries; if retries are exhausted the leftover fails the extract ## instead of reporting success. -remnant_action = "rename" +#remnant_action = "rename" ## How many files may be extracted in parallel. 1 works fine. ## Do not wrap the number in quotes. Raise this only if you have fast disks and CPU. -parallel = 1 +#parallel = 1 -## Use these configurations to control the file modes used for newly extracted -## files and folders. Recommend 0644/0755 or 0666/0777. -file_mode = "0644" -dir_mode = "0755" +## Extracted files are created with this mode. The process umask still +## applies, so 0666 becomes 0644 under umask 0022. Use 0644, or 0660 or +## 0666 when another user must write the extracted files. Archive +## execute bits are kept only for a watched folder with preserve_exec +## enabled. +#file_mode = "0644" + +## Extracted directories are created with this mode. The process umask +## still applies. +#dir_mode = "0755" ## List of passwords to use for encrypted archives. Must be a list of strings. ## Use this special format as a password to read more passwords from a file: ## passwords = [ "filepath:/path/to/passwords.txt" ] -passwords = [] +#passwords = [] [webserver] -## The web server currently only supports metrics; set this to true if you wish to use it. - metrics = false +## Expose Prometheus metrics at /metrics. The HTTP server starts whenever listen_addr is set; +## this only controls the /metrics route. Scrapes must send an API key with +## system:metrics:read via Authorization: Bearer or X-Api-Key. +# metrics = false +## Expose Go pprof handlers at /debug/pprof/. Leave this false unless you +## are debugging the running process. +# pprof = false ## This may be set to a port or an ip:port to bind a specific IP. 0.0.0.0 binds ALL IPs. - listen_addr = "0.0.0.0:5656" +## Set this to an empty string to disable the HTTP server. +# listen_addr = "0.0.0.0:5656" +## Local UI login. Use user:pass (hashed on startup), !!cryptd!!user:$2a$... +## for a stored hash, webauth:X-Webauth-User for a reverse-proxy header, or +## noauth. The HTTP API does not accept plaintext; send user: +## (same digest as login) and uiCurrentKdf when changing a live password. +## filepath:/path reads that file for the live password and keeps filepath: in the +## config. Empty generates a temporary password when the HTTP server is enabled. +## Reset with --reset. Do not set an empty +## UN_WEBSERVER_UI_PASSWORD; a present empty env value wipes a stored hash. + ui_password = "!!cryptd!!admin:$2a$10$t8pChUtJw.VZW2DO47Lh/.2nE9J.jHnx.MH5VncjCZ2LADfso64oe" +## Used with webauth (proxy header auth). Empty keeps those proxy users +## as admin. Ignored for noauth and local password login. Set this to a +## header the reverse proxy fills, for example X-Webauth-Role or +## X-Authentik-Groups. Matching names are a built-in admin or a custom +## [webserver.roles] name. Comma, semicolon, pipe, or space separated +## lists are unioned; extra IdP groups are ignored. A selected header +## that is missing, empty, or has no matching role is access denied, +## not admin. +## example: ui_role_header = "X-Webauth-Role" +# ui_role_header = "" ## Recommend setting a log file for HTTP requests. Otherwise, they go with other logs. - log_file = '' +# log_file = '' ## This app automatically rotates logs. Set these to the size and number to keep. - log_files = 10 - log_file_mb = 10 +## log_files=0 disables auto-rotation; SIGHUP reopens the HTTP log too. +# log_files = 10 +# log_file_mb = 10 ## Set both of these to valid file paths to enable HTTPS/TLS. - ssl_cert_file = '' - ssl_key_file = '' +# ssl_cert_file = '' +# ssl_key_file = '' ## Base URL from which to serve content. - urlbase = "/" +# urlbase = "/" ## Upstreams should be set to the IP or CIDR of your trusted upstream proxy. ## Setting this correctly allows X-Forwarded-For to be used in logs. ## In the future it may control auth proxy trust. Must be a list of strings. ## example: upstreams = [ "127.0.0.1/32", "10.1.2.0/24" ] - upstreams = [] +# upstreams = [] +## Empty keeps the library same-origin check (the embedded UI). Add hosts +## when a browser on another origin should open GET /ws, for example +## localhost:5173 or https://ui.example.com. Patterns use path.Match; +## a URI scheme is matched as scheme://host. Do not set * unless you +## intend to allow every origin. +## example: ws_origins = [ "localhost:5173" ] +# ws_origins = [] +## Nested [[webserver.api_keys]] tables, not an inline array. Each key is 60–150 ASCII +## characters. Names and key values must be unique. Built-in role `admin` grants every +## permission. Custom roles are listed under [webserver.roles]. +## Env uses UN_WEBSERVER_API_KEYS_0_NAME, _KEY, and _ROLES_0. +## Nested [webserver.roles.] tables. Names are letters, digits, _ or -. +## Built-in admin cannot be redefined. `*` is reserved for that built-in role. +## Each custom role needs at least one known permission. +## File browser is system:browse:read (list) and system:browse:write (create folder). +## Env works but is picky: do not set UN_WEBSERVER_ROLES itself. Role names are +## case-sensitive and may contain underscores. Index permissions from 0: +## UN_WEBSERVER_ROLES_stats_PERMISSIONS_0=system:stats:read +## UN_WEBSERVER_ROLES_read_only_PERMISSIONS_0=system:stats:read +## [webserver.roles.stats] +## permissions = ["system:stats:read"] + +[[webserver.api_keys]] + name = "admin" + key = "Gv7I8Y0wY7-KFjZxeRD_mVvSm8Ca2sxvo267DY9GG5YKD34BBMGIeudHQy_tI7gq" + roles = ["admin"] ## Global Folder configuration that affects all watched folders. [folders] -## How often poller checks for new folders. -## The default of `0s` will disable the poller on all systems except Docker. -## Set this value to `1ms` to disable it in Docker. - interval = "0s" ## How many new folder events can be immediately queued. Don't change this. - buffer = 20000 +# buffer = 20000 ############################################################################### ##-IMPORTANT-#######-READ THIS!!!-################ Seriously, read this. ###### ############################################################################### ## The following sections can be repeated if you have more than one Sonarr, ## -## Radarr, Lidarr, Readarr, Whisparr, Folder, Webhook, and/or Command Hook. ## -## You MUST uncomment the [[header]], url and api_key at for any Starr app. ## -## The [[sonarr]] and [[radarr]] headers come uncommented. Uncomment the url ## -## and api_key if they are in use. Comment them with a hash if they are not. ## -## Uncomment the [[lidarr]] and/or [[readarr]] headers and values if in use. ## +## Radarr, Lidarr, Readarr, Folder, Webhook, and/or Command Hook. ## +## Identify each instance with a short key: [sonarr.uhd], [folder.tv]. ## +## Changed in v1.0.0 (October 2026): map keys, not [[array]] list rows. ## +## You MUST uncomment the [header.0], url and api_key for any Starr app. ## +## Uncomment [sonarr.0], [radarr.0], [lidarr.0], and/or [readarr.0] plus the ## +## url and api_key if that app is in use. ## +## Do not set a bare UN_SONARR / UN_FOLDER / UN_WEBHOOK / UN_CMDHOOK. ## ############################################################################### ############################################################################### ## ALL LINES BEGINNING WITH A HASH # ARE IGNORED COMMENTS ## @@ -137,11 +208,23 @@ passwords = [] ############################################################################### ############################################################################### -## Leaving the [[sonarr]] header uncommented (no leading hash #) without also -## uncommenting the api_key (remove the hash #) will produce a startup warning. -[[sonarr]] +#[sonarr.0] +## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a +## Sonarr-compatible app such as Sportarr so logs and Discord are not +## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr". +## Hook exclude matches this name or the app dialect. +## Names must be printable and cannot contain quotes, braces, or angle brackets. +# name = "" # url = "http://127.0.0.1:8989" # api_key = "0123456789abcdef0123456789abcdef" +## Username for HTTP basic authentication on the Starr app, if enabled. +# http_user = "" +## Password for HTTP basic authentication on the Starr app, if enabled. +# http_pass = "" +## Username for Starr native (forms) authentication, if enabled. +# username = "" +## Password for Starr native (forms) authentication, if enabled. +# password = "" ## List of paths where content is downloaded for this app. ## Used as fallback if the path the Starr app reports does not exist or is not accessible. # paths = ['/downloads'] @@ -162,16 +245,31 @@ passwords = [] # delete_orig = false ## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish. # syncthing = false +## When true, Unpackerr verifies the Starr app HTTPS certificate. +## The default is false for backward compatibility. +# valid_ssl = false ## Per-archive uncompressed-byte cap. Empty uses the app default: -## Sonarr/Whisparr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. +## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. ## `0` or `0B` disables the cap for this instance. # max_bytes = "" -## Leaving the [[radarr]] header uncommented (no leading hash #) without also -## uncommenting the api_key (remove the hash #) will produce a startup warning. -[[radarr]] +#[radarr.0] +## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a +## Sonarr-compatible app such as Sportarr so logs and Discord are not +## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr". +## Hook exclude matches this name or the app dialect. +## Names must be printable and cannot contain quotes, braces, or angle brackets. +# name = "" # url = "http://127.0.0.1:7878" # api_key = "0123456789abcdef0123456789abcdef" +## Username for HTTP basic authentication on the Starr app, if enabled. +# http_user = "" +## Password for HTTP basic authentication on the Starr app, if enabled. +# http_pass = "" +## Username for Starr native (forms) authentication, if enabled. +# username = "" +## Password for Starr native (forms) authentication, if enabled. +# password = "" ## List of paths where content is downloaded for this app. ## Used as fallback if the path the Starr app reports does not exist or is not accessible. # paths = ['/downloads'] @@ -192,14 +290,31 @@ passwords = [] # delete_orig = false ## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish. # syncthing = false +## When true, Unpackerr verifies the Starr app HTTPS certificate. +## The default is false for backward compatibility. +# valid_ssl = false ## Per-archive uncompressed-byte cap. Empty uses the app default: -## Sonarr/Whisparr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. +## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. ## `0` or `0B` disables the cap for this instance. # max_bytes = "" -#[[lidarr]] +#[lidarr.0] +## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a +## Sonarr-compatible app such as Sportarr so logs and Discord are not +## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr". +## Hook exclude matches this name or the app dialect. +## Names must be printable and cannot contain quotes, braces, or angle brackets. +# name = "" # url = "http://127.0.0.1:8686" # api_key = "0123456789abcdef0123456789abcdef" +## Username for HTTP basic authentication on the Starr app, if enabled. +# http_user = "" +## Password for HTTP basic authentication on the Starr app, if enabled. +# http_pass = "" +## Username for Starr native (forms) authentication, if enabled. +# username = "" +## Password for Starr native (forms) authentication, if enabled. +# password = "" ## List of paths where content is downloaded for this app. ## Used as fallback if the path the Starr app reports does not exist or is not accessible. # paths = ['/downloads'] @@ -220,17 +335,43 @@ passwords = [] # delete_orig = false ## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish. # syncthing = false +## When true, Unpackerr verifies the Starr app HTTPS certificate. +## The default is false for backward compatibility. +# valid_ssl = false ## Per-archive uncompressed-byte cap. Empty uses the app default: -## Sonarr/Whisparr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. +## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. ## `0` or `0B` disables the cap for this instance. # max_bytes = "" -## When enabled, FLAC files with embedded CUE sheets are split into -## individual track files. +## When enabled, FLAC and APE files with CUE sheets are split into +## individual track files. ape_format and ape_compression choose what +## an APE image becomes. # split_flac = false +## ape keeps Monkey's Audio. wav and flac decode the audio. +## Empty means ape. FLAC cannot store 32-bit or float PCM. +## Compression is ignored unless the format is ape. +# ape_format = "ape" +## Used only when ape_format is ape (or empty). A default of 0 is set +## to 2000. Accepted values are 1000, 2000, 3000, 4000, and 5000. +## WAV and FLAC ignore this. +# ape_compression = 0 -#[[readarr]] +#[readarr.0] +## Empty uses the app name (Sonarr, Radarr, and so on). Set this for a +## Sonarr-compatible app such as Sportarr so logs and Discord are not +## tagged Sonarr. Add Whisparr as a Radarr instance with name = "Whisparr". +## Hook exclude matches this name or the app dialect. +## Names must be printable and cannot contain quotes, braces, or angle brackets. +# name = "" # url = "http://127.0.0.1:8787" # api_key = "0123456789abcdef0123456789abcdef" +## Username for HTTP basic authentication on the Starr app, if enabled. +# http_user = "" +## Password for HTTP basic authentication on the Starr app, if enabled. +# http_pass = "" +## Username for Starr native (forms) authentication, if enabled. +# username = "" +## Password for Starr native (forms) authentication, if enabled. +# password = "" ## List of paths where content is downloaded for this app. ## Used as fallback if the path the Starr app reports does not exist or is not accessible. # paths = ['/downloads'] @@ -251,36 +392,11 @@ passwords = [] # delete_orig = false ## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish. # syncthing = false +## When true, Unpackerr verifies the Starr app HTTPS certificate. +## The default is false for backward compatibility. +# valid_ssl = false ## Per-archive uncompressed-byte cap. Empty uses the app default: -## Sonarr/Whisparr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. -## `0` or `0B` disables the cap for this instance. -# max_bytes = "" - -#[[whisparr]] -# url = "http://127.0.0.1:6969" -# api_key = "0123456789abcdef0123456789abcdef" -## List of paths where content is downloaded for this app. -## Used as fallback if the path the Starr app reports does not exist or is not accessible. -# paths = ['/downloads'] -## Protocols to process from the download queue. Starr apps historically -## used "torrent" and "usenet" as the protocol strings, but newer versions -## emit the full class names "TorrentDownloadProtocol" and -## "UsenetDownloadProtocol" instead. List every string your app may return, -## separated by commas. The default covers both the legacy and new torrent -## strings. Add "usenet,UsenetDownloadProtocol" if you use a Usenet client. -# protocols = "torrent,TorrentDownloadProtocol" -## How long to wait for a reply from the backend. -# timeout = "10s" -## How long to wait after import before deleting the extracted items. -# delete_delay = "5m" -## If you use this app with NZB you may wish to delete archives after extraction. -## General recommendation is: do not enable this for torrent use. -## Setting this to true deletes the entire original download folder after import. -# delete_orig = false -## If you use Syncthing, setting this to true will make unpackerr wait for syncs to finish. -# syncthing = false -## Per-archive uncompressed-byte cap. Empty uses the app default: -## Sonarr/Whisparr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. +## Sonarr 20GB, Radarr 75GB, Lidarr 4GB, Readarr 1GB. ## `0` or `0B` disables the cap for this instance. # max_bytes = "" @@ -295,8 +411,14 @@ passwords = [] ## subfolder into a watched folder (defined below) any extractable items in the ## ## folder will be decompressed. This has nothing to do with Starr applications. ## ################################################################################## -#[[folder]] +#[folder.0] # path = '/downloads/auto_extract' +## How often this folder is scanned for new archives. +## Off (`0s`) uses filesystem events (inotify and friends). +## Enable a poll interval if files never show up in the queue, which is +## common on Docker and CIFS. Polling increases disk reads and is not +## recommended when fsnotify works. +# interval = "0s" ## Paths to ignore while watching this folder. Excluded paths and their ## children are not tracked or extracted. ## Paths may be absolute, or relative to this folder's `path`. @@ -307,7 +429,7 @@ passwords = [] ## The default is 10m. Set to 0 to disable all deletes. Deletes also ## require `delete_files` and/or `delete_original`. Uses Go Duration. # delete_after = "10m" -## Unpackerr extracts archives inside archives. Set this to true to disable recursive extractions. +## Nested archives are extracted by default. Disable recursion to extract only the outer archive. # disable_recursion = false ## Per-archive uncompressed-byte cap. Empty is unlimited. `0` or `0B` is also unlimited. # max_bytes = "" @@ -332,17 +454,56 @@ passwords = [] # move_back = false ## Set this to true if you want this app to extract ISO files with .iso extension. # extract_isos = false +## When true, an execute bit stored in the archive is kept for owner, +## group, or other only when file_mode already grants that class access. +## A 6 beside an archived 7 becomes 7, a 4 becomes 5, and a 0 stays 0. +## Off, extracted files use file_mode only. Starr extracts stay off. +## The process umask still applies. +# preserve_exec = false +## Incomplete-download suffixes such as `.part` or `.crdownload`. Extraction +## stays in waiting as long as any matching file is in the watched item's +## top folder. Subfolders are not scanned. The UI and config always store +## a leading period. Waiting items are rechecked every 5s even without the +## poller. Enabling folder poller will double-poll the folder and increase +## disk reads. Useful when fsnotify is not available, and not recommended +## when it is. +# wait_extensions = [] +## After start delay, skip watched folders that have no extractable archives. +## They leave waiting without history or webhooks. +# skip_empty = false + +#################### +### Hook Payload ### +#################### +# Extra IDs and custom event titles shared by every webhook and command hook. +[hooks] +## Nested [hooks.custom_ids] table, not an inline map. +## Webhooks get `customIDs` in JSON (`{{index .CustomIDs "url"}}` in templates). +## Command hooks get `UN_CUSTOM_ID_` environment variables. +## Env: UN_HOOKS_CUSTOM_IDS_url=https://… +## [hooks.custom_ids] +## url = "https://unpackerr.example" +## Nested [hooks.titles] table with one field per extract event: +## waiting, queued, extracting, extractfailed, extracted, imported, +## deleting, deletefailed, deleted, extractednothing. +## Empty values keep the built-in English title. Built-in Discord, Slack, +## Telegram, Gotify, and Pushover templates use this string. +## Env: UN_HOOKS_TITLES_EXTRACTING=Archive Found +## [hooks.titles] +## extracting = "Archive Found" ################ ### Webhooks ### ################ # Sends a webhook when an extraction queues, starts, finishes, and/or is deleted. # Created to integrate with notifiarr.com. -# Also works natively with Discord.com, Telegram.org, and Slack.com webhooks. +# Also works natively with Discord.com, Telegram.org, Slack.com, ntfy, Apprise, and Mattermost webhooks. # Can possibly be used with other services by providing a custom template_path. -###### Don't forget to uncomment [[webhook]] and url at a minimum !!!! -#[[webhook]] -# url = "https://notifiarr.com/api/v1/notification/unpackerr/api_key_from_notifiarr_com" +###### Don't forget to uncomment [webhook.0] and url at a minimum !!!! +#[webhook.0] +## Notifiarr: https://notifiarr.com/api/v1/notification/unpackerr plus headers.X-Api-Key. +## A path API key in a pasted URL is moved to that header. +# url = "https://notifiarr.com/api/v1/notification/unpackerr" ## Provide an optional name to hide the URL in logs. ## If a name is not provided then the URL is used. # name = "" @@ -352,30 +513,40 @@ passwords = [] ## The default is [0] and this is an example: # events = [1, 4, 6] ## ===> Advanced Optional Webhook Configuration <=== -## Used in Discord and Slack templates as bot name, in Telegram as chat_id. +## Discord, Slack, and Mattermost: bot/display name. Telegram: chat_id. +## Gotify, ntfy, and Apprise: optional title prefix. Unused by Notifiarr JSON. # nickname = "Unpackerr" -## Also passed into templates. Used in Slack templates for destination channel. +## Also passed into templates. Slack and Mattermost optional channel. Pushover user key. # channel = "" -## List of apps to exclude. None by default. This is an example: +## Passed into webhook templates. Pushover requires the application token. ntfy sends Authorization Bearer when set. Unused by Discord, Telegram, and Slack incoming webhooks. +# token = "" +## Dialect tokens skip every instance of that API. Any other value matches an instance name. None by default. This is an example: # exclude = ["readarr", "lidarr"] -## Override internal webhook template for discord.com or other hooks. +## Used when template is empty (automatic). A named template ignores this file. # template_path = '' -## Override automatic template detection. Values: notifiarr, discord, telegram, gotify, pushover, slack +## Override automatic template detection. Values: notifiarr, discord, telegram, gotify, pushover, slack, ntfy, apprise, mattermost. Empty uses the URL or template_path. # template = "" +## Default on for Discord webhooks and Telegram sendMessage. Other templates ignore this. Set false to post a new message for every extract event. +# update = true ## Set this to true to ignore the SSL certificate on the server. # ignore_ssl = false ## You can adjust how long to wait for a server response. # timeout = "10s" ## If your custom template uses another MIME type, set this. # content_type = "application/json" +## Nested [webhook.0.headers] table. Header names are letters, digits, underscore, or hyphen. +## Applied first; Content-Type and ntfy Authorization Bearer from token still win. +## Notifiarr client key: X-Api-Key. Env: UN_WEBHOOK_0_HEADERS_X-Api-Key=api_key_from_notifiarr_com +## [webhook.0.headers] +## X-Api-Key = "api_key_from_notifiarr_com" ##################### ### Command Hooks ### ##################### # Executes a script or command when an extraction queues, starts, finishes, and/or is deleted. # All data is passed in as environment variables. Try /usr/bin/env to see what variables are available. -###### Don't forget to uncomment [[cmdhook]] at a minimum !!!! -#[[cmdhook]] +###### Don't forget to uncomment [cmdhook.0] at a minimum !!!! +#[cmdhook.0] # command = '/downloads/scripts/command.sh' ## Provide an optional name to hide the URL in logs. ## If a name is not provided the first word in the command is used. @@ -388,9 +559,8 @@ passwords = [] ## The default is [0] and this is an example: # events = [1, 4, 7] ## ===> Optional Command Hook Configuration <=== -## List of apps to exclude. None by default. This is an example: +## Dialect tokens skip every instance of that API. Any other value matches an instance name. None by default. This is an example: # exclude = ["readarr", "lidarr"] ## You can adjust how long to wait for the command to run. # timeout = "10s" -## => Content Auto Generated, 31 AUG 2026 00:07 UTC diff --git a/docker_compose/mediahost/nginx/conf.d/reverseProxy.conf b/docker_compose/mediahost/nginx/conf.d/reverseProxy.conf index f1d2d8c..7929735 100644 --- a/docker_compose/mediahost/nginx/conf.d/reverseProxy.conf +++ b/docker_compose/mediahost/nginx/conf.d/reverseProxy.conf @@ -356,6 +356,7 @@ server { ssl_certificate /etc/nginx/certs/live/cloud.someoneslinux.selfhost.eu/fullchain.pem; ssl_certificate_key /etc/nginx/certs/live/cloud.someoneslinux.selfhost.eu/privkey.pem; + client_max_body_size 10G; location / { proxy_pass http://gitea:3000; # Do not try another upstream on errors