# syntax=docker/dockerfile:1 FROM rust:1-slim-bookworm AS builder RUN apt-get update && apt-get install -y --no-install-recommends \ pkg-config \ libssl-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY . . # Cache mounts keep the registry and target dir between builds, so only # changed crates recompile. RUN --mount=type=cache,target=/usr/local/cargo/registry \ --mount=type=cache,target=/app/target \ cargo build --release --locked \ && cp target/release/server /usr/local/bin/server FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ libssl3 \ && rm -rf /var/lib/apt/lists/* RUN useradd --system --uid 10001 saturn \ && mkdir /data \ && chown saturn /data COPY --from=builder /usr/local/bin/server /usr/local/bin/server USER saturn WORKDIR /data ENV BIND_ADDR=0.0.0.0:8080 \ DATABASE_URL=sqlite:///data/users.db?mode=rwc EXPOSE 8080 VOLUME ["/data"] HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ CMD ["server", "healthcheck"] CMD ["server"]