Dockerfile 52 lignes · 2210 octets
# Build context must be the workspace root: `docker build -f tests/fediverse-testbed/Dockerfile .`
# The compose file already passes context: ../.. accordingly.

FROM rust:1.91-slim-bookworm AS builder
WORKDIR /build

RUN apt-get update \
 && apt-get install -y --no-install-recommends pkg-config libssl-dev ca-certificates \
 && rm -rf /var/lib/apt/lists/*

COPY Cargo.toml Cargo.lock ./
COPY app ./app
COPY crates ./crates
COPY tools ./tools

# rustwarden-app + migrate (SeaORM CLI) + migrate-fediverse +
# migrate-fediverse-guard + seed helper. The app is built with the
# three federation features so the admin dashboard ships both the
# fediverse settings UI (RFC 0021) and the guard UI (RFC 0028) end-to-end.
RUN cargo build --release \
        -p rustwarden-app --features "fediverse-ui fediverse-guard" \
 && cargo build --release \
        -p rustwarden-core --bin seed --bin migrate \
 && cargo build --release \
        -p rustwarden-fediverse --bin migrate-fediverse \
 && cargo build --release \
        -p rustwarden-fediverse-guard --bin migrate-fediverse-guard

FROM debian:bookworm-slim AS runtime
RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates libssl3 curl postgresql-client \
 && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Locales are read at runtime from these *relative* paths (see init_i18n in
# crates/rustwarden-core/src/app.rs). The directory layout must mirror the
# workspace tree for the i18n loader to find them.
COPY --from=builder /build/crates/rustwarden-core/locales ./crates/rustwarden-core/locales
COPY --from=builder /build/crates/rustwarden-ui/locales ./crates/rustwarden-ui/locales

# Static assets served by ServeDir (path overridable via RUSTWARDEN_STATIC_DIR).
COPY static ./static

COPY --from=builder /build/target/release/rustwarden /usr/local/bin/rustwarden
COPY --from=builder /build/target/release/seed /usr/local/bin/seed
COPY --from=builder /build/target/release/migrate /usr/local/bin/migrate
COPY --from=builder /build/target/release/migrate-fediverse /usr/local/bin/migrate-fediverse
COPY --from=builder /build/target/release/migrate-fediverse-guard /usr/local/bin/migrate-fediverse-guard

EXPOSE 80
CMD ["rustwarden"]