curltastic/Dockerfile
2026-09-08 02:15:45 +00:00

39 lines
1.4 KiB
Docker

# syntax=docker/dockerfile:1
FROM node:22-bookworm-slim AS frontend-build
WORKDIR /app
COPY frontend/package.json frontend/package-lock.json ./
RUN npm ci
COPY frontend/ ./
ARG VITE_BASE_PATH=/curltastic/
RUN npm test -- --pool=forks --poolOptions.forks.singleFork \
&& npm run build -- --base="${VITE_BASE_PATH}"
FROM rust:1.96-bookworm AS backend-build
WORKDIR /app
COPY backend/Cargo.toml backend/Cargo.lock ./
COPY backend/src/ ./src/
RUN cargo build --locked --release
FROM debian:bookworm-slim AS backend
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl \
&& rm -rf /var/lib/apt/lists/* \
&& groupadd --gid 10001 curltastic \
&& useradd --uid 10001 --gid 10001 --no-create-home --shell /usr/sbin/nologin curltastic
COPY --from=backend-build /app/target/release/curltastic-backend /usr/local/bin/curltastic-backend
USER 10001:10001
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl --fail --silent --show-error http://127.0.0.1:3000/ || exit 1
ENTRYPOINT ["/usr/local/bin/curltastic-backend"]
FROM nginx:1.28-alpine AS frontend
COPY docker/nginx.conf /etc/nginx/nginx.conf
COPY --from=frontend-build /app/dist/ /usr/share/nginx/html/
USER 101:101
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget -q -O /dev/null http://127.0.0.1:8080/healthz || exit 1
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]