this repo has no description
1# Use rust image as base
2FROM rust:1.92-slim-bookworm as builder
3
4# Install build dependencies and security updates
5RUN apt-get update && \
6 apt-get upgrade -y && \
7 apt-get install -y --no-install-recommends \
8 pkg-config \
9 libssl-dev \
10 && rm -rf /var/apt/lists/*
11
12# Create app directory
13WORKDIR /app
14
15COPY Cargo.toml Cargo.lock ./
16
17# Create dummy main.rs to build and cache dependencies
18RUN mkdir src && \
19 echo "fn main() {println!(\"Dummy program\")}" > src/main.rs && \
20 cargo build --release && \
21 rm -rf src
22
23# Copy source code
24COPY src ./src
25
26# Build the application
27RUN touch src/main.rs && \
28 cargo build --release && \
29 strip target/release/tpp
30
31# RUNTIME STAGE
32FROM debian:bookworm-slim as runtime
33
34RUN apt-get update && \
35 apt-get upgrade -y && \
36 apt-get install -y --no-install-recommends \
37 ca-certificates \
38 libssl3 \
39 && rm -rf /var/apt/lists/*
40
41# Create non-root user
42RUN useradd -m -u 1001 -U appuser
43
44# Set working directory
45WORKDIR /app
46
47# Copy binary from builder
48COPY --chown=appuser:appuser --from=builder /app/target/release/tpp /app/app
49
50# Switch to non-root user
51USER appuser
52
53# Expose port
54EXPOSE 3000
55
56# Add healthcheck
57HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
58 CMD ["/app/app", "--health-check"] || exit 1
59
60# Run the application
61CMD ["/app/app"]
62