Bookworm's ffmpeg is 5.1.9, two major versions behind, and DeadAir runs everything through it. Both stages move, since the binary built in the first has to find the same glibc in the second. Checked in the new image on techpod-358 with a 643-term drop expression, the size that failed with a bsf_list error on 5.1 today: the copy is 352.73s shorter, as 643 cuts of 21 frames at 26.122ms predict, and decodes without errors. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
48 lines
1.8 KiB
Docker
48 lines
1.8 KiB
Docker
# Build. rusqlite is bundled (compiles SQLite from source) and librqbit needs a C
|
|
# toolchain, so the builder needs cc. TLS is rustls throughout, so no OpenSSL headers.
|
|
# build.rs builds the web pages from TypeScript with swc, which needs node.
|
|
FROM rust:1-slim-trixie AS build
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential nodejs npm \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
WORKDIR /src
|
|
|
|
# swc only: Playwright and TypeScript are for testing and type-checking, not for building.
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci --omit=dev
|
|
|
|
# Dependencies first, so editing the source does not rebuild librqbit every time.
|
|
COPY Cargo.toml Cargo.lock ./
|
|
RUN mkdir src && echo 'fn main(){}' > src/main.rs \
|
|
&& cargo build --release --locked \
|
|
&& rm -rf src
|
|
|
|
COPY build.rs ./
|
|
COPY src ./src
|
|
COPY web ./web
|
|
# cargo skips a rebuild if mtimes look untouched; make sure it does not.
|
|
RUN touch src/main.rs && cargo build --release --locked
|
|
|
|
FROM debian:trixie-slim
|
|
# ffmpeg is DeadAir's (#171): it finds the silences and copies the frames kept. Debian's adds
|
|
# about 480 MB, once: the layer stays cached until the base image changes.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates gosu ffmpeg \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
COPY --from=build /src/target/release/ipx /usr/local/bin/ipx
|
|
COPY docker-entrypoint.sh /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
|
|
ENV IPX_CONFIG=/config/config.toml \
|
|
IPX_DATA_DIR=/data \
|
|
IPX_LOG=ipx=info \
|
|
PUID=99 \
|
|
PGID=100
|
|
VOLUME ["/config", "/data", "/downloads"]
|
|
|
|
# Web UI, and the BitTorrent peer port (TCP and UDP -- DHT needs the UDP side).
|
|
EXPOSE 8099/tcp 6881/tcp 6881/udp
|
|
|
|
ENTRYPOINT ["docker-entrypoint.sh"]
|
|
CMD ["ipx", "daemon"]
|