This commit adds the pmoradiofrance module to the build, updates the version to 0.3.14, and enhances the music renderer to fetch track duration from DIDL metadata when the renderer doesn't provide it directly. It also improves metadata caching for Radio France, including dynamic duration calculation and better station name handling.
119 lines
3.3 KiB
Docker
119 lines
3.3 KiB
Docker
# ===================================
|
|
# Stage 1: Build Vue.js webapp
|
|
# ===================================
|
|
FROM node:22-alpine AS webapp-builder
|
|
|
|
WORKDIR /webapp
|
|
|
|
# Copy webapp package files
|
|
COPY pmoapp/webapp/package*.json ./
|
|
|
|
# Install dependencies
|
|
RUN npm ci --production=false
|
|
|
|
# Copy webapp source
|
|
COPY pmoapp/webapp/ ./
|
|
|
|
# Build the webapp
|
|
RUN npm run build
|
|
|
|
# ===================================
|
|
# Stage 2: Build Rust binary
|
|
# ===================================
|
|
FROM rustlang/rust:nightly-bookworm AS rust-builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Install system dependencies for building
|
|
RUN apt-get update && apt-get install -y \
|
|
libsoxr-dev \
|
|
libasound2-dev \
|
|
pkg-config \
|
|
cmake \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy Cargo workspace files
|
|
COPY Cargo.toml Cargo.lock ./
|
|
|
|
# Copy all crates
|
|
COPY PMOMusic/ ./PMOMusic/
|
|
COPY pmoupnp/ ./pmoupnp/
|
|
COPY pmomediarenderer/ ./pmomediarenderer/
|
|
COPY pmomediaserver/ ./pmomediaserver/
|
|
COPY pmoconfig/ ./pmoconfig/
|
|
COPY pmoutils/ ./pmoutils/
|
|
COPY pmodidl/ ./pmodidl/
|
|
COPY pmoserver/ ./pmoserver/
|
|
COPY pmocache/ ./pmocache/
|
|
COPY pmocovers/ ./pmocovers/
|
|
COPY pmoaudiocache/ ./pmoaudiocache/
|
|
COPY pmoaudio/ ./pmoaudio/
|
|
COPY pmoqobuz/ ./pmoqobuz/
|
|
COPY pmoparadise/ ./pmoparadise/
|
|
COPY pmoradiofrance/ ./pmoradiofrance/
|
|
COPY pmosource/ ./pmosource/
|
|
COPY pmoplaylist/ ./pmoplaylist/
|
|
COPY pmoflac/ ./pmoflac/
|
|
COPY pmometadata/ ./pmometadata/
|
|
COPY pmocontrol/ ./pmocontrol/
|
|
COPY pmoaudio-ext/ ./pmoaudio-ext/
|
|
COPY pmoapp/ ./pmoapp/
|
|
|
|
# Copy the webapp dist from previous stage
|
|
COPY --from=webapp-builder /webapp/dist ./pmoapp/webapp/dist/
|
|
|
|
# Build the Rust binary in release mode
|
|
RUN cargo build --release --bin PMOMusic
|
|
|
|
# Strip debug symbols to reduce binary size
|
|
RUN strip /build/target/release/PMOMusic
|
|
|
|
# ===================================
|
|
# Stage 3: Minimal runtime image
|
|
# ===================================
|
|
FROM debian:bookworm-slim
|
|
|
|
ARG BUILD_DATE
|
|
LABEL org.opencontainers.image.created=$BUILD_DATE
|
|
LABEL org.opencontainers.image.title="PMOMusic UPNP Music Server"
|
|
LABEL org.opencontainers.image.version="0.1"
|
|
LABEL org.opencontainers.image.authors="eric@coissac.eu"
|
|
LABEL org.opencontainers.image.licenses="CeCILL-2.0"
|
|
LABEL org.opencontainers.image.url="https://gargoton.petite-maison-orange.fr/eric/pmomusic"
|
|
LABEL org.opencontainers.image.description="PMOMusic est une application Rust proposant en un binaire unique une Serveur de Musique, et une point de controle UPNP controlable via une application web."
|
|
|
|
# Install only runtime dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
libsoxr0 \
|
|
libasound2 \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create a non-root user
|
|
RUN useradd -m -u 1000 pmomusic
|
|
|
|
# Copy the binary from builder
|
|
COPY --from=rust-builder /build/target/release/PMOMusic /usr/local/bin/PMOMusic
|
|
|
|
# Set ownership
|
|
RUN chown pmomusic:pmomusic /usr/local/bin/PMOMusic
|
|
|
|
# Switch to non-root user
|
|
USER pmomusic
|
|
|
|
# Create directories for configuration and cache
|
|
RUN mkdir -p /home/pmomusic/.pmomusic
|
|
|
|
# Set working directory
|
|
WORKDIR /home/pmomusic
|
|
|
|
# Expose default port (adjust if needed)
|
|
EXPOSE 8080
|
|
|
|
# Health check (adjust the URL if needed)
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
|
CMD ["/usr/local/bin/PMOMusic", "--help"] || exit 1
|
|
|
|
# Run the binary
|
|
ENTRYPOINT ["/usr/local/bin/PMOMusic"]
|