# 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.