feat(server): supply YouTube cookies to the API container via .env
Set YTDLP_COOKIES_HOST in server/.env and compose mounts the host cookies.txt read-only at /cookies.txt and wires YTDLP_COOKIES automatically — no compose edits per host. Falls back to /dev/null when unset so the container still starts. Add server/.env.example, gitignore server/.env, and document the flow. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,4 +2,5 @@ __pycache__/
|
||||
*.pyc
|
||||
|
||||
server/log.txt
|
||||
server/.env
|
||||
cookies.txt
|
||||
|
||||
14
README.md
14
README.md
@@ -207,15 +207,17 @@ Use a Netscape-format cookie exporter, then point `--cookies` / `$YTDLP_COOKIES`
|
||||
./musicfetch --repair --cookies ~/cookies.txt -o /media/music
|
||||
```
|
||||
|
||||
For the API container, mount it and set the env var (see `server/docker-compose.yml`):
|
||||
For the API container, just point it at the host file via `.env` — no compose
|
||||
edits needed (see `server/.env.example`):
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
YTDLP_COOKIES: "/cookies.txt"
|
||||
volumes:
|
||||
- /host/path/cookies.txt:/cookies.txt:ro
|
||||
```bash
|
||||
# server/.env
|
||||
YTDLP_COOKIES_HOST=/host/path/cookies.txt
|
||||
```
|
||||
|
||||
The compose mounts it read-only at `/cookies.txt` and sets `YTDLP_COOKIES`
|
||||
automatically. Leave `YTDLP_COOKIES_HOST` unset to run without cookies.
|
||||
|
||||
Cookies expire — if YouTube starts rejecting them, re-export. Treat `cookies.txt` like a
|
||||
password (it *is* your logged-in session); keep it out of git (`.gitignore` it).
|
||||
|
||||
|
||||
13
server/.env.example
Normal file
13
server/.env.example
Normal file
@@ -0,0 +1,13 @@
|
||||
# Copy to server/.env and fill in. docker-compose reads it automatically.
|
||||
|
||||
# Lidarr (preferred source)
|
||||
LIDARR_API_KEY=
|
||||
|
||||
# API key clients must send to musicfetch-api
|
||||
MUSICFETCH_API_KEY=
|
||||
|
||||
# Optional: authenticated YouTube cookies to dodge the bot-check
|
||||
# ("Sign in to confirm you're not a bot") and rate limits.
|
||||
# Set to the host path of a Netscape-format cookies.txt (see README
|
||||
# "Getting YouTube cookies"). Leave unset to run without cookies.
|
||||
# YTDLP_COOKIES_HOST=/host/path/cookies.txt
|
||||
@@ -13,10 +13,14 @@ services:
|
||||
MUSICFETCH_API_KEY: "${MUSICFETCH_API_KEY}"
|
||||
MUSICFETCH_ROOT: "/media/music"
|
||||
MUSICFETCH_PORT: "6769"
|
||||
# Optional: authenticated YouTube cookies to avoid bot-check / rate limits.
|
||||
# Mount a cookies.txt below and point this at it (in-container path).
|
||||
YTDLP_COOKIES: "${YTDLP_COOKIES:-}"
|
||||
# Optional: authenticated YouTube cookies to avoid bot-check ("Sign in to
|
||||
# confirm you're not a bot") / rate limits. To enable, set in a .env file
|
||||
# (see server/.env.example):
|
||||
# YTDLP_COOKIES_HOST=/host/path/cookies.txt
|
||||
# The host file is mounted read-only at /cookies.txt and used automatically.
|
||||
YTDLP_COOKIES: "${YTDLP_COOKIES_HOST:+/cookies.txt}"
|
||||
volumes:
|
||||
- /media/music:/media/music
|
||||
# Uncomment and set host path to supply cookies (see YTDLP_COOKIES above):
|
||||
# - /path/to/cookies.txt:/cookies.txt:ro
|
||||
# Cookies bind: maps to the host cookies.txt when YTDLP_COOKIES_HOST is set,
|
||||
# otherwise /dev/null (harmless no-op so the container still starts).
|
||||
- "${YTDLP_COOKIES_HOST:-/dev/null}:/cookies.txt:ro"
|
||||
|
||||
Reference in New Issue
Block a user