FROM docker.io/library/golang:1.24-alpine as builder WORKDIR /src COPY go.* . RUN go mod download COPY . . RUN go build -o /src/build/subsyt . FROM docker.io/library/alpine:3.21 RUN apk update && apk upgrade && apk add --no-cache \ bash \ ffmpeg \ aria2 \ pipx \ attr \ mutagen \ ca-certificates \ deno \ python3 \ py3-requests \ py3-certifi \ py3-brotli \ py3-mutagen \ py3-pycryptodomex \ py3-secretstorage \ py3-websockets RUN addgroup --gid 1000 subsyt \ && adduser --home /home/subsyt \ --shell /bin/bash \ --uid 1000 \ --ingroup subsyt \ --disabled-password \ subsyt RUN mkdir /data RUN mkdir /data/vids RUN touch /data/config.json RUN touch /data/opml.xml RUN touch /data/api-queue.json RUN chown --recursive subsyt:subsyt /data USER subsyt COPY <<-EOT /data/config.json { "daemon": true, "dry_run": false, "download_dir": "/data/download", "media_dir": "/data/media", "http_api": { "enable": true, "listen": "0.0.0.0:6901", "auth_token_file": "/run/secrets/subsyt-token", "queue_file": "/data/api-queue.json" }, "provider": { "youtube": { "verbose": false, "cmd": "/home/subsyt/.local/bin/yt-dlp", "format": "", "format_sort": "", "output_path_template": "s%(upload_date>%Y)s/%(channel)s.s%(upload_date>%Y)Se%(upload_date>%m%d)S.%(title)s.%(id)s.%(ext)s", "url": "https://www.youtube.com", "throttle": 5, "cookies_file": "", "opml_file": "/data/opml.xml", "po_token": "", "bgutil_server": "http://bgutil:4416", "player_client": "" } } } EOT WORKDIR /app RUN pipx ensurepath RUN source /home/subsyt/.bashrc RUN pipx install yt-dlp RUN pipx inject yt-dlp yt-dlp-ejs RUN pipx inject yt-dlp curl-cffi RUN pipx inject yt-dlp bgutil-ytdlp-pot-provider COPY --from=builder --chown=subsyt:subsyt /src/build/subsyt /app/subsyt CMD [ "/app/subsyt", "--config=/data/config.json" ]