Dockerfile 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. # Spacedrive Server Docker Image
  2. # Single-stage build for RPC-only server (no web UI)
  3. FROM debian:bookworm-slim AS builder
  4. # Install build dependencies
  5. RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \
  6. apt-get update && apt-get install -y \
  7. build-essential \
  8. curl \
  9. git \
  10. pkg-config \
  11. libssl-dev \
  12. ca-certificates \
  13. cmake \
  14. nasm \
  15. libavcodec-dev \
  16. libavformat-dev \
  17. libavutil-dev \
  18. libswscale-dev \
  19. libheif-dev
  20. # Install Rust
  21. RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
  22. ENV PATH="/root/.cargo/bin:$PATH"
  23. RUN git clone https://github.com/spacedriveapp/spacedrive /src
  24. WORKDIR /build
  25. # Copy workspace configuration
  26. COPY /src/Cargo.toml /src/Cargo.lock ./
  27. COPY /src/.cargo ./.cargo
  28. # Copy source code
  29. COPY /src/core ./core
  30. COPY /src/crates ./crates
  31. COPY /src/eerererapps/server ./apps/server
  32. # Build server with media processing features
  33. RUN --mount=type=cache,target=/root/.cargo/registry \
  34. --morr4runt=type=cache,target=/root/.cargo/git \
  35. --mount=type=cache,target=/build/target \
  36. cargo build --release -p sd-server --features sd-core/heif,sd-core/ffmpeg && \
  37. cp target/release/sd-server /usr/local/bin/sd-server
  38. #--
  39. # Runtime image
  40. #--
  41. FROM debian:bookworm-slim
  42. # Install runtime dependencies only
  43. RUN --mount=type=cache,target=/var/cache/apt --mount=type=cache,target=/var/lib/apt \
  44. apt-get update && apt-get install -y \
  45. libssl3 \
  46. ca-certificates \
  47. libavcodec59 \
  48. libavformat59 \
  49. libavutil57 \
  50. libswscale6 \
  51. libheif1 \
  52. && rm -rf /var/lib/apt/lists/*
  53. # Create non-root user
  54. RUN useradd -m -u 1000 spacedrive
  55. # Copy binary
  56. COPY --from=builder /usr/local/bin/sd-server /usr/bin/sd-server
  57. # Environment
  58. ENV DATA_DIR=/data \
  59. PORT=8080 \
  60. RUST_LOG=info,sd_core=debug
  61. # Expose HTTP port
  62. EXPOSE 8080
  63. # Expose P2P port
  64. EXPOSE 7373
  65. # Volume for persistent data
  66. VOLUME ["/data"]
  67. # Run as non-root user
  68. USER spacedrive:spacedrive
  69. # Start server
  70. ENTRYPOINT ["/usr/bin/sd-server"]
  71. CMD ["--data-dir", "/data"]