a / Dockerfile
FTA7700
Fix: single base image across stages + USER directive instead of gosu/entrypoint
a525ee8
Raw History Blame Contribute Delete
1.4 kB
FROM debian:bookworm-slim AS api-builder
RUN apt-get update && apt-get install -y curl build-essential pkg-config libssl-dev ca-certificates && rm -rf /var/lib/apt/lists/*
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable
ENV PATH="/root/.cargo/bin:${PATH}"
WORKDIR /app
COPY api/ .
ARG CARGO_FEATURES=""
RUN cargo build --release --features "${CARGO_FEATURES}"
FROM debian:bookworm-slim AS web-builder
RUN apt-get update && apt-get install -y curl ca-certificates gnupg && \
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY web/package.json web/package-lock.json ./
RUN npm ci
COPY web/ .
RUN npm run build-only
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates curl && rm -rf /var/lib/apt/lists/* \
&& groupadd --system opdb && useradd --system --gid opdb --create-home opdb
COPY --from=api-builder /app/target/release/openposterdb-api /usr/local/bin/openposterdb
COPY --from=web-builder /app/dist /app/dist
RUN mkdir -p /data/cache /data/db && chown -R opdb:opdb /data
ENV STATIC_DIR=/app/dist
ENV CACHE_DIR=/data/cache
ENV DB_DIR=/data/db
EXPOSE 3000
HEALTHCHECK --interval=10s --timeout=3s --start-period=15s \
CMD curl -sf http://localhost:3000/health || exit 1
USER opdb
CMD ["openposterdb"]