This project contains a service for serving Duplicati update files.
In essence it shadows a remote storage via KVPSButter and provides a local cache for files, serving as a kind-of CDN of private storage.
The service is prepared for Docker usage and is configured via environment variables.
Required variables:
PRIMARY
: The KVPSButter connection string where the source files are fetched fromCACHEPATH
: The path to where cached files will be stored
Optional variables:
-
MAX_NOT_FOUND
: The maximum number of 404 responses from the remote to store. Can use b/k/m/g/t/p suffix. Default is10k
. -
MAX_SIZE
: The maximum size of the disk to use for caching. Can use b/k/m/g/t/p suffix. Default is10m
. -
SEQ_URL
: url for logging to Seq. -
SEQ_APIKEY
: API key for logging to Seq. -
CACHE_TIME
: The duration items are kept cached. Can use s/m/h/d/w suffix. Default is1d
. -
REDIRECT
: A url to redirect to, when accessing/
. -
APIKEY
: API key to enable the/reload
endpoint for forced expiration of cached items. -
KEEP_FOREVER_REGEX
: Regex to disable expiration on matching items; size limits may still expire items. -
NO_CACHE_REGEX
: Regex to disable caching on items matching expression. -
CUSTOM_LOG
: A custom serilog message template to write on requests that complete -
CUSTOM_LOG_HEADERS
: A semi-colon separated list of request headers to include in log data -
MAXMIND_ACCOUNT_ID
: The Maxmind accountid for geolite -
MAXMIND_LICENSE_KEY
: The Maxmind licensekey for geolite -
MAXMIND_IP_HEADER
: The header with the IP used for geolite lookups -
NOTFOUND_HTML
: A path into the primary storage where the 404 page is loaded from -
INDEX_HTML
: A path into the primary storage where the index.html page is loaded from -
INDEX_HTML_REGEX
: A regex that selects what paths to apply the index html for
To force expire items, set APIKEY
and use a request similar to:
curl -X POST --data '["key1","item/key2"]' 'https://example.com/reload' --header 'X-API-KEY:<APIKEY>'