← Retour
# Build stage
FROM rust:1.83-alpine AS builder
WORKDIR /app
# Installer musl-dev pour la compilation statique
RUN apk add --no-cache musl-dev
# Copier les fichiers Cargo
COPY Cargo.toml Cargo.lock* ./
# Créer un dummy src pour compiler les dépendances
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo build --release
RUN rm -rf src
# Copier le vrai code source
COPY src ./src
# Rebuild avec le vrai code (les dépendances sont cachées)
RUN touch src/main.rs && cargo build --release
# Runtime stage
FROM alpine:3.20
WORKDIR /app
# Installer les certificats CA pour HTTPS
RUN apk add --no-cache ca-certificates curl
# Copier le binaire compilé
COPY --from=builder /app/target/release/app /app/app
ENV PORT=3000
EXPOSE ${PORT}
# Healthcheck
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:${PORT}/health || exit 1
CMD ["/app/app"]