e966182e6f
Wires the five poll env vars into docker-compose (the documented kill switch was inert), skips fetching unknown sites and non-https URLs before spending a request, and makes runOnce's summary log fire on empty and cancelled ticks. Records the accepted non-atomic Get+Upsert window and the one-interval startup delay in the docs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
2.6 KiB
Bash
55 lines
2.6 KiB
Bash
# Copy to .env and fill in. Never commit the real .env.
|
|
|
|
# Long random secret shared with the userscript's API_TOKEN. Generate one:
|
|
# openssl rand -hex 32
|
|
API_TOKEN=changeme-generate-a-long-random-token
|
|
|
|
# Comma-separated origins allowed to call the API (CORS). Both Asura domains
|
|
# plus Demonic. Add/remove as the sites' hostnames change.
|
|
ALLOWED_ORIGINS=https://asuracomic.net,https://asurascans.com,https://demonicscans.org
|
|
|
|
# --- Prod override (Traefik) only ---
|
|
# Subdomain Traefik routes to this service (required by the prod override).
|
|
# MANGA_API_HOST=manga-api.example.com
|
|
# Traefik's docker network name, if not "proxy".
|
|
# PROXY_NETWORK=proxy
|
|
# Traefik HTTPS entrypoint + cert resolver names, if yours differ from these.
|
|
# TRAEFIK_ENTRYPOINT=websecure
|
|
# TRAEFIK_CERTRESOLVER=le
|
|
|
|
# --- Web UI ---
|
|
# Password for the browser UI at https://$MANGA_WEB_HOST. Leave unset to
|
|
# disable the web UI entirely (the routes are not registered at all).
|
|
# Generate one: openssl rand -base64 18
|
|
WEB_PASSWORD=
|
|
|
|
# Subdomain Traefik routes to the browser UI (required by the prod override,
|
|
# whether or not WEB_PASSWORD is set). Left commented on purpose: an example
|
|
# value here would be a silent wrong-hostname fallback, and Traefik would
|
|
# publish the UI router on a domain you do not own. The same container also
|
|
# answers on MANGA_API_HOST for the userscript's API.
|
|
# MANGA_WEB_HOST=manga.example.com
|
|
|
|
# --- Latest-chapter poller ---
|
|
# The backend re-checks each bookmarked series' newest published chapter on its
|
|
# own schedule, so latest_chapter stays fresh even when you never open the manga
|
|
# sites. This runs in parallel with the userscript's own in-browser check.
|
|
# Set to 0 to turn it off entirely.
|
|
# LATEST_CHAPTER_POLL_ENABLED=1
|
|
#
|
|
# Two independent clocks. COOLDOWN is how long one series rests between checks;
|
|
# INTERVAL is how often the poller wakes up and looks for series past that
|
|
# cooldown. Shortening INTERVAL cannot shorten a COOLDOWN.
|
|
# LATEST_CHAPTER_POLL_COOLDOWN=1h # per series, floor 15m
|
|
# LATEST_CHAPTER_POLL_INTERVAL=10m # how often to wake
|
|
# LATEST_CHAPTER_POLL_BATCH=14 # series per wake
|
|
# LATEST_CHAPTER_POLL_STAGGER=20s # delay between fetches in a batch
|
|
#
|
|
# Uses a ticker, not an immediate first run: the first poll happens one
|
|
# INTERVAL after startup, not at startup. A container restarting more often
|
|
# than INTERVAL never polls.
|
|
#
|
|
# BATCH x (COOLDOWN / INTERVAL) series hold the cooldown cadence — 84 with these
|
|
# defaults. Beyond that the cadence stretches uniformly rather than breaking;
|
|
# raise BATCH or lower INTERVAL. Keep BATCH x STAGGER under INTERVAL.
|