# Build React client, build Express server, then run one container that serves both. Port 8080.
FROM node:20-alpine AS client
WORKDIR /client
COPY client/package.json ./
RUN npm install
COPY client/ ./
RUN npm run build

FROM node:20-alpine AS server
WORKDIR /server
COPY server/package.json ./
RUN npm install
COPY server/ ./
RUN npm run build

FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production PORT=8080
ARG APP_VERSION=dev
ENV APP_VERSION=$APP_VERSION
COPY server/package.json ./
RUN npm install --omit=dev && npm cache clean --force
COPY --from=server /server/dist ./dist
COPY --from=client /client/dist ./public
EXPOSE 8080
USER node
CMD ["node", "dist/index.js"]
