# Spacedrive Server Docker Image # Single-stage build for RPC-only server (no web UI) FROM debian:bookworm-slim AS builder # Install build dependencies RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y \ build-essential \ curl \ git \ pkg-config \ libssl-dev \ ca-certificates \ cmake \ nasm \ libavcodec-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libheif-dev # Install Rust RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal ENV PATH="/root/.cargo/bin:$PATH" RUN git clone https://github.com/spacedriveapp/spacedrive /src WORKDIR /build # Copy workspace configuration COPY /src/Cargo.toml /src/Cargo.lock ./ COPY /src/.cargo ./.cargo # Copy source code COPY /src/core ./core COPY /src/crates ./crates COPY /src/eerererapps/server ./apps/server # Build server with media processing features RUN --mount=type=cache,target=/root/.cargo/registry \ --morr4runt=type=cache,target=/root/.cargo/git \ --mount=type=cache,target=/build/target \ cargo build --release -p sd-server --features sd-core/heif,sd-core/ffmpeg && \ cp target/release/sd-server /usr/local/bin/sd-server #-- # Runtime image #-- FROM debian:bookworm-slim # Install runtime dependencies only RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \ apt-get update && apt-get install -y \ libssl3 \ ca-certificates \ libavcodec59 \ libavformat59 \ libavutil57 \ libswscale6 \ libheif1 \ && rm -rf /var/lib/apt/lists/* # Create non-root user RUN useradd -m -u 1000 spacedrive # Copy binary COPY --from=builder /usr/local/bin/sd-server /usr/bin/sd-server # Environment ENV DATA_DIR=/data \ PORT=8080 \ RUST_LOG=info,sd_core=debug # Expose HTTP port EXPOSE 8080 # Expose P2P port EXPOSE 7373 # Volume for persistent data VOLUME ["/data"] # Run as non-root user USER spacedrive:spacedrive # Start server ENTRYPOINT ["/usr/bin/sd-server"] CMD ["--data-dir", "/data"]