Files
spacedrive/apps/server/Dockerfile

66 lines
1.4 KiB
Docker

# 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
# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
ENV PATH="/root/.cargo/bin:$PATH"
WORKDIR /build
# Copy workspace configuration
COPY Cargo.toml Cargo.lock ./
COPY .cargo ./.cargo
# Copy source code
COPY core ./core
COPY crates ./crates
COPY apps/server ./apps/server
# Build server (RPC only, no assets)
RUN --mount=type=cache,target=/root/.cargo/registry \
--mount=type=cache,target=/root/.cargo/git \
--mount=type=cache,target=/build/target \
cargo build --release -p sd-server && \
cp target/release/sd-server /usr/local/bin/sd-server
#--
# Runtime image
#--
FROM gcr.io/distroless/cc-debian12:nonroot
# 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 nonroot:nonroot
# Start server
ENTRYPOINT ["/usr/bin/sd-server"]
CMD ["--data-dir", "/data"]