forked from eros/curltastic
39 lines
1.4 KiB
Docker
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;"]
|