81 lines
1.7 KiB
Docker
81 lines
1.7 KiB
Docker
FROM node:20-alpine AS base
|
|
|
|
FROM base as dev_dep
|
|
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
|
|
WORKDIR /home/node/app
|
|
|
|
# --- dependencies ---
|
|
COPY --chown=node:node package*.json ./
|
|
COPY --chown=node:node backend/package*.json ./backend/
|
|
COPY --chown=node:node frontend/package*.json ./frontend/
|
|
|
|
USER node
|
|
RUN npm install --include=dev
|
|
|
|
FROM base as dep
|
|
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
|
|
WORKDIR /home/node/app
|
|
|
|
# --- dependencies ---
|
|
COPY --chown=node:node package*.json ./
|
|
COPY --chown=node:node backend/package*.json ./backend/
|
|
COPY --chown=node:node frontend/package*.json ./frontend/
|
|
|
|
USER node
|
|
RUN npm install --omit=dev
|
|
|
|
#
|
|
# === BUILDER ===
|
|
#
|
|
|
|
FROM base as build
|
|
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
|
|
WORKDIR /home/node/app
|
|
|
|
COPY --from=dev_dep /home/node/app/ ./
|
|
|
|
COPY --chown=node:node . .
|
|
|
|
# --- build frontend ---
|
|
|
|
RUN npm -w frontend run build
|
|
|
|
# --- build backend ---
|
|
|
|
RUN npx -w backend prisma generate
|
|
RUN npm -w backend run build
|
|
|
|
#
|
|
# === RUNNER ===
|
|
#
|
|
|
|
FROM base as run
|
|
WORKDIR /home/node/app
|
|
COPY --from=dep /home/node/app/ ./
|
|
COPY package*.json docker-start.sh ./
|
|
|
|
# --- prepare frontend ---
|
|
|
|
RUN mkdir -p frontend
|
|
COPY --from=build /home/node/app/frontend/dist ./frontend/
|
|
|
|
# --- prepare server ---
|
|
|
|
RUN mkdir -p backend
|
|
COPY --from=build /home/node/app/backend/package.json ./backend/
|
|
COPY --from=build /home/node/app/backend/prisma ./backend/prisma
|
|
COPY --from=build /home/node/app/backend/dist ./backend/dist
|
|
|
|
# --- finalize ---
|
|
|
|
RUN npx -w backend prisma generate
|
|
|
|
# set runtime env variables
|
|
|
|
ENV PORT 3000
|
|
ENV NODE_ENV production
|
|
ENV SERVE_FRONTEND /home/node/app/frontend
|
|
|
|
EXPOSE 3000
|
|
ENTRYPOINT [ "/bin/sh" ]
|
|
CMD [ "./docker-start.sh" ] |