mirror of
https://github.com/bookorbit/bookorbit.git
synced 2026-11-03 00:11:37 -06:00
feat(docker): add monorepo Docker build with auto-migrate and pdf-lib
This commit is contained in:
+34
-23
@@ -1,33 +1,44 @@
|
||||
# Stage 1: Build client
|
||||
FROM node:24-alpine AS client-builder
|
||||
WORKDIR /app/client
|
||||
COPY client/package.json client/package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY client/ .
|
||||
RUN npm run build
|
||||
|
||||
# Stage 2: Build server
|
||||
FROM node:24-alpine AS server-builder
|
||||
WORKDIR /app/server
|
||||
COPY server/package.json server/package-lock.json ./
|
||||
RUN npm ci
|
||||
COPY server/ .
|
||||
RUN npm run build
|
||||
|
||||
# Stage 3: Final image — production only, no devDependencies
|
||||
FROM node:24-alpine AS final
|
||||
RUN npm install -g pnpm@10
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=server-builder /app/server/dist ./dist
|
||||
COPY --from=server-builder /app/server/package.json ./package.json
|
||||
COPY --from=server-builder /app/server/package-lock.json ./package-lock.json
|
||||
RUN npm ci --omit=dev
|
||||
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
|
||||
COPY packages/ packages/
|
||||
COPY client/package.json ./client/
|
||||
RUN pnpm install --filter client... --frozen-lockfile
|
||||
|
||||
# Vue build served as static files by NestJS
|
||||
COPY client/ ./client/
|
||||
RUN pnpm --filter client run build-only
|
||||
|
||||
# Stage 2: Build server + create prod deploy bundle
|
||||
FROM node:24-alpine AS server-builder
|
||||
RUN npm install -g pnpm@10
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
|
||||
COPY packages/ packages/
|
||||
COPY server/package.json ./server/
|
||||
RUN pnpm install --filter server... --frozen-lockfile
|
||||
|
||||
COPY server/ ./server/
|
||||
RUN pnpm --filter server run build
|
||||
|
||||
# pnpm deploy prunes to prod deps; dist/ is gitignored so copy it in after
|
||||
RUN pnpm --filter server deploy --prod --legacy /deploy
|
||||
RUN cp -r /app/server/dist /deploy/dist
|
||||
|
||||
# Stage 3: Final image
|
||||
FROM node:24-alpine
|
||||
WORKDIR /app
|
||||
|
||||
COPY --from=server-builder /deploy ./
|
||||
COPY --from=client-builder /app/client/dist ./public
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
CMD ["node", "dist/main.js"]
|
||||
COPY --from=server-builder /app/server/entrypoint.sh ./entrypoint.sh
|
||||
RUN chmod +x entrypoint.sh
|
||||
|
||||
CMD ["sh", "entrypoint.sh"]
|
||||
|
||||
Reference in New Issue
Block a user