66 lines
1.4 KiB
Docker
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"]
|