Something went wrong. Try again.
A modern, network-enabled music player platform built on Rockbox technology. rockboxd.tsiry-sandratraina.com
rust deno navidrome airplay libadwaita zig mpris snapcast mpd rockbox audio subsonic
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126# ── WebUI ──────────────────────────────────────────────────────────────────────FROM node:24 AS webui-builder
RUN apt-get update && apt-get install -y curl unzip && rm -rf /var/lib/apt/lists/*
RUN curl -fsSL https://deno.land/install.sh | shENV DENO_INSTALL="/root/.deno"ENV PATH="${DENO_INSTALL}/bin:${PATH}"
WORKDIR /app/webui/rockboxCOPY webui/rockbox/package.json ./RUN deno install --allow-scriptsCOPY webui/rockbox/ ./RUN deno task build
# ── S3 admin UI ────────────────────────────────────────────────────────────────# Built inside the image so `docker build .` is self-contained — the repo's# .dockerignore excludes every `dist/` directory, so the host's pre-built bundle# never reaches the build context.FROM oven/bun:1 AS s3-admin-builder
WORKDIR /app/crates/s3/s3webuiCOPY crates/s3/s3webui/package.json crates/s3/s3webui/bun.lock ./RUN bun install --frozen-lockfileCOPY crates/s3/s3webui/ ./RUN bun run build
# ── Rockbox daemon ─────────────────────────────────────────────────────────────FROM rust:1.95-trixie AS builder
ARG TARGETARCHARG TAG
ENV TAG=${TAG}
# Runtime deps for cpal (ALSA) and other libsRUN apt-get update && apt-get install -y \ build-essential \ libunwind-dev \ libasound2-dev \ libdbus-1-dev \ protobuf-compiler \ curl \ wget \ zip \ unzip \ cmake
# Install Zig 0.16.0RUN case "${TARGETARCH}" in \ amd64) ZIG_ARCH="x86_64" ;; \ arm64) ZIG_ARCH="aarch64" ;; \ *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ esac && \ export VERSION=0.16.0 && \ wget "https://ziglang.org/download/${VERSION}/zig-${ZIG_ARCH}-linux-${VERSION}.tar.xz" && \ tar -xf "zig-${ZIG_ARCH}-linux-${VERSION}.tar.xz" && \ mv "zig-${ZIG_ARCH}-linux-${VERSION}" /usr/local/zig && \ ln -s /usr/local/zig/zig /usr/local/bin/zig
COPY . /appWORKDIR /appCOPY --from=webui-builder /app/webui/rockbox/dist/ /app/webui/rockbox/dist/COPY --from=s3-admin-builder /app/crates/s3/s3webui/dist/ /app/crates/s3/s3webui/dist/
# Build rockboxd via the headless script (configure + make + cargo + zig)RUN bash scripts/build-headless.sh
# Build the rockbox CLI binaryRUN cargo build -p rockbox --release
# ── Runtime image ──────────────────────────────────────────────────────────────FROM typesense/typesense:30.1 AS typesense
FROM debian:trixie-slim
ARG TARGETARCHARG SNAP_VERSION=0.35.0
RUN apt-get update && apt-get install -y \ libunwind8 \ libasound2 \ libdbus-1-3 \ wget \ && case "${TARGETARCH}" in \ amd64) SNAP_ARCH="amd64" ;; \ arm64) SNAP_ARCH="arm64" ;; \ *) echo "Unsupported arch: ${TARGETARCH}" && exit 1 ;; \ esac \ && wget -q "https://github.com/snapcast/snapcast/releases/download/v${SNAP_VERSION}/snapserver_${SNAP_VERSION}-1_${SNAP_ARCH}_trixie.deb" -O /tmp/snapserver.deb \ && apt-get install -y /tmp/snapserver.deb \ && rm /tmp/snapserver.deb \ && apt-get remove -y wget \ && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/zig/zig-out/bin/rockboxd /usr/local/bin/rockboxdCOPY --from=builder /app/target/release/rockbox /usr/local/bin/rockboxCOPY --from=typesense /opt/typesense-server /usr/local/bin/typesense-server
COPY docker/snapserver.conf /etc/snapserver.confCOPY docker/entrypoint.sh /usr/local/bin/entrypoint.shRUN chmod +x /usr/local/bin/entrypoint.sh
RUN mkdir -p /root/.config/rockbox.orgCOPY docker/settings.toml /root/.config/rockbox.org/settings.toml
RUN mkdir -p /root/Music
# rockboxd portsEXPOSE 6061EXPOSE 6062EXPOSE 6063EXPOSE 6600# CMAF (HLS + DASH) — default audio output, played directly in the browserEXPOSE 7882# snapserver: client protocol, HTTP stream, HTTP JSON APIEXPOSE 1704EXPOSE 1705EXPOSE 1780# navidromeEXPOSE 4533# jellyfinEXPOSE 8096
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]