The Log button shows the running daemon live: feed scans, downloads, torrents and every HTTP request. It reads a ring buffer filled by a tracing layer rather than tailing a file, so it works under Docker where logs go to stdout. The access-log middleware skips /api/logs, or the panel's poll would log itself forever. Detached torrents could leave a row stuck in 'downloading' across a restart, where nothing would ever revisit it; those are requeued at startup. Dockerfile, entrypoint and compose: 114 MB runtime, config bound to 0.0.0.0 on first run since container loopback is unreachable, drops to PUID:PGID for Unraid, and a healthcheck that goes through the control socket so a wedged worker reads as unhealthy. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AdXho5tTkjFLeUXKbEjKBh
40 lines
1.3 KiB
Docker
40 lines
1.3 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.
|
|
FROM rust:1-slim-bookworm AS build
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
WORKDIR /src
|
|
|
|
# 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 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:bookworm-slim
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates gosu \
|
|
&& 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"]
|