FROM rust:1.89-slim AS builder RUN cargo install cargo-chef --locked WORKDIR /app COPY Cargo.toml Cargo.lock ./ COPY api/Cargo.toml ./api/ COPY app/Cargo.toml ./app/ COPY doc/Cargo.toml ./doc/ COPY migration/Cargo.toml ./migration/ COPY models/Cargo.toml ./models/ COPY utils/Cargo.toml ./utils/ RUN mkdir -p src && echo "fn main() {}" > src/main.rs RUN cargo chef prepare --recipe-path recipe.json RUN cargo chef cook --release --recipe-path recipe.json COPY . . RUN cargo build --release --bin thoughts-backend FROM debian:13-slim AS runtime RUN groupadd --system --gid 1001 appgroup && \ useradd --system --uid 1001 --gid appgroup appuser WORKDIR /app COPY --from=builder /app/target/release/thoughts-backend . COPY .env.example .env RUN chown -R appuser:appgroup /app USER appuser EXPOSE 8000 CMD ["./thoughts-backend"]