writeonce/reference/writeonce-api/Dockerfile
2026-04-05 00:45:02 +02:00

66 lines
1.4 KiB
Docker

# Declare ARG in global scope
ARG VERSION=1.82.0
FROM rust:${VERSION} AS base
WORKDIR /usr/src/app
FROM base as build
# Install build dependencies
RUN apt-get update && apt-get install -y \
curl \
build-essential \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install and configure sccache to speed up compilation
RUN cargo install sccache
ENV RUSTC_WRAPPER="sccache"
# Cache dependencies to speed up builds
COPY Cargo.toml ./
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo build --release && rm -rf target/release/deps/*
COPY . .
RUN cargo build --release --bin writeonce-manage-article-api
# Stage 2: Create a minimal runtime image
FROM debian:bookworm-slim as runtime
# Install necessary runtime dependencies
RUN apt-get update && apt-get install -y \
ca-certificates \
libc6 \
libpq5 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/src/app/target/release/writeonce-manage-article-api /usr/local/bin/app
COPY doc /usr/local/share/doc
ARG PORT
ARG AWS_INFRA_BASE_URL
ARG DATABASE_URL
ARG API_ACCESS_TOKEN
ARG API_ACCESS_ADMIN_TOKEN
RUN echo $PORT
ENV PORT=$PORT
ENV AWS_INFRA_BASE_URL=$AWS_INFRA_BASE_URL
ENV API_ACCESS_TOKEN=$API_ACCESS_TOKEN
ENV API_ACCESS_ADMIN_TOKEN=$API_ACCESS_ADMIN_TOKEN
ENV DATABASE_URL=$DATABASE_URL
# Expose the application port
EXPOSE ${PORT}
WORKDIR /usr/local/share
# Run the application
CMD ["app"]