FROM node:20.19.3-bullseye-slim AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN --mount=type=cache,target=/var/cache/apt,id=apt-cache \
--mount=type=cache,target=/root/.npm,id=npm-cache,sharing=locked \
sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& apt-get clean \
&& apt-get update -y \
&& apt-get install -y --no-install-recommends git make \
&& rm -rf /var/lib/apt/lists/* \
&& npm config set registry https://registry.npmmirror.com \
&& npm config -g get cache \
&& npm install
COPY . .
RUN --mount=type=cache,target=/root/.npm,id=npm-cache,sharing=locked \
npm run build
FROM node:20-alpine
RUN --mount=type=cache,target=/var/cache/apk,id=apk-cache \
--mount=type=cache,target=/root/.npm,id=npm-cache,sharing=locked \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update --no-cache \
&& apk add --no-cache ca-certificates tzdata bash curl \
&& npm config set registry https://registry.npmmirror.com \
&& npm install -g serve
RUN addgroup -S server && adduser -S server -G server
USER server
WORKDIR /app
COPY --from=builder /app/dist ./dist
EXPOSE 8080
CMD ["serve", "-s", "dist", "-p", "8080", "--cors"]